Django基礎 #1 Django とは — Why Django、FastAPI との位置
モダン Python 実践 シリーズで FastAPI を使って小さな API を作りながら、型ヒントと非同期を一カ所に集めました。今回の Django 基礎 シリーズでは同じ Python を使いつつも、フルスタックモノリス を建てる方式 — Django — を最初から見直します。7 編で小さなブログを 1 軒建てる流れです。
- #1 Django とは — Why Django、FastAPI との位置 ← 今回
- #2 プロジェクトのセットアップ — uv + django-admin startproject
- #3 Models と ORM 基礎 — migration、ForeignKey、QuerySet
- #4 URL と Views (FBV)
- #5 Templates と静的ファイル
- #6 Forms と ModelForm
- #7 Django Admin とビルトイン認証
基礎 7 編が終わると 中級 7 編 — CBV、ORM 中級、シグナル、権限 — その次に 上級 7 編 — async、キャッシング、Channels、デプロイ — 最後に DRF 6 編 へと続きます。全 27 編。長いですが、1 つのプロジェクトが育っていく流れ として見てください。
Django の一行定義 #
Django は Python で書かれたフルスタック Web フレームワーク です。「フルスタック」という単語が核心です。ルーティング、テンプレート、ORM、マイグレーション、フォーム、認証、管理者ページ、セキュリティヘッダ、静的ファイル処理まで — Web アプリ 1 軒を建てるのに必要なほぼすべての部品が 一つのパッケージの中に 入っています。これを Django 陣営では batteries included (電池同梱) と呼びます。
短い歴史 #
Django は 2003 年、米国カンザス州の小さな新聞社 Lawrence Journal-World で始まりました。Adrian Holovaty と Simon Willison という 2 人のインターン開発者が新聞社のオンラインコンテンツ管理システムを作りながら、繰り返される Web 開発の作業を抽象化したツールを作り始めたのが出発点でした。
2005 年 7 月 21 日、Django 0.90 がオープンソースとして公開されました。名前はジャズギタリストの Django Reinhardt から取ったものです。それから 20 年近い時間の間、Django は Instagram、Pinterest、Mozilla、Disqus、Bitbucket のような大きなサービスの背中で動いてきました。2026 年現在は Django 5.x が主流で、このシリーズも 5.x を基準に書きます。
MTV — Django 流の MVC #
Django は自身の構造を MTV (Model-Template-View) と呼びます。普通言う MVC とほぼ同じで、名前だけが違います。
| Django MTV | 一般的な MVC | 何をするか |
|---|---|---|
| Model | Model | DB テーブル定義、ORM |
| Template | View | HTML レンダリング |
| View | Controller | リクエスト処理ロジック |
「View が Controller なのか?」と最初は混乱しますが、一度覚えてしまえば大丈夫です。Django の View は関数 (またはクラス) で、Template が HTML です。
フルスタックの意味 — 何が付いてくるのか #
Django をワンライン install で付いてくるもの:
- ORM — Python クラスで DB テーブルを定義、SQL を直接書かずにクエリ
- マイグレーション — モデルの変更を DB スキーマの変更に自動変換
- Admin — モデルを登録するだけで自動で付いてくる管理者ページ (CRUD UI が無料)
- 認証 / 権限 — User モデル、ログイン / ログアウト、グループ / パーミッション
- セッション / クッキー — ビルトイン
- フォーム — HTML フォーム定義、検証、レンダリング
- テンプレートエンジン —
{% if %}、{% for %}、継承 - セキュリティ — CSRF、XSS、SQL Injection、Clickjacking のデフォルト防御
- 国際化 (i18n) — 多言語対応
- キャッシング — backend 抽象化 (Redis、Memcached、DB、ファイル)
- メール送信、メッセージフレームワーク、シグナル、ミドルウェア …
これを全部自分で集めたりライブラリで組み立てたりすると 1 ヶ月はかかります。Django は 1 日 で全部揃います。これが Django の哲学 — やるべきことはすでに全部やってある、君はビジネスロジックだけ書け。
Django vs Flask vs FastAPI #
FastAPI #1 で一度見た表を、今回は Django の視点 で描き直してみます。
| Django | Flask | FastAPI | |
|---|---|---|---|
| スタイル | フルスタック (バッテリー同梱) | マイクロ | マイクロ + 型 |
| 主な用途 | フルスタック Web アプリ、社内ツール、CMS | 小さな Web/API | 非同期 API |
| ORM | ビルトイン (強力) | 外部 (SQLAlchemy など) | 外部 (SQLAlchemy など) |
| Admin UI | ビルトイン (自動) | なし | なし |
| 認証 / セッション | ビルトイン | 外部ライブラリ | 外部 + 自前 |
| フォーム処理 | ビルトイン | 外部 (WTForms) | API 中心 (Pydantic) |
| マイグレーション | ビルトイン | Alembic など外部 | Alembic など外部 |
| 非同期 | 部分的 (4.0+、徐々に拡大) | 外部 | ネイティブ |
| 自動 API ドキュメント | DRF など別途 | 別途 | ビルトイン |
| 学習曲線 | 急 (学ぶことが多い) | 非常になだらか | なだらか |
| 適したチーム規模 | 中・大規模、長期運用 | 1 人〜小規模 | API 中心のチーム |
3 つのフレームワークすべて、向いている領域が違います。優劣ではなく 位置 です。
Django が向いている領域 #
次のうち 2 つ以上 に当てはまるなら Django を優先的に検討してください。
- 管理者ページが必要 — 内部ツール、運用者がデータを直接見て修正する必要がある
- フルスタックモノリス 1 軒で十分 — フロントとバックをわざわざ分離したくない
- DB が中心 — スキーマ、関係、トランザクションがビジネスの中心
- 認証・権限が複雑 — ユーザー、グループ、パーミッション、セッションが多く絡む
- 長期運用 — 5 年以上 1 つのコードベースを保守する可能性が大きい
- チームが大きい — コンベンションと構造が整っていることで新規参入が楽になる
代表的な例 — 社内 ERP、学習管理システム (LMS)、コンテンツ管理システム (CMS)、E コマース、予約システム、コミュニティ / ブログプラットフォーム。
Django が弱い領域 #
逆に次のような領域では他のツールがより向いています。
- 純粋な非同期 API の一片 — FastAPI のほうが軽くて速い
- マイクロサービスの一片 — Django のフルスタックは負担
- WebSocket 中心のリアルタイム — Django Channels で可能ですが Node/Go/Elixir 陣営のほうが成熟しています
- 超低レイテンシ / 高頻度呼び出し — 同期 WSGI のコスト
ただしこの領域も Django + DRF または Django 5.x async views で解ける場合が増えています — 上級 #1 で Async views、DRF #1 で DRF を扱います。
「Django と FastAPI、結局何を学べばいいのか」 #
両方です。同じ Python の上で 種類の違うツール なので、うまく組み合わせれば一緒に使えます。実際の製品でよく見られる組み合わせ:
- Django で社内 admin + FastAPI で外部公開 API — admin の豊かな機能と API の非同期 / 型安全の両方
- Django モノリス + 非同期タスクだけ別の FastAPI ワーカー — 責務の分離
- Django + DRF 単一モノリス — もっとも一般的な出発点、トラフィックが大きくなったら分離
このシリーズは Django 単独で 1 軒建てる流れですが、最後の 実戦 DRF トラックでは Django の上に REST API を載せるところも扱います。
このシリーズが作るもの — 小さなブログ #
7 編で作るのは ブログアプリ です。ユーザー、記事、コメント、タグ、管理者ページまで。各編がその上に部品を 1 つずつ積み上げる構成です。
| 編 | 追加される部品 |
|---|---|
| #2 | プロジェクトセットアップ、blog アプリの作成 |
| #3 | Post、Tag モデル、マイグレーション |
| #4 | /posts/、/posts/<id>/ URL + view |
| #5 | 記事一覧、記事詳細の HTML テンプレート |
| #6 | 記事作成 / 修正フォーム (ModelForm) |
| #7 | Admin 登録 + ログイン保護 |
基礎 7 編が終わると、動く小さなブログが 1 軒残ります。中級 / 上級 / 実戦ではその上に層を 1 つずつ積み上げていきます。
知っておくと良い語彙 #
読みながら頻繁に出会う単語を先に。
- project —
manage.pyがある最上位。1 サイト = 1 project - app — 再利用可能な機能単位。1 つの project は複数の app で構成。例:
blog、accounts、payments - model — DB テーブルにマッピングされる Python クラス
- migration — モデルの変化を SQL に変換したファイル
- view — リクエスト処理関数 (またはクラス)。FBV / CBV
- template — HTML テンプレート
- URLconf — URL パターン → view のマッピング
- manage.py — Django のすべての CLI エントリーポイント
まとめ #
今回つかんだもの:
- Django = Python のフルスタック Web フレームワーク、batteries included
- 2003 年 Lawrence Journal-World で発生、2005 年オープンソース、2026 年 5.x
- MTV = MVC (名前だけ違う)
- ORM、Admin、認証、フォーム、マイグレーション、セキュリティ — 全部一つのパッケージに
- Django の位置 — フルスタック、管理者が必要、DB 中心、長期運用、大きなチーム
- FastAPI の位置 — 非同期 API、型中心、マイクロ
- 2 つは競合ではなく 違う位置、一緒に使うこともできる
- このシリーズが作るもの — 小さなブログ 1 軒
次回(#2 プロジェクトのセットアップ)では モダン Python 実践 #1 で見たのと同じ uv ツールで Django プロジェクトを作り、manage.py runserver で最初のページを表示してみます。