Django最速デバッグ指南 PyConAPAC 2013

4,261 views

Published on

Djangoアプリケーションを開発する際のデバッグ方法について紹介します。
標準のDebugモード以外に使える様々なサードパーティライブラリを中心に、
私が趣味/仕事でのDjangoアプリケーションを開発する通して学んだデバッグ方法を具体的に紹介します。

アプリケーション開発時の泥沼のデバッグ作業は誰しも避けたいものです。
その時間はたいてい無駄になりますし、開発者自身つらいものがありますね。
優秀なツール使い、その負担を軽減しましょう。
適切なロギングで、発生した問題に素早く対処できるようにしましょう。

このセッションでは少しでも開発の助けになるよう、
Djangoアプリケーションのデバッグ方法を紹介します。

Published in: Technology
0 Comments
22 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,261
On SlideShare
0
From Embeds
0
Number of Embeds
93
Actions
Shares
0
Downloads
12
Comments
0
Likes
22
Embeds 0
No embeds

No notes for slide

Django最速デバッグ指南 PyConAPAC 2013

  1. 1. file:///home/hirokiky/Dropbox/sides/reveal.js­2.5.0/slides/pyconapac2013.html#/ Django最速デバッグ指南 @hirokiky hirokiky.org
  2. 2. 目的 Djangoでの開発を早くする デバッグに疲れないようにする 問題に素早く対応する
  3. 3. 対象 Webアプリ開発をしたことがある Djangoで開発をしたことがある
  4. 4. バグ photo by Brian searle 不具合 瑕疵
  5. 5. デバッグは何が起こってるのかを知ること photo by m4tik 何が起こっているのかを知る 自分が何をしたいかを明確にする その差分を埋める修正をする
  6. 6. 内容 前置き: 5分 デバッグ用ツール紹介 django-debug-toolbar: 10分 django-pdb: 10分 django-devserver: 5分 Logging: 10分
  7. 7. 自己紹介 (ふつう) 21歳 ドールと暮らしています @hirokiky
  8. 8. Django好きです フルスタックで必要なものが揃ってて 各コンポーネント間で統合されていて 早く開発できる
  9. 9. 自己紹介 (まじめ) 日本で4人目の 本体の貢献者 の運営 仕事は でDjango/Python Django djangoproject.jp BePROUD Inc
  10. 10. 最近作ったライブラリ紹介 django-websettings settings.pyライクなもの Webインタフェースから設定値を編集できる
  11. 11. Django最速デバッグ指南
  12. 12. デバッグ用ツール紹介 django-debug-toolbar django-pdb django-devserver
  13. 13. django-debug-toolbarとは デバッグ情報を常に表示するツールバー
  14. 14. django-debug-toolbarの良い点 リクエストのヘッダ/パラメーターなどが見れる 使われたテンプレートとコンテキストを見れる settings.pyの値を常に見れる 実行されたSQLを見れる ...などなど
  15. 15. RequestVarsDebugPanel view関数 Cookieの値 Sessionの値 GET / POST パラメーターの値
  16. 16. TemplateDebugPanel 使われたテンプレート 渡された引数 コンテキストプロセッサーとそこで渡された値
  17. 17. Settings Panel 有効なsettigsの値 特にsettingsを分割/構造化してるときに有効
  18. 18. SQL Panel 実行されたSQLを実行時間でガンドチャート表示 取得された各カラムの値
  19. 19. Panelを追加する django-debug-toolbarのパネルは標準以外もある Memcacheへの入出力を見るパネルなど
  20. 20. django-debug-toolbar アプリケーションの状態を表示してくれる ボトルネックの発見もできる
  21. 21. django-pdb Djangoでpdbを賢く使えるツール
  22. 22. django-pdbの良い点 コードを弄らずview内でデバッガーを走らせる テストで落ちたらpdbを走らせる テンプレート内でpdbを走らせる
  23. 23. ?pdbゲットパラメータ pdbを実行したい画面に ?pdb というパラメータをつけて実行 view callableが呼ばれた時点からpdbが走る
  24. 24. runserverで落ちたらpdb runserver --pm runserver実行時に落ちたらpdb
  25. 25. テストで落ちたらpdb manage.py test --pdbで実行 テストが落ちたら、落ちた時点からpdb実行
  26. 26. テンプレート内でpdb {{ variables|pdb }}で実行 debug-toolbarで細かく見れなかった値をみるのに有効
  27. 27. django-pdb pdbを欲しいときに楽に走らせられるツール
  28. 28. django-devserver debug-toolbar同様デバッグ情報の出力
  29. 29. 出力先はコンソール debug-toolbarと違いテンプレートが不要 API(テンプレートを使わないもの)でも有効 JSが走らないので画面の邪魔にならない
  30. 30. runserver --werkzeug エラー時にWerkzeugのインタラクティブなデバッガーが使えます runserverplusのためにdjango-extensions入れるより良い
  31. 31. 最近知ったばかりなのであんまり詳しくないです
  32. 32. logging
  33. 33. loggingについて ここまでは夢のツールのお話でしたが ここからはloggingのお話です
  34. 34. loggingすると良い点 状態を追える(デバッグ/障害時有効) アラート/通知をすれば問題に即時対応 集約すれば傾向分析
  35. 35. 正しいロギングはどちらでしょうか 1. logger.error('Invalid code: %s' % 'azunyan') 2. logger.error('Invalid code: %s', 'azunyan')
  36. 36. 2が正しいです logger.error('Invalid code: %s', 'azunyan')
  37. 37. 理由: ログ集約 第一引数のメッセージで同一ログと判断できます logger.error('Invalid code: %s', 'azunyan') logger.error('Invalid code: %s', 'miotan')
  38. 38. アンチパターン logger.error('Invalid code: azunyan') logger.error('Invalid code: miotan')
  39. 39. loggingに重要な点 正しく使う ログレベルの認識を一致させる ログの頻度の統一
  40. 40. 各ログレベルの使うべき状況 debug info warning (=warn) error critical (=fatal)
  41. 41. debug 開発時の値の追跡 printするなだdebugログ
  42. 42. info 動作の追跡 バッチなどの開始 / 終了 件数などの数字 (取り込み件数) 想定した動作だが残しておきたい情報 想定の範囲内でのスキップ動作
  43. 43. waring 機能は動作してるけど間違ってる バッチは死んでないが処理に漏れ バリデーションエラーくらいの問題
  44. 44. error 1機能が動作しない 500エラー(1画面/1機能で問題) 1つのバッチが落ちる
  45. 45. critical 複数/全機能に問題 想定しないよね
  46. 46. error => エラー通知メール warning => ログ集約の対象 info => ファイル出力 debug => 開発時コンソールのみ
  47. 47. まとめ ログを書きましょう(とくにバッチ/非同期処理) ログレベルを理解/プロジェクトで共有しましょう ログの頻度を各アプリで統一しておきましょう
  48. 48. and more Pycharm: Python向けIDE(IntelliJ) Sentry: ログ収集プラットフォーム
  49. 49. まとめ デバッグには何が起こってるかを知るのが大事 ツールを正しく使えばデバッグの負荷を軽減できる
  50. 50. 最後に PyconAPAC 2013のPythonコミュニティに対する多大なる貢献に感謝します
  51. 51. 3日目のSprintDayにDjangoSprintやるよ
  52. 52. 以上、 "Django最速デバッグ指南" でした @hirokiky hirokiky.org

×