Django

Python 製のフルスタック Web フレームワーク。必要な機能を一式備え高速開発を支える

Web開発フレームワーク
Django」の技術書を見る →

Django とは

Django (ジャンゴ) は、PythonWeb アプリケーションを構築するためのフレームワークだ。Web 開発に必要な機能を一通り標準で備える「フルスタック」型で、データベース操作・管理画面・認証・セキュリティ対策などが最初から用意されている。公式が掲げる設計哲学は疎結合と高凝集で、一式そろっていてもテンプレート層は Web リクエストを知らず、データベース層は表示のしかたを知らない。各層が互いを知らずに済むよう保たれているため、一式で使いながら必要な部分だけを差し替えることもできる。もう一つの明示された目標は「コードを少なく」、つまり定型的な繰り返しコードを書かせないことで、これが少ないコードで本格的な Web サービスを組み上げられる理由になっている。

生まれと現行の版

出発点は 2003 年秋、米国の新聞社の Web 部門 World Online で、Adrian Holovaty と Simon Willison が PHP をやめて Python で自社サイトを作り始めたことだった。取材の締め切りに追われる報道現場では複雑な Web アプリを数時間で公開する必要があり、その中から汎用の枠組みが抜き出されていった。2 年ほど手を入れたのち、2005 年夏に open source として公開されたのが Django だ (公式 FAQ)。名前は 1930 年代から 1950 年代前半に活躍したジャズギタリスト Django Reinhardt にちなむ。

2026 年 8 月時点の最新版は 6.1、長期サポート (LTS) の現行は 5.2 LTS で、こちらは 2028 年 4 月まで延長サポートが続く。4.2 LTS は 2026 年 4 月にサポートが切れているため、これから始めるなら 5.2 LTS 以降を選ぶ。なお 2028 年のリリースからは版番号が西暦 4 桁になり、機能リリースは毎年 1 月、どの機能リリースも 3 年サポートを受ける方式へ移行することが公式に告知されている。「LTS だけが長期サポート」という前提で運用計画を立てていると、この切り替えで前提が変わる。

何を提供するか

機能役割
ORMデータベースを Python オブジェクトとして操作
管理画面データ管理用の画面を自動生成
認証ログイン・権限管理を標準装備
セキュリティ主要な攻撃への対策を組み込み

特に、データモデルを定義するだけで管理画面が自動生成される機能は、開発初期の生産性を大きく高める。

ORM とマイグレーションの機序

ORM ではモデルクラスが 1 つのテーブル、クラスに並べたフィールドがその列に対応する。問い合わせは SQL ではなく Python の式として組み立て、実際に値を必要とする時点まで実行を遅らせてから SQL に変換される。この「遅延」があるため、条件を継ぎ足していっても発行される問い合わせは 1 本にまとまる。

モデル定義を書き換えたときに、既存のデータベースのテーブル構造を追随させる仕組みがマイグレーションだ。makemigrations がモデルの変更点をマイグレーションファイルにまとめ (公式ドキュメントはこれをコミットに例えている)、migrate がそれをデータベースへ適用する。ファイルは各アプリの migrations ディレクトリに置かれ、コードと一緒にバージョン管理へ入れて配布する前提で設計されている。適用前に実際の SQL を見たいときは sqlmigrate、どこまで当たっているかの一覧は showmigrations で確認できる。

つまずきやすいのは次の 2 点だ。1 つは一覧画面で 1 行ごとに関連オブジェクトを取りに行き、問い合わせが表示件数の分だけ増えてしまう形で、公式は select_related()prefetch_related() でまとめて取得することを勧めている (6.x 系ではアクセス時に一括取得する fetch mode も用意された)。もう 1 つは複数のブランチが同じアプリのマイグレーションを並行して作ってしまう衝突で、こちらは makemigrations --merge が解消用に用意されている。どちらも開発中は気づかず、データ量と人数が増えてから表に出る。

FastAPI との違い

観点DjangoFastAPI
範囲画面を含む Web アプリ全体API 構築に特化
機能一式そろったフルスタック軽量・必要な部分を組む
向く用途総合的な Web サービス高速な API・マイクロサービス

画面も含めた Web サービス全体を作るなら Django、API に特化するなら FastAPI という使い分けになる。管理画面と認証を自前で作る手間を考えると、社内向けの管理ツールを含む案件では Django 側に寄せたほうが総量は小さくなりやすい。

採用時の注意点

Django は多機能なぶん、フレームワーク独自の作法を理解する必要があり、小規模なアプリには重く感じることもある。標準機能が「規約」に沿って動くため、その流儀から大きく外れた要件では、かえって扱いにくくなる場合がある。また、セキュリティ対策が組み込まれているとはいえ、設定を誤れば穴になるため、過信は禁物だ。とりわけ DEBUG を有効なまま公開すると例外画面に設定値まで表示され、ALLOWED_HOSTS の指定を怠れば意図しないホスト名でのアクセスを受ける。

版の選択も採用時の判断に含まれる。機能リリースの寿命は LTS より短く、追随の手が空かない運用なら LTS を選んでおくほうが安全だ。逆に、新機能を早く取り込みたい場合は最新の機能リリースを追い、年 1 回程度の更新作業を運用計画へ最初から織り込む。

この記事は役に立ちましたか?

関連用語

関連する記事