SIGMA-SE Tech Blog

SIGMA-SE Tech Blog


当サイトは、過去に運営していた別ドメイン(unisia-se.com)から sigma-se.com へ移行した技術ブログです。
旧サイトの記事をもとに、内容の精査・加筆・最新化を行い再構成しています。
正確で実用的な情報提供を目的としています。

Django - Django Debug Toolbar:2/2 デバッグ情報とカスタマイズ

概要

Django Debug Toolbarで確認できる代表的な表示パネルと、DEBUG_TOOLBAR_PANELSによるカスタマイズ方法を整理する。

Toolbarの各パネルは、バージョン、処理時間、SQL、テンプレート、キャッシュ、ログなど、画面表示時の内部情報を確認する入口になる。どのパネルで何を見られるかを知っておくと、原因調査の流れを作りやすい。

この記事で扱うこと

  • Versions、Time、Settingsなどの基本パネルの役割。
  • Headers、Request、SQL、Templatesで確認できる情報。
  • Cache、Signals、Logging、Redirectsの使いどころ。
  • DEBUG_TOOLBAR_PANELSで表示パネルを変更する方法。
  • プロファイリング用パネルを追加する考え方。

作業前に確認すること

項目 確認内容
表示パネル 調査したい対象に応じて見るパネルを選ぶ。
SQLパネル N+1問題やクエリ回数の確認に使う。
Templatesパネル どのテンプレートが使われたかを確認する。
Loggingパネル 画面表示時に出力されたログを確認する。
カスタマイズ 必要なパネルだけを表示して調査しやすくする。

作業時の注意点

作業時の注意点 整理するポイント
パネルの見方 全パネルを見るより、調査目的に合わせて見る場所を決める。
Timeの解釈 サーバー処理とブラウザ側の表示時間を混同しない。
SQLの多さ クエリ数だけでなく、同じSQLが繰り返されていないかを見る。
Redirects 有効化するとリダイレクト動作が変わるため、調査時だけ使う。

実施内容

表示パネルの概要説明

以下、インストール後の初期状態から表示されているデフォルトパネルについて説明する。

  1. Versions
    Webアプリで使用されているモジュール(フレームワーク、言語、プラグイン等)のバージョン情報が表示される。
    pid11_1

  2. Time(時刻)
    現在の画面が表示されるまでの各処理に要した時間が確認できる。
    pid11_2

    • Resource usage > User CPU time
      クライアントからリクエストを受信してからページ構成を準備するまでの時間。
    • Resource usage > System CPU time
      「User CPU time」の後にサーバーがレスポンス情報を作成し、クライアントに返すまでの時間。
    • Resource usage > Total CPU time
      リクエストを受信してからクライアントに返すまでの時間。
      (「User CPU time」 + 「System CPU time」 の合計)
    • Resource usage > Elapsed time
      「Total CPU time」は、HTML、CSS、JavaScriptに関するサーバー処理とクライアント側のレンダリング時間を含めた値。
    • Resource usage > Context switches
      voluntary context switchesは、複数のプロセスを効率良く実行するため、自発的にコンテキストスイッチを実行した回数でinvoluntary context switchesは、実行優先度が高いプロセスを実行するために、強制的にコンテキストスイッチを実行した回数。
  3. Settings
    settings.pyを一覧で確認できる。
    pid11_3

  4. Headers
    HTTPリクエストヘッダー情報レスポンスヘッダー情報を確認できる。
    pid11_4

  5. Request
    ViewやCookie、Sessionなどのリクエスト情報を確認できる。
    pid11_5

  6. SQL
    画面が表示されるまでに実行されたSQL文をはじめ、それぞれに要した実行時間Stacktraceを確認できる。
    pid11_6

  7. Static Files
    画面を表示する際に読み込んだStaticファイルを確認できる。
    pid11_7

  8. Templates
    画面を表示する際に使用された継承も含むTemplateファイルを確認できる。
    pid11_8

  9. Cache
    画面を表示する際に利用されたキャッシュバックエンド情報を確認できる。
    pid11_9

  10. Signals
    フレームワークに備わっている各アクション単位での通知の受け渡し一覧。
    pid11_10

  11. Logging
    loggingモジュールで出力したログが確認できる。
    pid11_11

  12. Intercept redirects
    デフォルト無効であるチェックボックスを有効にするとリダイレクトが中断されるようになる。
    ※ リダイレクト処理をデバッグするときに使用する。

表示パネルのカスタマイズ

上記デフォルトパネルは、settings.pyDEBUG_TOOLBAR_PANELSに設定されている。

  • settings.pyのDEBUG_TOOLBAR_PANELS(デフォルト) 下記DEBUG_TOOLBAR_PANELSを変更することでパネルの並び替え削除追加ができるようになる。

    DEBUG_TOOLBAR_PANELS = [
        'debug_toolbar.panels.versions.VersionsPanel',
        'debug_toolbar.panels.timer.TimerPanel',
        'debug_toolbar.panels.settings.SettingsPanel',
        'debug_toolbar.panels.headers.HeadersPanel',
        'debug_toolbar.panels.request.RequestPanel',
        'debug_toolbar.panels.sql.SQLPanel',
        'debug_toolbar.panels.staticfiles.StaticFilesPanel',
        'debug_toolbar.panels.templates.TemplatesPanel',
        'debug_toolbar.panels.cache.CachePanel',
        'debug_toolbar.panels.signals.SignalsPanel',
        'debug_toolbar.panels.logging.LoggingPanel',
        'debug_toolbar.panels.redirects.RedirectsPanel'
    ]
    
  • プロファイリング情報の追加例

    DEBUG_TOOLBAR_PANELS = [
        'debug_toolbar.panels.versions.VersionsPanel',
        'debug_toolbar.panels.timer.TimerPanel',
        'debug_toolbar.panels.settings.SettingsPanel',
        'debug_toolbar.panels.headers.HeadersPanel',
        'debug_toolbar.panels.request.RequestPanel',
        'debug_toolbar.panels.sql.SQLPanel',
        'debug_toolbar.panels.staticfiles.StaticFilesPanel',
        'debug_toolbar.panels.templates.TemplatesPanel',
        'debug_toolbar.panels.cache.CachePanel',
        'debug_toolbar.panels.signals.SignalsPanel',
        'debug_toolbar.panels.logging.LoggingPanel',
        'debug_toolbar.panels.profiling.ProfilingPanel'    # 追記
    ]
    

    末尾に追加したプロファイリング情報が確認できるようになる。
    pid11_12

  • その他のパネルについて 下記サードパーティ製のパネルを参照。
    https://django-debug-toolbar.readthedocs.io/en/stable/panels.html#third-party-panels

実務とのつながり

  • 性能改善
    SQL回数や処理時間を見てボトルネックを探せる。
  • テンプレート調査
    継承関係や読み込まれたテンプレートを確認できる。
  • デバッグ設計
    調査に必要なパネルだけを残すと、確認作業が効率化する。

まとめ

  • Django Debug Toolbarの各パネルは、Django画面表示の内部状態を確認するための入口になる。
  • SQL、Templates、Timeなどは、性能調査や表示不具合の確認で特に役立つ。
  • DEBUG_TOOLBAR_PANELSを使うと、必要なパネルだけに絞って調査しやすくできる。


Copyright SIGMA-SE All Rights Reserved.
s-hama@sigma-se.jp