53
file:///home/hirokiky/Dropbox/sides/reveal.js2.5.0/slides/pyconapac2013.html#/ Django最速デバッグ指南 @hirokiky hirokiky.org

Django最速デバッグ指南 PyConAPAC 2013

Embed Size (px)

DESCRIPTION

Djangoアプリケーションを開発する際のデバッグ方法について紹介します。 標準のDebugモード以外に使える様々なサードパーティライブラリを中心に、 私が趣味/仕事でのDjangoアプリケーションを開発する通して学んだデバッグ方法を具体的に紹介します。 アプリケーション開発時の泥沼のデバッグ作業は誰しも避けたいものです。 その時間はたいてい無駄になりますし、開発者自身つらいものがありますね。 優秀なツール使い、その負担を軽減しましょう。 適切なロギングで、発生した問題に素早く対処できるようにしましょう。 このセッションでは少しでも開発の助けになるよう、 Djangoアプリケーションのデバッグ方法を紹介します。

Citation preview

Page 1: Django最速デバッグ指南 PyConAPAC 2013

file:///home/hirokiky/Dropbox/sides/reveal.js­2.5.0/slides/pyconapac2013.html#/

Django最速デバッグ指南@hirokiky

hirokiky.org

Page 2: Django最速デバッグ指南 PyConAPAC 2013
Page 3: Django最速デバッグ指南 PyConAPAC 2013

目的Djangoでの開発を早くするデバッグに疲れないようにする問題に素早く対応する

Page 4: Django最速デバッグ指南 PyConAPAC 2013

対象Webアプリ開発をしたことがあるDjangoで開発をしたことがある

Page 5: Django最速デバッグ指南 PyConAPAC 2013

バグ

photo by Brian searle

不具合瑕疵

Page 6: Django最速デバッグ指南 PyConAPAC 2013

デバッグは何が起こってるのかを知ること

photo by m4tik

何が起こっているのかを知る自分が何をしたいかを明確にするその差分を埋める修正をする

Page 7: Django最速デバッグ指南 PyConAPAC 2013

内容前置き: 5分デバッグ用ツール紹介

django-debug-toolbar: 10分django-pdb: 10分django-devserver: 5分

Logging: 10分

Page 8: Django最速デバッグ指南 PyConAPAC 2013

自己紹介 (ふつう)

21歳ドールと暮らしています

@hirokiky

Page 9: Django最速デバッグ指南 PyConAPAC 2013

Django好きです

フルスタックで必要なものが揃ってて各コンポーネント間で統合されていて早く開発できる

Page 10: Django最速デバッグ指南 PyConAPAC 2013

自己紹介 (まじめ)

日本で4人目の 本体の貢献者の運営

仕事は でDjango/Python

Djangodjangoproject.jp

BePROUD Inc

Page 11: Django最速デバッグ指南 PyConAPAC 2013

最近作ったライブラリ紹介django-websettings

settings.pyライクなものWebインタフェースから設定値を編集できる

Page 12: Django最速デバッグ指南 PyConAPAC 2013

Django最速デバッグ指南

Page 14: Django最速デバッグ指南 PyConAPAC 2013

django-debug-toolbarとはデバッグ情報を常に表示するツールバー

Page 15: Django最速デバッグ指南 PyConAPAC 2013

django-debug-toolbarの良い点リクエストのヘッダ/パラメーターなどが見れる使われたテンプレートとコンテキストを見れるsettings.pyの値を常に見れる実行されたSQLを見れる...などなど

Page 16: Django最速デバッグ指南 PyConAPAC 2013

RequestVarsDebugPanelview関数

Cookieの値

Sessionの値

GET / POST パラメーターの値

Page 17: Django最速デバッグ指南 PyConAPAC 2013

TemplateDebugPanel使われたテンプレート

渡された引数

コンテキストプロセッサーとそこで渡された値

Page 18: Django最速デバッグ指南 PyConAPAC 2013

Settings Panel有効なsettigsの値

特にsettingsを分割/構造化してるときに有効

Page 19: Django最速デバッグ指南 PyConAPAC 2013

SQL Panel実行されたSQLを実行時間でガンドチャート表示

取得された各カラムの値

Page 20: Django最速デバッグ指南 PyConAPAC 2013

Panelを追加するdjango-debug-toolbarのパネルは標準以外もある

Memcacheへの入出力を見るパネルなど

Page 21: Django最速デバッグ指南 PyConAPAC 2013

django-debug-toolbarアプリケーションの状態を表示してくれるボトルネックの発見もできる

Page 22: Django最速デバッグ指南 PyConAPAC 2013

django-pdbDjangoでpdbを賢く使えるツール

Page 23: Django最速デバッグ指南 PyConAPAC 2013

django-pdbの良い点コードを弄らずview内でデバッガーを走らせるテストで落ちたらpdbを走らせるテンプレート内でpdbを走らせる

Page 24: Django最速デバッグ指南 PyConAPAC 2013

?pdbゲットパラメータpdbを実行したい画面に ?pdb というパラメータをつけて実行

view callableが呼ばれた時点からpdbが走る

Page 25: Django最速デバッグ指南 PyConAPAC 2013

runserverで落ちたらpdbrunserver --pm

runserver実行時に落ちたらpdb

Page 26: Django最速デバッグ指南 PyConAPAC 2013

テストで落ちたらpdbmanage.py test --pdbで実行

テストが落ちたら、落ちた時点からpdb実行

Page 27: Django最速デバッグ指南 PyConAPAC 2013

テンプレート内でpdb{{ variables|pdb }}で実行

debug-toolbarで細かく見れなかった値をみるのに有効

Page 28: Django最速デバッグ指南 PyConAPAC 2013

django-pdbpdbを欲しいときに楽に走らせられるツール

Page 29: Django最速デバッグ指南 PyConAPAC 2013

django-devserverdebug-toolbar同様デバッグ情報の出力

Page 30: Django最速デバッグ指南 PyConAPAC 2013

出力先はコンソールdebug-toolbarと違いテンプレートが不要

API(テンプレートを使わないもの)でも有効

JSが走らないので画面の邪魔にならない

Page 31: Django最速デバッグ指南 PyConAPAC 2013

runserver --werkzeugエラー時にWerkzeugのインタラクティブなデバッガーが使えます

runserverplusのためにdjango-extensions入れるより良い

Page 32: Django最速デバッグ指南 PyConAPAC 2013

最近知ったばかりなのであんまり詳しくないです

Page 33: Django最速デバッグ指南 PyConAPAC 2013

logging

Page 34: Django最速デバッグ指南 PyConAPAC 2013

loggingについてここまでは夢のツールのお話でしたが

ここからはloggingのお話です

Page 35: Django最速デバッグ指南 PyConAPAC 2013

loggingすると良い点状態を追える(デバッグ/障害時有効)アラート/通知をすれば問題に即時対応集約すれば傾向分析

Page 36: Django最速デバッグ指南 PyConAPAC 2013

正しいロギングはどちらでしょうか1. logger.error('Invalid code: %s' % 'azunyan')2. logger.error('Invalid code: %s', 'azunyan')

Page 37: Django最速デバッグ指南 PyConAPAC 2013

2が正しいですlogger.error('Invalid code: %s', 'azunyan')

Page 38: Django最速デバッグ指南 PyConAPAC 2013

理由: ログ集約第一引数のメッセージで同一ログと判断できます

logger.error('Invalid code: %s', 'azunyan')logger.error('Invalid code: %s', 'miotan')

Page 39: Django最速デバッグ指南 PyConAPAC 2013

アンチパターンlogger.error('Invalid code: azunyan')logger.error('Invalid code: miotan')

Page 40: Django最速デバッグ指南 PyConAPAC 2013

loggingに重要な点正しく使うログレベルの認識を一致させるログの頻度の統一

Page 41: Django最速デバッグ指南 PyConAPAC 2013

各ログレベルの使うべき状況debuginfowarning (=warn)errorcritical (=fatal)

Page 42: Django最速デバッグ指南 PyConAPAC 2013

debug開発時の値の追跡printするなだdebugログ

Page 43: Django最速デバッグ指南 PyConAPAC 2013

info動作の追跡

バッチなどの開始 / 終了件数などの数字 (取り込み件数)

想定した動作だが残しておきたい情報想定の範囲内でのスキップ動作

Page 44: Django最速デバッグ指南 PyConAPAC 2013

waring機能は動作してるけど間違ってる

バッチは死んでないが処理に漏れバリデーションエラーくらいの問題

Page 45: Django最速デバッグ指南 PyConAPAC 2013

error1機能が動作しない

500エラー(1画面/1機能で問題)1つのバッチが落ちる

Page 46: Django最速デバッグ指南 PyConAPAC 2013

critical複数/全機能に問題想定しないよね

Page 47: Django最速デバッグ指南 PyConAPAC 2013

error => エラー通知メールwarning => ログ集約の対象info => ファイル出力debug => 開発時コンソールのみ

Page 48: Django最速デバッグ指南 PyConAPAC 2013

まとめログを書きましょう(とくにバッチ/非同期処理)ログレベルを理解/プロジェクトで共有しましょうログの頻度を各アプリで統一しておきましょう

Page 49: Django最速デバッグ指南 PyConAPAC 2013

and morePycharm: Python向けIDE(IntelliJ)Sentry: ログ収集プラットフォーム

Page 50: Django最速デバッグ指南 PyConAPAC 2013

まとめデバッグには何が起こってるかを知るのが大事ツールを正しく使えばデバッグの負荷を軽減できる

Page 51: Django最速デバッグ指南 PyConAPAC 2013

最後にPyconAPAC 2013のPythonコミュニティに対する多大なる貢献に感謝します

Page 52: Django最速デバッグ指南 PyConAPAC 2013

3日目のSprintDayにDjangoSprintやるよ

Page 53: Django最速デバッグ指南 PyConAPAC 2013

以上、 "Django最速デバッグ指南" でした@hirokiky

hirokiky.org