はじめてのDjango Debug Toolbar:インストールから見方まで解説

プラットフォーム事業部のOです。
本稿ではDjangoアプリケーションの開発に役立つDjango Debug Toolbarについてご紹介します。

この記事は以下の方を対象としています。

★5 Djangoの開発経験が3年以上。
★4 Djangoの開発経験が1年以上。
★3 Webサイト開発経験あり。これからDjangoを学習します。
★2 Python 初級者。簡単なプログラムコードが書けます。
★1プログラミング未経験。

Django Debug Toolbarとは

Djangoアプリケーションのデバッグを支援するための開発者向けツールです。
リクエストやパフォーマンスの詳細情報を簡単に確認することができます。

導入手順

1.1 インストール

pip install django-debug-toolbar

1.2 ‘setting.py’ の設定
INSTALLED_APPS に追加

INSTALLED_APPS = [
 'debug_toolbar', 
]

MIDDLEWARE に追加 (なるべく先頭に追加することを推奨)

MIDDLEWARE = [
    'debug_toolbar.middleware.DebugToolbarMiddleware',
]

INTERNAL_IPS の設定 (ローカル開発環境のIPを指定)

INTERNAL_IPS = [
    "127.0.0.1",
]

1.3 `urls.py` の設定
`DEBUG=True` の時のみ有効になるように設定

from django.conf import settings
from django.urls import include, path

if settings.DEBUG:
    import debug_toolbar
    urlpatterns = [
        path('__debug__/', include(debug_toolbar.urls)),
    ] + urlpatterns

Debug Toolbarへのアクセス

ローカルサーバーを起動し、ブラウザからアプリケーションへアクセスすると、
画面右側に表示されます。
アイコンをクリックすると、Debug Toolbarが展開され、さまざまなデバッグ情報を確認するためのパネル一覧が表示されます。

主な機能

Debug Toolbarには以下のような主要なパネルが含まれています:

  • バージョン : DjangoやPython、インストールされているライブラリのバージョン情報を表示します。
  • 時間 : リクエスト処理にかかった時間を表示します。ボトルネックの特定に役立ちます。
  • 設定 : 現在のDjango設定 (`settings.py` の内容) を一覧表示します。
  • ヘッダー : HTTPリクエストおよびレスポンスのヘッダー情報を表示します。
  • リクエスト: ビュー関数、セッションデータ、GET/POSTパラメータなどのリクエスト詳細を表示します。
  • SQL : 実行されたSQLクエリのリスト、所要時間、Explain結果などを確認できます。
  • 静的ファイル : 静的ファイルのパスを表示します。
  • テンプレート : レンダリングされたテンプレート、コンテキスト変数などを確認できます。
  • キャッシュ : キャッシュの利用状況を表示します。

効果的なボトルネックの特定方法

Django Debug Toolbarを使用してパフォーマンスのボトルネックを特定する際の主要なチェックポイントを紹介します。

SQLパネルでの問題検出

Webアプリケーションのパフォーマンス低下の最大の原因の一つは、データベースクエリです。

私自身、過去のプロジェクトで一覧画面の表示が遅いという問題に直面しました。
コードを見ても原因が特定できませんでしたが、このDebug ToolbarのSQLパネルを開いたときに、重複したSELECT文が発行されているのを確認しました。
このDebug Toolbarを使用したおかげで、原因を特定できた経験があります。

  • 重複クエリの確認 : SQLパネルを開き、同じようなクエリが複数回実行されていないか確認します。特に `SELECT ... FROM table WHERE id = ?` のような同じクエリが大量にある場合、N+1問題が発生している可能性があります。
  • 対処 : Djangoの `select_related()` や `prefetch_related()` を使用して、関連データを一度に取得するように最適化します。
  • クエリ時間の確認 : 実行時間が極端に長いクエリがないか確認し、必要であればインデックスの追加やクエリの見直しを行います。

時間パネルでの処理時間の分析

時間パネルでは、リクエスト処理のフェーズごとの所要時間を確認できます。

  • CPU時間と実経過時間
    • CPU時間が長い場合: Pythonコードの処理(計算、ループなど)に時間がかかっています。ビューのロジックやテンプレートのレンダリングを見直す必要があります。
    • 実経過時間が長く、CPU時間が短い場合: 外部API呼び出しやデータベースへのI/O待ちが発生している可能性があります。

注意点

Debug Toolbarは開発環境専用のツールです。
データベースの構造や実行されたクエリ、設定値などの内部情報が詳細に表示されるため、本番環境では必ず無効化してください。
通常、DEBUG = True かつ INTERNAL_IPS に含まれる環境でのみ表示されますが、デプロイ時には `INSTALLED_APPS` や `MIDDLEWARE` から除外する設定を行うことが、セキュリティ上望ましいです。

まとめ

Django Debug Toolbarは、Django開発において非常に強力なツールです。
特にSQLクエリの可視化による処理時間のボトルネック特定において、その威力を発揮します。
まだ活用しきれていない機能があれば、ぜひこの記事を参考に開発フローに取り入れて、より高品質なアプリケーション開発を目指してください。