3. Django プロジェクトを始める
3.1. この章で学ぶこと
Django とは何か、なぜ選ばれるのか
Django プロジェクトの作成(LLM と一緒に)
Django の構造理解(MTV)
Hello World 表示
管理画面
つまずきポイント集
ゲーム用プロジェクトの整理
Git へのコミット
3.2. イントロダクション
環境構築が完了したら、いよいよコードを書き始めます!
この章では、Djangoという魔法の杖を手に入れます。Djangoは「バッテリー同梱(Batteries Included)」と呼ばれる、必要な機能が最初から全て揃っているフレームワークです。
「バッテリー同梱」とは?
「バッテリー同梱」とは、電池が最初から付属しているおもちゃのように、「買ってすぐ使える」ことを表すプログラミング界の慣用表現です。つまり、Webアプリに必要なものがほとんど最初から揃っています。
認証、データベース、管理画面、フォーム処理…これらを一から作ると何ヶ月もかかりますが、Djangoなら数分で準備できます。
まずは、Djangoの"Hello, World!"を表示させて、成功体験を積みましょう。
Tip
この章のゴール
[√] Djangoプロジェクトを作成
[√] 開発サーバーを起動
[√] ブラウザで"Hello, World!"を表示
[√] Djangoの基本構造を理解
所要時間: 約1.5時間
3.3. Django とは
3.3.1. Web フレームワークって何?
Web アプリを作るとき、毎回ゼロから作るのは大変です。どのアプリにも共通する機能があります:
URL にアクセスしたら、対応するページを表示
データベースからデータを取得
HTML を生成してブラウザに返す
ユーザーの入力を受け取って処理
これらの「よくある処理」をまとめたのがWeb フレームワークです。
3.3.2. Django の特徴
Django は 2005 年に生まれた、Python で最も人気のある Web フレームワークの一つです。
Django が選ばれる理由:
バッテリー同梱(Batteries Included)
必要な機能がほとんど最初から入っている
別途ライブラリを探す手間が少ない
管理画面が自動生成
データベースの CRUD 操作が管理画面でできる
非エンジニアでもデータを編集可能
セキュアなデフォルト設定
SQL インジェクション、XSS、CSRF などの対策が組み込み
初心者でも安全なアプリが作れる
ORM(Object-Relational Mapping)
SQL を書かずにデータベース操作
Python のコードでデータベースを扱える
大規模でも使える
Instagram、Pinterest、NASA など、大手サービスでも採用
スケーラビリティが実証済み
注釈
バッテリー同梱
「バッテリー同梱」とは、電池が最初から入っているおもちゃや、箱を開けてすぐ使えるスマホアクセサリーのように、「買ってすぐ使える」ことを表すプログラミング界の慣用表現です。
Django を使った有名サービス:
Instagram(写真共有)
Pinterest(画像ブックマーク)
Spotify(音楽ストリーミング)
Dropbox(ファイル共有)
3.3.3. Django の MTV 構造
Django は MTV(Model-Template-View) という設計パターンを採用しています。
各要素の役割:
Model(モデル): データベースとのやり取り
データの構造を定義
データの保存、取得、更新、削除
Template(テンプレート): 表示
HTML ファイル
Python の変数を埋め込める
View(ビュー): ロジック
Model からデータをとってきて Template に渡す
ユーザーの入力を処理
注釈
他のフレームワークとの用語の違い
Ruby on Rails や Laravel など、他のフレームワークでは MVC(Model-View-Controller) と呼ばれます。
Django の MTV と MVC の対応:
Django Model = MVC Model
Django Template = MVC View
Django View = MVC Controller
用語が違うだけで、やっていることは同じです。
3.4. プロジェクト作成(LLM と一緒に)
さあ、実際に Django プロジェクトを作りましょう。
3.4.1. 作業ディレクトリの準備
まず、ターミナルを起動します。
Windows の場合:
PowerShell を起動
Windows キーを押して「PowerShell」と入力
「Windows PowerShell」または「PowerShell」を選択
または、スタートメニューから「Windows PowerShell」を検索
コマンドプロンプトを使う場合
Windows キーを押して「cmd」と入力
「コマンドプロンプト」を選択
macOS の場合:
Spotlight 検索を使う方法(推奨)
Cmd + Spaceを押して Spotlight 検索を開く「ターミナル」と入力して Enter
Finder から起動する方法
Finder を開く
「アプリケーション」→「ユーティリティ」→「ターミナル」をダブルクリック
Dock から起動する方法
Dock にターミナルが追加されている場合、アイコンをクリック
ターミナルが起動したら、プロジェクトを置くディレクトリを作ります。
# ホームディレクトリに移動
cd ~
# プロジェクト用のディレクトリを作成
mkdir projects
cd projects
# この本のプロジェクト用ディレクトリ
mkdir adventure-game
cd adventure-game
# 現在位置を確認
pwd
期待される出力(macOS/Linux の場合):
/Users/YourName/projects/adventure-game
期待される出力(Windows の場合):
C:\Users\YourName\projects\adventure-game
注釈
YourNameについて
上記の出力例ではYourNameと表示していますが、これはあなたのユーザー名に置き換わります。
例えば:
macOS でユーザー名が
taroの場合:/Users/taro/projects/adventure-gameWindows でユーザー名が
yamadaの場合:C:\Users\yamada\projects\adventure-game
実際の出力は、あなたの PC に設定されているユーザー名が表示されます。
3.4.2. プロジェクトの初期化
uvを使ってプロジェクトを初期化します。これにより、pyproject.tomlが作成され、依存関係を管理しやすくなります。
仮想環境は、プロジェクトごとに独立した Python 環境を作る仕組みです。
なぜ仮想環境が必要?
プロジェクト A: Django 4.2 が必要
プロジェクト B: Django 5.0 が必要
仮想環境なし → どちらか一方しかインストールできない(競合)
仮想環境あり → それぞれ別々の環境で共存できる
3.4.2.1. プロジェクトの初期化
第 2 章で学んだuvを使ってプロジェクトを初期化します。
# uv でプロジェクトを初期化
uv init --python 3.13
※ --python オプションを使って実行される python の最低バージョンを指定します。
注釈
uv initの使い分け
uv init プロジェクト名:新しいディレクトリを作成してプロジェクトを初期化uv init:現在のディレクトリでプロジェクトを初期化
今回は既にadventure-gameディレクトリにいるので、引数なしのuv initを使います。
期待される出力:
Initialized project `adventure-game`
作成されたファイル構造(uv init実行後):
adventure-game/
├── .git/ # Git リポジトリ(自動初期化)
├── .gitignore # Git の除外設定
├── .python-version # Python バージョン指定ファイル
├── main.py # サンプルコード(削除予定)
├── pyproject.toml # プロジェクト設定ファイル
└── README.md # プロジェクト説明ファイル(空ファイル)
注釈
ファイル構造の確認方法
ターミナルで以下のコマンドを実行すると、ファイル構造を確認できます:
# macOS/Linux の場合
ls -la
# Windows の場合(PowerShell)
dir
ls -laコマンドの説明:
ls: ファイルとディレクトリの一覧を表示-l: 詳細情報(ファイルサイズ、更新日時など)を表示-a: 隠しファイル(.で始まるファイル)も表示
出力例(macOS/Linux):
total 16
drwxr-xr-x 7 user staff 224 Dec 15 10:00 .
drwxr-xr-x 5 user staff 160 Dec 15 09:55 ..
drwxr-xr-x 8 user staff 256 Dec 15 10:00 .git
-rw-r--r-- 1 user staff 45 Dec 15 10:00 .gitignore
-rw-r--r-- 1 user staff 8 Dec 15 10:00 .python-version
-rw-r--r-- 1 user staff 123 Dec 15 10:00 pyproject.toml
-rw-r--r-- 1 user staff 12 Dec 15 10:00 README.md
「.」 や 「…」 は特別なファイル/ディレクトリです。 「.」 は現在のディレクトリそのものを表し、「…」 は親ディレクトリを表します。
出力例(Windows PowerShell):
Directory: C:\Users\YourName\projects\adventure-game
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 12/15/2025 10:00 AM .git
-a---- 12/15/2025 10:00 AM 45 .gitignore
-a---- 12/15/2025 10:00 AM 8 .python-version
-a---- 12/15/2025 10:00 AM 123 pyproject.toml
-a---- 12/15/2025 10:00 AM 12 README.md
main.py を削除:
uv initで作成されるmain.pyは、Django プロジェクトでは不要なので削除します。
# main.py を削除
rm main.py
# Windows の場合は: del main.py
削除後のファイル構造:
adventure-game/
├── .git/ # Git リポジトリ(自動初期化)
├── .gitignore # Git の除外設定
├── .python-version # Python バージョン指定ファイル
├── pyproject.toml # プロジェクト設定ファイル
└── README.md # プロジェクト説明ファイル(空ファイル)
注釈
.gitディレクトリについて
uv initを実行すると、Git リポジトリが自動的に初期化されます。.gitディレクトリには Git の設定情報が保存されますが、通常は直接編集しません。
仮想環境(.venv)は、uv addなどのコマンドを実行したときに自動的に作成されます。
3.4.2.2. pyproject.toml について
uv initを実行すると、プロジェクトディレクトリにpyproject.tomlというファイルが作成されます。このファイルには、プロジェクトの設定と依存関係が記録されます。
pyproject.tomlの役割:
プロジェクトのメタデータ(名前、バージョン、説明など)を定義
依存関係(
djangoなど)を記録プロジェクトの設定を管理
uv add djangoなどのコマンドを実行すると、pyproject.tomlが自動的に更新され、依存関係が追加されます。
注釈
README.md について
uv initで作成されるREADME.mdは空ファイルです。後で LLM にプロジェクトの説明を書いてもらうことができます。
例えば、以下のように LLM に依頼できます:
あなた: この Django プロジェクトの README.md を書いてください。
プロジェクト名は「廃墟研究所からの脱出」で、
Django + LLM で作るテキストアドベンチャーゲームです。
LLM: [README.md の内容を生成]
今は空のままで問題ありません。
3.4.3. Django のインストール
仮想環境内に Django をインストールします。
# uv を使って Django をインストール(推奨)
uv add django==5.2
# インストール確認
uv run django-admin --version
期待される出力(uv add django実行時):
Using CPython 3.13.x interpreter at: /path/to/python3.13
Creating virtual environment at: .venv
Resolved 5 packages in 332ms
Prepared 2 packages in 1.02s
Installed 3 packages in 158ms
+ asgiref==3.11.0
+ django==5.2.x
+ sqlparse==0.5.4
期待される出力(uv run django-admin --version実行時):
5.2.x
または、より確実な方法:
uv run python -m django --version
注釈
django-adminとpython -m djangoの使い分け
python -m djangoの方がより確実な理由:django-adminは OS の PATH 設定に依存しますが、python -m djangoは現在使用中の Python 環境内の Django を確実に呼び出すためです。
uv add django実行後のファイル構造:
adventure-game/
├── .git/
├── .gitignore
├── .python-version
├── .venv/ # 仮想環境(uv add で自動作成)
├── pyproject.toml # 依存関係が追加される
├── uv.lock # 正確なバージョンが記録される(新規作成)
└── README.md
3.4.3.1. uv.lock について
uv add djangoを実行すると、uv.lockというファイルも自動的に作成されます。
uv.lockの役割:
インストールされたパッケージの正確なバージョンを記録
依存関係の依存関係(間接的な依存関係)も含めて記録
他の環境で全く同じバージョンのパッケージを再現可能にする
pyproject.tomlとuv.lockの違い:
pyproject.toml: 人間が読み書きする設定ファイル。依存関係の範囲(例:django>=5.2)を指定uv.lock: 自動生成されるファイル。実際にインストールされた正確なバージョン(例:django==5.2.x)を記録
なぜ両方必要?
pyproject.toml: 開発者が「Django 5.2 以上が必要」と指定uv.lock: 実際にインストールされた「Django 5.2.x」を記録
これにより、他の開発者や本番環境でも、全く同じバージョンのパッケージをインストールできます。
Tip
uv.lockは Git にコミットする
uv.lockは、プロジェクトの依存関係を正確に再現するために重要です。必ず Git にコミットしてください。
.gitignoreにuv.lockが含まれていないことを確認しましょう。
注釈
uv runについて
uvでインストールしたパッケージのコマンドを実行する場合は、uv runを使います。
django-admin --version→uv run django-admin --versionpython manage.py runserver→uv run python manage.py runserver
uv runを使うと、自動的に仮想環境内のパッケージが使用されます。
3.4.4. Django プロジェクトの作成
いよいよプロジェクトを作成します。
# Django プロジェクトを作成
uv run django-admin startproject server .
警告
最後の . を忘れずに!
uv run django-admin startproject server .
# ↑ここ(最後のドット)
.がないと、ディレクトリがネストして分かりにくくなります:
# . なしの場合(分かりにくい)
adventure-game/
└── server/
└── server/
└── ...
# . ありの場合(推奨)
adventure-game/
└── server/
└── ...
期待される出力:
(何も表示されない = 成功)
作成されたファイル構造:
adventure-game/
├── .venv/ # 仮想環境
├── server/ # プロジェクト設定ディレクトリ
│ ├── __init__.py # Python パッケージマーク
│ ├── settings.py # 設定ファイル(重要)
│ ├── urls.py # URL ルーティング
│ ├── asgi.py # 非同期サーバー用(今は不要)
│ └── wsgi.py # 本番サーバー用(後で使う)
├── uv.lock # uv の依存関係管理用
├── pyproject.toml # プロジェクト管理用
└── manage.py # 管理コマンド(重要)
注釈
サブディレクトリの確認方法:
ファイル構造の確認で説明したls -laは、現在のディレクトリのファイルとディレクトリのみを表示します。
サブディレクトリの中身を確認するには、cdコマンドでサブディレクトリに移動してからls -laを実行します。
# 例: server ディレクトリの中身を確認する場合
cd server
ls -la
# 元のディレクトリに戻る場合
cd ..
例: serverディレクトリの中身を確認
# server ディレクトリに移動
cd server
# server ディレクトリの中身を確認
ls -la
出力例:
total 24
drwxr-xr-x 5 user staff 160 Dec 15 10:05 .
drwxr-xr-x 7 user staff 224 Dec 15 10:00 ..
-rw-r--r-- 1 user staff 0 Dec 15 10:05 __init__.py
-rw-r--r-- 1 user staff 1234 Dec 15 10:05 settings.py
-rw-r--r-- 1 user staff 567 Dec 15 10:05 urls.py
-rw-r--r-- 1 user staff 234 Dec 15 10:05 asgi.py
-rw-r--r-- 1 user staff 345 Dec 15 10:05 wsgi.py
各ファイルの役割:
ファイル |
役割 |
|---|---|
|
Django コマンドを実行するスクリプト |
|
プロジェクトの設定(データベース、言語など) |
|
URL とビューの対応付け |
|
本番環境でのデプロイに使用 |
3.4.5. 開発サーバーの起動
Django には開発用のサーバーが組み込まれています。
uv run python manage.py runserver
期待される出力:
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
December 15, 2025 - 07:49:47
Django version 5.2.x, using settings 'server.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
WARNING: This is a development server. Do not use it in a production setting. Use a production WSGI or ASGI server instead.
For more information on production servers see: https://docs.djangoproject.com/en/5.2/howto/deployment/
注釈
出力例について
※ 上記の出力例の「18 unapplied migration(s)」の数字(この例では 18)は、Django のバージョンによって異なりますが、問題ありません。
警告メッセージについて
2 つの警告メッセージが表示されます:
「unapplied migration(s)」というメッセージ: データベースのマイグレーションが未適用です。
この警告は「エラー」ではなく「お知らせ」です。 Django の標準機能(ユーザー管理など)を使うためのテーブルがまだ作成されていないという意味です。 3.5.3 章で解決するので、今は進めて大丈夫です。
「WARNING: This is a development server…」: 開発用サーバーであることを示す警告です。
開発中は問題ありませんが、本番環境では使用しないでください。デプロイのデプロイ時に本番用サーバーを使用します。
注釈
マイグレーション警告について
「unapplied migration(s)」という警告は、Django の標準機能(ユーザー管理、セッション管理など)を使うために必要なデータベーステーブルがまだ作成されていないことを意味します。
これは正常な状態で、次のコマンドで解決します。エラーではありません。
3.4.6. ブラウザで確認
ブラウザを開く
以下の URL にアクセス
http://127.0.0.1:8000/
または
http://localhost:8000/
Django のウェルカムページが表示される!
成功です!Django が動いています!
Tip
サーバーの停止
ターミナルで Ctrl + C を押すとサーバーが停止します。
再起動する時は、再度 uv run python manage.py runserver を実行。
コマンド履歴の活用
Cursor のターミナルでは、上矢印キー(↑)を押すと履歴からコマンドを呼び出せます。長いコマンドを何度も入力する手間が省けます。
3.5. Django の構造理解
3.5.1. manage.py とは
manage.pyは、Django の様々なコマンドを実行するためのスクリプトです。
よく使うコマンド:
# 開発サーバーを起動
uv run python manage.py runserver
# データベースのマイグレーション実行
uv run python manage.py migrate
# 管理者ユーザーを作成
uv run python manage.py createsuperuser
# アプリケーションを作成
uv run python manage.py startapp app_name
# Python シェルを起動(Django の機能が使える)
uv run python manage.py shell
3.5.2. settings.py の重要な設定
settings.pyは、Django プロジェクト全体の設定を管理するファイルです。データベース接続、インストール済みアプリケーション、言語設定、タイムゾーンなど、プロジェクトの動作に必要なすべての設定がここに記述されます。
server/settings.pyを Cursor で開いてみましょう。
Cursor でファイルを開く方法:
重要
プロジェクトを開く必要があります
Cursor でサイドバーからファイルを開くには、まずプロジェクト(作業ディレクトリ)を開いている必要があります。
プロジェクトを開く方法:
File メニューから開く
File→Open Folder...(macOS:File→Open Folder...)adventure-gameディレクトリを選択
ドラッグ&ドロップで開く
Finder(macOS)またはエクスプローラー(Windows)で
adventure-gameフォルダを開くフォルダを Cursor のウィンドウにドラッグ&ドロップ
ターミナルから開く
cd ~/projects/adventure-game cursor .
プロジェクトを開いた後、以下の方法でファイルを開けます。
サイドバーから開く
Cursor の左側のサイドバー(エクスプローラー)で、
serverフォルダを展開settings.pyをクリックして開く
Cmd/Ctrl + P で検索して開く
Cmd+P(macOS)またはCtrl+P(Windows)を押す「settings.py」と入力して Enter キーを押す
ファイルパスから直接開く
Cmd+O(macOS)またはCtrl+O(Windows)を押すファイル選択ダイアログで
server/settings.pyを選択
ターミナルから開く(Cursor のターミナル機能を使用)
Cursor の統合ターミナルで以下を実行:
cursor server/settings.pyまたは
code server/settings.py
Tip
Cursor でのファイル検索のコツ
Cmd/Ctrl + Pでファイルを検索する際は、ファイル名の一部を入力するだけで、候補が表示されます。
例:
「settings」→
settings.pyが候補に表示される「urls」→
urls.pyが候補に表示される
また、フォルダ名も含めて検索できます:
「server settings」→
server/settings.pyが候補に表示される
3.5.2.1. SECRET_KEY
SECRET_KEY = 'django-insecure-...'
SECRET_KEYは、Django のセキュリティ機能で使用される重要な値です。セッション、CSRF 保護、署名付きデータの検証などに使用されます。
警告
SECRET_KEY の重要性
SECRET_KEY は、Django のセキュリティ機能で使用される重要な値です。
[√] 開発中: 生成されたものをそのまま使って OK
[×] 本番環境: 必ず変更し、環境変数で管理(10 章EC2 インスタンスのセットアップで解説)
[×] 公開リポジトリ: 機密情報のため、本来はコミットすべきではない
注釈
学習段階での扱い
学習段階では、練習用なのでコミットしてしまいますが、実際のアプリを公開する際は10 章で学ぶ環境変数の方法を使います。
実際の開発では、SECRET_KEY を.env ファイルで管理し、.gitignore に追加する習慣をつけましょう。 2 章で学んだ環境変数の基礎を活用します。
# .env ファイルの作成
SECRET_KEY=django-insecure-your-key-here
# .gitignore に追加
.env
詳細は10 章EC2 インスタンスのセットアップで扱います。 今は settings.py の値をそのまま使っていて構いません。
3.5.2.2. DEBUG 設定
# 開発中は True、本番環境では False
DEBUG = True
True: 詳細なエラーメッセージが表示される(開発用)False: ユーザーには簡単なエラーページ(本番用)
3.5.2.3. ALLOWED_HOSTS
ALLOWED_HOSTS = []
ALLOWED_HOSTS とは?
ALLOWED_HOSTSは、どのホスト(ドメイン)からのリクエストを受け付けるかを制御する設定です。
セキュリティのため、Django はリクエストのHostヘッダーをチェックし、ALLOWED_HOSTSに含まれていないホストからのリクエストは拒否します。
なぜ必要か?
悪意のあるユーザーが、偽のHostヘッダーを送信して、Django アプリケーションを騙そうとする攻撃(Host Header Attack)を防ぐためです。
開発中(DEBUG=True)の間は、このままでも localhost からアクセスできます。Django は開発環境ではALLOWED_HOSTSのチェックを緩和します。
本番環境(DEBUG=False)では、ここに許可するドメイン名を必ず設定する必要があります。設定しないと、すべてのリクエストが拒否され、アプリケーションにアクセスできなくなります。
# 本番時(例)
ALLOWED_HOSTS = ['example.com', 'www.example.com']
設定例:
# 特定のドメインのみ許可
ALLOWED_HOSTS = ['example.com', 'www.example.com']
# すべてのサブドメインを許可(ワイルドカード使用)
ALLOWED_HOSTS = ['.example.com'] # example.com と *.example.com を許可
# 開発環境と本番環境で分ける場合(推奨)
if DEBUG:
ALLOWED_HOSTS = [] # 開発環境では空で OK
else:
ALLOWED_HOSTS = ['example.com', 'www.example.com'] # 本番環境では必須
3.5.2.4. INSTALLED_APPS
Django での「アプリ」とは?
Django では、プロジェクト全体を小さな機能単位の「アプリケーション(アプリ)」に分割して開発します。 例えば、ブログサイトなら「記事管理アプリ」「コメントアプリ」「ユーザー管理アプリ」のように分けます。
プロジェクト: サイト全体の設定を管理(
settings.pyなど)アプリ: 特定の機能を実装する単位(モデル、ビュー、テンプレートを含む)
INSTALLED_APPS とは?
INSTALLED_APPSは、Django プロジェクトで使用するアプリケーションのリストです。ここに登録されたアプリのみが、Django の機能(データベースマイグレーション、管理画面への表示など)を利用できます。
INSTALLED_APPS = [
'django.contrib.admin', # 管理画面
'django.contrib.auth', # 認証
'django.contrib.contenttypes', # コンテンツタイプ
'django.contrib.sessions', # セッション管理
'django.contrib.messages', # メッセージフレームワーク
'django.contrib.staticfiles', # 静的ファイル管理
]
django.contrib.*は、Django が提供する標準アプリケーションです。自分で作ったアプリケーションも、ここに追加します(後で実践)。
3.5.2.5. DATABASES
DATABASES とは?
DATABASESは、Django プロジェクトで使用するデータベースの接続情報を設定する項目です。
Django は複数のデータベースを同時に使用できますが、通常はdefaultという名前のデータベースを 1 つ使用します。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
ENGINE: 使用するデータベースエンジンを指定(SQLite、PostgreSQL、MySQL など)
NAME: データベースファイルのパス(SQLite の場合)またはデータベース名
デフォルトで SQLite が設定されています。 SQLite はファイルベースのデータベースで、設定が簡単で開発に適しています。 本書ではこのまま使います。
3.5.2.6. LANGUAGE_CODE
LANGUAGE_CODE とは?
LANGUAGE_CODEは、Django アプリケーションのデフォルト言語を設定する項目です。
管理画面やエラーメッセージなど、Django が自動生成するテキストの言語が決まります。
# デフォルトは英語
LANGUAGE_CODE = 'en-us'
# 日本語に変更する場合
LANGUAGE_CODE = 'ja'
言語コードは ISO 639-1 形式(2文字)または ISO 639-1 と ISO 3166-1 の組み合わせ(例: ja、en-us)で指定します。
注釈
ISO 規格について
ISO(International Organization for Standardization、国際標準化機構)は、国際的な規格を定める組織です。
ISO 639-1: 言語を表す 2 文字コード(例:
ja=日本語、en=英語、fr=フランス語)ISO 3166-1: 国や地域を表す 2 文字コード(例:
JP=日本、US=アメリカ、GB=イギリス)
組み合わせの例:
ja: 日本語(ISO 639-1 のみ)en-us: 英語(アメリカ)(ISO 639-1 + ISO 3166-1)en-gb: 英語(イギリス)(ISO 639-1 + ISO 3166-1)
Django では、主に ISO 639-1 の言語コードを使用します。 地域の違いを区別したい場合(例: アメリカ英語とイギリス英語)は、ISO 3166-1 も組み合わせます。
3.5.2.7. TIME_ZONE
タイムゾーンとは?
タイムゾーンとは、地球上の地域ごとに設定されている標準時刻のことです。 地球は丸いため、地域によって太陽の位置が異なり、時刻も変わります。
例えば:
日本(Asia/Tokyo): 日本標準時(JST)、UTC+9 時間
アメリカ東海岸(America/New_York): 東部標準時(EST)、UTC-5 時間(夏時間は UTC-4 時間)
イギリス(Europe/London): グリニッジ標準時(GMT)、UTC+0 時間(夏時間は UTC+1 時間)
同じ瞬間でも、地域によって表示される時刻が異なります。 例えば、日本が午後 3 時の時、イギリスは午前 6 時です。
TIME_ZONE とは?
TIME_ZONEは、Django アプリケーションで使用するタイムゾーンを設定する項目です。
日時データの保存や表示に影響します。
# デフォルトは UTC
TIME_ZONE = 'UTC'
# 日本時間に変更する場合
TIME_ZONE = 'Asia/Tokyo'
注釈
UTC とは?
UTC(協定世界時)は、世界共通の基準時刻です。 データベースには常に UTC で保存され、表示時に設定されたタイムゾーンに変換されます。
タイムゾーンは IANA タイムゾーンデータベースの形式(例: Asia/Tokyo、America/New_York)で指定します。
Tip
設定を日本語化
settings.pyを開いて、以下を変更してみましょう:
LANGUAGE_CODE = 'ja'
TIME_ZONE = 'Asia/Tokyo'
保存後、サーバーを再起動すると、ウエルカム画面や管理画面が日本語になります。
3.5.3. マイグレーションの実行
先ほどの警告メッセージを解決しましょう。
データベースとは?
まずデータベースについて説明します。 データベースは、データを整理して保存するための仕組みです。 Excel のスプレッドシートをイメージすると分かりやすいでしょう。
Excel のシート = データベースのテーブル(表)
Excel の行 = データベースのレコード(1件のデータ)
Excel の列 = データベースのカラム(項目名)
例えば、ユーザー情報を保存するテーブルなら:
ID |
名前 |
メールアドレス |
|---|---|---|
1 |
太郎 |
|
2 |
花子 |
このような表形式でデータを保存・管理できます。 データベースを使うことで、大量のデータを効率的に保存し、検索や更新が簡単にできます。
マイグレーションとは?
マイグレーションは、データベースの構造(テーブル)を作成・変更する仕組みです。 Excel で新しいシートを作成したり、列を追加したりする作業を、Django が自動的に管理してくれます。
# サーバーを停止(Ctrl + C)
# マイグレーションを実行
uv run python manage.py migrate
期待される出力:
Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
...
Applying sessions.0001_initial... OK
何が起きた?
db.sqlite3というファイルが作成されたその中に、認証やセッション管理に必要なテーブルが作られた
# ファイルを確認
ls -la
出力(db.sqlite3 が追加されている):
...
-rw-r--r-- 1 user staff 143360 Jan 30 10:05 db.sqlite3
...
これで Django でシステムを作る基礎は作成できました。
3.6. Hello World 表示
それでは、次に Django のウェルカムページではなく、自分のページを表示させましょう。
ここでは、テンプレートを使った Hello World を表示する方法を学びます。 この方法では、HTML テンプレートを使って見た目の整ったページを表示します。
テンプレートとは?
テンプレートは、HTML ファイルに動的なデータ(変数)を埋め込むための仕組みです。
例えば、「現在の時刻を表示する」という場合、時刻は常に変わるので、テンプレート内に{{ current_time }}という変数を書いておき、Python 側で時刻を計算して渡します。
テンプレートを使うことで:
HTML の見た目と、Python の処理を分離できる
同じテンプレートを複数のページで使い回せる
デザインの変更が簡単になる
ここでは、「プロジェクト作成(LLM と一緒に)」で作成したserverプロジェクトに対して、Hello World を表示するビューを作成します。
重要
【重要】作業ディレクトリの確認
ここから先のコマンドは、すべてadventure-gameディレクトリで実行してください。
# 現在位置を確認
pwd
# 期待される出力:/Users/YourName/projects/adventure-game
違っていれば以下で移動:
cd ~/projects/adventure-game
3.6.1. ステップ 1: アプリケーションの作成
まず、gameという名前のアプリケーションを作成します。
既に「ゲーム用プロジェクトの準備」で作成済みの場合は、このステップをスキップしてください。
# game アプリを作成
uv run python manage.py startapp game
注釈
重複実行について
既に作成済みの場合は、このステップをスキップしてください。
誤って 2 回目を実行してエラーが出ても、gameアプリは既に作成済みなので問題ありません。
エラー例:
CommandError: 'game' conflicts with the name of an existing Python module
→ このエラーが出た場合は、既にgameアプリが存在するので次に進んでください。
作成されるディレクトリ構造:
adventure-game/
├── server/ # プロジェクト設定
├── game/ # 新しく作成されたアプリ(または既存)
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── models.py
│ ├── tests.py
│ ├── views.py
│ └── migrations/
└── manage.py
3.6.2. ステップ 2: アプリを登録
作成したアプリケーションを Django プロジェクトで使えるようにするには、settings.pyのINSTALLED_APPSに登録する必要があります。
既に「ゲーム用プロジェクトの準備」で登録済みの場合は、このステップをスキップしてください。
server/settings.pyを開いて、INSTALLED_APPSに'game'を追加します:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'game', # 追加(既に追加済みの場合は変更不要)
]
3.6.3. ステップ 3: テンプレートディレクトリの作成
Django でテンプレートを使うには、まずテンプレートファイルを置くディレクトリを作成する必要があります。
gameアプリ内にtemplatesディレクトリを作成します:
macOS/Linux の場合:
# game アプリ内に templates ディレクトリを作成
mkdir -p game/templates/game
Windows(PowerShell)の場合:
# game アプリ内に templates ディレクトリを作成
mkdir game\templates\game
ディレクトリ構造:
game/
├── templates/
│ └── game/ # アプリ名のディレクトリ(重要)
│ └── home.html # テンプレートファイル
├── views.py
└── ...
注釈
なぜgame/templates/game/とネストするのか?
templatesの下に、さらにgameというディレクトリを作る理由は、複数のアプリで同じファイル名(例: home.html)がある場合に、Django が混乱しないようにするためです。
テンプレートを読み込む際は、'game/home.html'のように、アプリ名から始まるパスを指定します。
3.6.4. ステップ 4: HTML テンプレートの作成
game/templates/game/home.htmlというファイルを新規作成し、以下の内容を書きます:
※ ファイルの作成には、cursor を使うと便利です。gameフォルダーを展開、templatesフォルダーを展開、gameフォルダーを展開して、そこに新規ファイルでhome.htmlを作り、以下の内容を入力します。以降は同様に幾つもファイルを作成しますので、覚えておいてください。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>冒険ゲーム</title>
<style>
body {
font-family: Arial, sans-serif;
max-width: 800px;
margin: 50px auto;
padding: 20px;
background-color: #f5f5f5;
}
.container {
background-color: white;
padding: 30px;
border-radius: 8px;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
h1 {
color: #333;
}
</style>
</head>
<body>
<div class="container">
<h1>廃墟研究所からの脱出</h1>
<p>Django + LLM で作るテキストアドベンチャー</p>
<p>現在の時刻: {{ current_time }}</p>
</div>
</body>
</html>
テンプレートのポイント:
{{ current_time }}: これはテンプレート変数です。二重波括弧
{{ }}は「ここに変数の値を表示してください」という Django 専用の記号Python 側から渡された
current_timeという変数の値が、ここに表示されますDjango が自動的に変数の値に置き換えます
HTML の他の部分(
<h1>タグや<p>タグなど)は、そのまま表示されます。
3.6.5. ステップ 5: ビューを作成
game/views.pyを開いて、以下のように編集します:
from django.shortcuts import render
from datetime import datetime
def home(request):
context = {
'current_time': datetime.now().strftime('%Y 年%m 月%d 日 %H:%M:%S')
}
return render(request, 'game/home.html', context)
コードの説明:
from django.shortcuts import renderテンプレートをレンダリング(HTML に変換)するための関数をインポートします。
from datetime import datetime現在の日時を取得するための機能をインポートします。
context = { 'current_time': ... }contextは、テンプレートに渡すデータを格納する辞書(キーと値のペア)です。'current_time'というキーで、現在の時刻を文字列として格納しています。datetime.now().strftime('%Y 年%m 月%d 日 %H:%M:%S')は、現在の日時を「2025 年 12 月 16 日 18:30:45」のような形式の文字列に変換します。
return render(request, 'game/home.html', context)render関数は、テンプレートファイルを読み込み、contextのデータを埋め込んで、HTML を生成した HttpResponse オブジェクトを返します。request: ユーザーからのリクエスト情報(この関数内ではrender関数に渡すために使用しています)'game/home.html': 使用するテンプレートファイルのパス(templatesディレクトリからの相対パス)context: テンプレートに渡すデータ※
renderは内部でHttpResponseを作成するので、私たちが明示的にHttpResponseを書く必要はありません。
3.6.6. ステップ 6: URL を設定
game/urls.py を作成 (新規ファイル)
gameディレクトリ内にurls.pyという新規ファイルを作成します。
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='home'),
]
プロジェクトの urls.py で読み込む
server/urls.pyを開いて、以下のように編集します:
from django.contrib import admin
from django.urls import path, include # include を追加
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('game.urls')), # game アプリの URL を読み込む
]
3.6.7. ステップ 7: 確認
ここまでの設定が完了したら、開発サーバーを起動して、ブラウザでアクセスして動作を確認しましょう。
uv run python manage.py runserver
注釈
マイグレーション警告について
サーバー起動時に「unapplied migration(s)」という警告が表示される場合がありますが、Hello World を表示するだけなら無視して問題ありません。マイグレーションは、データベースを使う機能(管理画面など)で必要になります。
ブラウザで http://localhost:8000/ にアクセスします。
表示されるページ:
図 3.1 ウエルカム画面
タイトル: 「廃墟研究所からの脱出」
サブタイトル: 「Django + LLM で作るテキストアドベンチャー」
現在の時刻: アクセスした時点の日時が表示されます(例: 2025 年 12 月 16 日 18:30:45)
ページをリロード(更新)すると、時刻が更新されることが確認できます。これが、テンプレートを使った動的なページの特徴です。
成功!テンプレートを使ったページが表示できました!
これで、HTML テンプレートを使って、見た目の整った Web ページを表示できるようになりました。
3.7. つまずきポイント
3.7.1. つまずきポイント 1: python vs python3
3.7.1.1. 症状
python manage.py runserver
エラー:
python: command not found
3.7.1.2. 原因
macOS/Linux では、pythonコマンドが存在しない場合がある。本書ではuvを使用しているため、uv run pythonを使う必要がある。
3.7.1.3. 解決方法
本書ではuvを使用しているため、uv run pythonコマンドを使います。
# uv run python を使う(推奨)
uv run python manage.py runserver
これにより、プロジェクトの仮想環境内の Python が自動的に使用されます。
3.7.1.4. LLM に質問する例
あなた: macOS で「python manage.py runserver」を実行すると
「command not found」と表示されます。
uv を使っているプロジェクトです。どうすればいいですか?
LLM: uv を使っているプロジェクトでは、`uv run python`コマンドを使います...
[解決策の提示]
3.7.2. つまずきポイント 2: django-adminが見つからない
3.7.2.1. 症状
django-admin startproject server .
エラー:
django-admin: command not found
3.7.2.2. 原因
本書ではuvを使用しているため、uv run django-adminを使う必要がある。または、Django がインストールされていない可能性がある。
3.7.2.3. 解決方法
本書ではuvを使用しているため、uv run django-adminコマンドを使います。
# uv run django-admin を使う(推奨)
uv run django-admin startproject server .
Django がインストールされていない場合:
# Django をインストール
uv add django
# その後、uv run django-admin が使えるようになる
uv run django-admin startproject server .
3.7.3. つまずきポイント 3: ポートが既に使用中
3.7.3.1. 症状
uv run python manage.py runserver
エラー:
Error: That port is already in use.
3.7.3.2. 解決方法
ポート番号とは?
ポート番号は、コンピュータ上のプログラム(アプリケーション)への通信の出入り口を表す番号です。例えるなら、マンションの部屋番号のようなものです。
マンションの住所 = コンピュータの IP アドレス(例:
localhost)部屋番号 = ポート番号(例:
8000)
ブラウザがhttp://localhost:8000/にアクセスするとき、localhostという住所(IP アドレス)の8000番という出入り口(ポート番号)を通って、そのポートで待機しているプログラム(この場合は Django の開発サーバー)に接続します。
Django の開発サーバーは、デフォルトでポート番号8000を使用します。http://localhost:8000/の:8000の部分がポート番号です。同じポート番号を 2 つのプログラムが同時に使うことはできません。そのため、既に別のプログラムがポート 8000 を使っていると、このエラーが発生します。
注釈
ポート番号について
開発環境: Django の開発サーバーはデフォルトでポート 8000 を使用
本番環境: 通常 80(HTTP)や 443(HTTPS)を使用
注釈
127.0.0.1 と localhost の違いは?
127.0.0.1: IP アドレス形式(数字で表現)
localhost: 名前形式(人間が読みやすい)
どちらも「自分の PC」を指します。:8000 はポート番号(部屋番号のようなもの)です。
もし「アクセスできない」場合:
ファイアウォールの設定を確認
サーバーが起動しているか確認(ターミナルを確認)
別のアプリが 8000 番ポートを使用していないか確認
プロセスとプロセス ID(PID)とは?
プロセスとは、コンピュータ上で実行されているプログラムのことです。例えば、Django の開発サーバーも 1 つのプロセスです。
プロセス ID(PID)は、各プロセスに割り当てられる一意の番号です。プロセスを終了する際に、この番号を使って特定のプロセスを指定します。
この問題の対処方法として 3 種類の方法を示します。
解決策(安全な順):
最推奨:別のポートを使う - 最も安全で簡単
推奨:PC を再起動 - 確実で安全
上級者向け:プロセス終了 - リスクがあるため注意が必要
方法 1: 別のポートを使う(最推奨)
uv run python manage.py runserver 8001
ブラウザで http://localhost:8001/ にアクセス。
重要: この方法を使った場合、これ以降の URL(管理画面アクセスなど)は 8000 ではなく 8001 に読み替えてください。
方法 2: PC を再起動する(推奨・確実)
PC を再起動すると、すべてのプロセスが終了し、ポート 8000 が確実に解放されます。最も安全で確実な方法です。
方法 3: 使用中のプロセスを終了(上級者向け・注意が必要)
警告
重要な注意
この方法は、誤って重要なプロセスを終了してしまうリスクがあります。必ず、終了するプロセスが Django の開発サーバーであることを確認してから実行してください。
少し難しい方法ですが、ポート 8000 を使用しているプロセス(プログラム)を終了する方法もあります。これにより、ポート 8000 が空き、再度使用できるようになります。macOS/Linux と Windows で手順が異なります。
macOS/Linux の場合:
ポート 8000 を使用しているプロセスを確認:
lsof -i :8000
または
netstat -anv | grep 8000
プロセス ID(PID)を確認し、プロセスを終了:
出力例:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
python 12345 user 3u IPv4 ... 0t0 TCP *:8000 (LISTEN)
この例では、PID が12345です。この番号を使ってプロセスを終了します:
# PID が 12345 の場合の例
kill 12345
# 強制終了する場合
kill -9 12345
Windows の場合:
ポート 8000 を使用しているプロセスを確認:
netstat -ano | findstr :8000
プロセス ID(PID)を確認し、タスクマネージャーで終了するか、コマンドで終了:
出力例:
TCP 0.0.0.0:8000 0.0.0.0:0 LISTENING 12345
この例では、PID が12345です。この番号を使ってプロセスを終了します:
REM PID が 12345 の場合の例
taskkill /PID 12345 /F
または、タスクマネージャーを開き(Ctrl + Shift + Esc)、「詳細」タブで PID 列を表示し、該当するプロセスを右クリックして「タスクの終了」を選択します。
注意: 他の Django 開発サーバーが動いている可能性があります。終了する前に、他のターミナルウィンドウでサーバーが動いていないか確認してください。
3.7.4. つまずきポイント 4: ModuleNotFoundError
3.7.4.1. 症状
ModuleNotFoundError: No module named 'game'
3.7.4.2. 原因
INSTALLED_APPSに追加していないタイポ(スペルミス)
タイポ(typo)とは?
タイポ(typo)とは、文字の入力ミス(スペルミス)のことです。
typographical error(タイポグラフィカルエラー)の略で、プログラミングでは非常によく遭遇するミスです。例えば、
'game'と書くべきところを'gam'や'Game'(大文字小文字の違い)と書いてしまうと、Django はアプリを見つけられません。Python は大文字と小文字を区別するため、'game'と'Game'は別物として扱われることに注意してください。
3.7.4.3. 解決方法
settings.pyのINSTALLED_APPSを確認:
INSTALLED_APPS = [
...
'game', # これが追加されているか確認
]
3.7.5. つまずきポイント 5: ImproperlyConfigured
3.7.5.1. 症状
django.core.exceptions.ImproperlyConfigured:
The SECRET_KEY setting must not be empty.
3.7.5.2. 原因
settings.pyのSECRET_KEYが空、または削除されている。
3.7.5.3. 解決方法
settings.pyを開いて、SECRET_KEYを確認:
SECRET_KEY = 'django-insecure-...' # 何か文字列が入っているはず
もし削除してしまった場合:
# 新しい SECRET_KEY を生成(LLM に頼む)
あなた: Django の SECRET_KEY を誤って削除してしまいました。
新しい SECRET_KEY を生成する方法を教えてください。
LLM: Python で以下のコードを実行すると、
ランダムな SECRET_KEY が生成されます:
from django.core.management.utils import get_random_secret_key
print(get_random_secret_key())
3.7.6. つまずきポイント 6: ページが表示されない(404 エラー)
3.7.6.1. 症状
ブラウザで http://localhost:8000/game/ にアクセスすると:
Page not found (404)
3.7.6.2. 原因
URL パターンが一致していない。
3.7.6.3. 解決方法
デバッグページを確認
DEBUG=Trueの場合、Django は詳細なエラーページを表示します。
Using the URLconf defined in server.urls,
Django tried these URL patterns, in this order:
1. admin/
2. [name='home']
The current path, game/, didn't match any of these.
このメッセージから、/game/という URL パターンが定義されていないことが分かります。
修正:
game/urls.py:
urlpatterns = [
path('', views.home, name='home'), # /
path('game/', views.home, name='game'), # /game/ でも同じビューを使う例
]
注意: 「ゲーム用プロジェクトの整理」を行い、トップページ(http://localhost:8000/)にアクセスすると 404 エラー(ページが見つかりません)が表示されますが、これは正常です。 以降の章でゲーム用の URL とビューを実装すると、再びページが表示されるようになります。
3.8. 管理画面を見てみる
Django の強力な機能の一つが、自動生成される管理画面(Admin Panel)です。
管理画面とは?
管理画面は、データベースの内容を視覚的に確認・編集できる Web インターフェースです。通常、データベースの内容を確認・編集するには、SQL というデータベース専用の言語を書く必要がありますが、管理画面を使えば、ブラウザ上でマウス操作だけでデータを管理できます。
管理画面でできること:
データの追加・編集・削除(CRUD 操作)
データの検索・フィルタリング
ユーザー管理
データの一覧表示
注釈
CRUD 操作とは?
CRUD 操作とは、Create(作成)、Read(取得)、Update(更新)、Delete(削除)の 4 つの基本的なデータベース操作のことです。管理画面では、これらの操作をマウス操作だけで行えます。
例えば、ブログサイトなら「記事を追加する」「記事を編集する」「記事を削除する」といった操作を、コードを書かずに管理画面から行えます。開発中にデータを確認したり、テストデータを追加したりする際に非常に便利です。
3.8.1. ゲーム用プロジェクトの管理画面設定
前のセクション「Hello World 表示」で作成したadventure-gameプロジェクトの管理画面を設定しましょう。
作業ディレクトリの確認:
# ゲーム用プロジェクトのディレクトリに移動
cd ~/projects/adventure-game
# 現在位置を確認
pwd
3.8.2. スーパーユーザーの作成
管理画面にアクセスするには、まず管理者アカウント(スーパーユーザー)を作成する必要があります。スーパーユーザーは、管理画面にログインして、すべてのデータを管理できる権限を持ったユーザーです。
通常のユーザーアカウントとは異なり、スーパーユーザーは特別な権限を持ち、システム全体を管理できます。開発中は、自分がスーパーユーザーとしてログインして、データを管理します。
以下のコマンドでスーパーユーザーを作成します:
# スーパーユーザー(管理者)を作成
uv run python manage.py createsuperuser
対話形式で入力:
Username (leave blank to use 'yourname'): admin
Email address: admin@example.com
Password: ********
Password (again): ********
Superuser created successfully.
重要
パスワード入力時の注意
パスワードを入力する際、セキュリティのため画面には何も表示されませんが、入力は正常に受け付けられています。入力後に Enter キーを押してください。
注釈
パスワードの要件
最低 8 文字
一般的すぎるパスワード(
password123など)は警告が出る開発環境では簡単なパスワードでも OK
3.8.3. 管理画面にアクセス
スーパーユーザーを作成したら、管理画面にアクセスしてみましょう。
uv run python manage.py runserver
ブラウザで http://localhost:8000/admin/ にアクセスします。
ログイン画面が表示される:
管理画面のログイン画面が表示されます。ここで、先ほど作成したスーパーユーザーのユーザー名とパスワードを入力してログインします。
図 3.2 ログイン画面
先ほど作成したadminユーザーでログインします。
管理画面のダッシュボードが表示される!
ログインに成功すると、管理画面のダッシュボード(ホーム画面)が表示されます。ダッシュボードには、管理できる項目の一覧が表示されます。
図 3.3 管理画面(一覧)
デフォルトで管理できる項目:
Users(ユーザー): サイトに登録されているユーザーアカウントを管理できます。ユーザーの追加・編集・削除、権限の設定などができます。
Groups(グループ): ユーザーをグループに分類して、グループ単位で権限を設定できます。例えば、「編集者グループ」「閲覧者グループ」などを作成できます。
管理画面の使い方:
各項目をクリックすると、そのデータの一覧が表示されます。例えば、「Users」をクリックすると、登録されているユーザーの一覧が表示され、各ユーザーをクリックして編集したり、新しいユーザーを追加したりできます。
また、検索ボックスやフィルター機能を使って、特定のデータを素早く見つけることもできます。
図 3.4 管理画面(ユーザー)
開発中の実用例:
管理画面は、次章以降で以下のような場面で活躍します:
ゲームのテストデータ(部屋、アイテムなど)を手動で追加
プレイヤーの進行状況を確認・修正
デバッグ時にデータベースの内容を確認
ゲーム用プロジェクトの管理画面が正しく動作することを確認:
現在、adventure-gameプロジェクトの管理画面にアクセスできることを確認しました。次の章では、このプロジェクトにゲーム用のモデルを追加し、管理画面でそれらのデータを管理できるようにします。
Tip
管理画面の言語を日本語に
server/settings.pyでLANGUAGE_CODE = 'ja'に設定していれば、
管理画面も日本語で表示されます。
3.9. ゲーム用プロジェクトの整理
前の節で Django の基本を学ぶために作成したプロジェクトを、 本格的なゲーム開発用に整理しましょう。
3.9.1. 現在の状況確認
まず、現在のディレクトリ構造を確認します。
# 現在のディレクトリ構造を確認
ls -la
# Windows の場合は: dir
現在のディレクトリ構造:
adventure-game/
├── .venv/ # 仮想環境
├── server/ # プロジェクト設定ディレクトリ
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ ├── asgi.py
│ └── wsgi.py
├── manage.py
├── pyproject.toml
└── uv.lock
この構造を表示する方法:
ls -laはファイルの詳細情報を表示しますが、ツリー構造のような見やすい形式ではありません。以下の方法で、上記のようなツリー構造を表示できます:
treeコマンドを使う(推奨)# tree コマンドをインストール(macOS) brew install tree # tree コマンドをインストール(Windows) # Chocolatey を使う場合: choco install tree # または、公式サイトからダウンロード: https://gnuwin32.sourceforge.net/packages/tree.htm # ディレクトリ構造を表示 tree
出力例:
. ├── server │ ├── __init__.py │ ├── __pycache__ │ │ ├── __init__.cpython-311.pyc │ │ ├── settings.cpython-311.pyc │ │ ├── urls.cpython-311.pyc │ │ └── wsgi.cpython-311.pyc │ ├── asgi.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py ├── db.sqlite3 ├── game │ ├── __init__.py │ ├── __pycache__ │ │ ├── __init__.cpython-311.pyc │ │ ├── admin.cpython-311.pyc │ │ ├── apps.cpython-311.pyc │ │ ├── models.cpython-311.pyc │ │ ├── urls.cpython-311.pyc │ │ └── views.cpython-311.pyc │ ├── admin.py │ ├── apps.py │ ├── migrations │ │ ├── __init__.py │ │ └── __pycache__ │ │ └── __init__.cpython-311.pyc │ ├── models.py │ ├── templates │ │ └── game │ │ └── home.html │ ├── tests.py │ ├── urls.py │ └── views.py ├── manage.py ├── pyproject.toml ├── README.md └── uv.lock 8 directories, 30 files
findコマンドを使う(macOS/Linux)find . -not -path '*/\.*' | sed 's|[^/]*/| |g'
ls -laで確認する場合ls -laでは、現在のディレクトリのファイルとディレクトリの一覧が表示されます。サブディレクトリの中身を確認するには、cdコマンドで移動してからls -laを実行します。# 現在のディレクトリの内容を確認 ls -la # server ディレクトリの中身を確認 cd server ls -la
注釈
treeコマンドが使えない場合
treeコマンドがインストールされていない場合は、ls -laで確認するか、LLM に「ディレクトリ構造を表示する方法を教えてください」と質問してみてください。
Cursor を使っている場合は、Cursor のサイドバー(エクスプローラー)でディレクトリ構造を視覚的に確認することもできます。
3.9.2. Hello World コードのリセット
前の節で作成した Hello World のコードを、ゲーム開発用に整理します。
3.9.2.1. game/views.py を初期状態に戻す
game/views.pyを開いて、Hello World のコードを削除し、初期状態に戻します。
現在の内容(Hello World のコード):
from django.shortcuts import render
from datetime import datetime
def home(request):
context = {
'current_time': datetime.now().strftime('%Y 年%m 月%d 日 %H:%M:%S')
}
return render(request, 'game/home.html', context)
以下のように変更(初期状態に戻す):
from django.shortcuts import render
# Create your views here.
3.9.2.2. game/urls.py をゲーム用に変更
game/urls.pyを開いて、ゲーム開発用に整理します。
現在の内容(Hello World のコード):
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='home'),
]
以下のように変更(ゲーム用に整理):
from django.urls import path
from . import views
urlpatterns = [
# ゲームの URL パターンをここに追加していきます
]
または、Hello World のビューを削除したので、game/urls.pyファイル自体を削除することもできます。
ただし、後でゲームの URL を追加する際に必要になるので、空のurlpatternsを残しておくことをおすすめします。
3.9.2.3. server/urls.py の確認
server/urls.pyを確認して、game.urlsへの参照がある場合は、一時的にコメントアウトするか、削除します。
現在の内容(Hello World のコード):
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('game.urls')), # Hello World 用
]
以下のように変更(ゲーム用に整理):
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
# ゲームの URL は後で追加します
# path('', include('game.urls')),
]
注釈
テンプレートファイルについて
game/templates/game/home.htmlは、後でゲームのテンプレートとして再利用できるので、そのまま残しておいても問題ありません。必要に応じて削除することもできます。
3.10. Git へのコミット
ここまでの作業が完了したら、変更を Git にコミットしておきましょう。
重要
コミットのタイミング
一連の修正が終わって区切りが付いたら、必ずコミットを行うことを習慣にしましょう。
コミットすべきタイミング:
プロジェクトの初期設定が完了した時
新しい機能を追加した時
バグを修正した時
一連の作業が完了した時
コミットのメリット:
作業の履歴を残せる
問題が起きた時に以前の状態に戻せる
何を変更したかが明確になる
小さな変更でも、区切りが付いたらコミットする習慣をつけることが大切です。
3.10.1. .gitignore の設定
.gitignoreとは?
.gitignoreは、Git にコミットしたくないファイルやディレクトリを指定するファイルです。このファイルに記述されたパターンに一致するファイルは、git addしても無視されます。
警告
すべてのファイルをコミットするのは危険です
git add .で全てのファイルをステージングすると、以下のような不要なファイルもコミットされてしまいます:
*.pyc: Python のコンパイル済みファイル(自動生成される).venv/: 仮想環境(環境によって異なる)db.sqlite3: データベースファイル(個人のデータが含まれる)__pycache__/: Python のキャッシュディレクトリ(自動生成される)
これらのファイルをコミットすると、リポジトリが肥大化したり、個人情報が漏洩したりする危険があります。
.gitignoreの内容:
.gitignoreファイルに以下の内容と入替ます:
# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
# 仮想環境
.venv/
venv/
env/
ENV/
# Django
*.log
db.sqlite3
db.sqlite3-journal
media/
staticfiles/
# 環境変数
.env
.env.local
# IDE
.vscode/
.idea/
*.swp
*.swo
# OS
.DS_Store
Thumbs.db
主な除外項目の説明:
パターン |
説明 |
なぜ除外するか |
|---|---|---|
|
Python のキャッシュディレクトリ |
自動生成されるため |
|
Python のコンパイル済みファイル |
自動生成されるため |
|
仮想環境 |
環境によって異なり、再作成可能 |
|
SQLite データベースファイル |
個人のデータが含まれる可能性 |
|
環境変数ファイル |
機密情報(API キーなど)が含まれる |
Tip
.gitignoreの確認方法
.gitignoreを設定した後、以下のコマンドで無視されるファイルを確認できます:
# 無視されるファイルを確認
git status --ignored
または、git addを実行する前に、git statusでコミット対象のファイルを確認しましょう。
変更をステージング:
.gitignoreを設定した後、変更をステージング(コミットの対象)します:
# 変更をステージング(.gitignore で除外されたファイルは自動的に無視される)
git add .
ステージング前の確認:
git add .を実行する前に、git statusでコミット対象のファイルを確認することをおすすめします:
# コミット対象のファイルを確認
git status
期待される出力:
On branch main
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: .gitignore
new file: manage.py
new file: server/settings.py
new file: server/urls.py
new file: game/models.py
...
db.sqlite3や.venv/などのファイルが表示されていなければ、.gitignoreが正しく機能しています。
コミット:
# コミットメッセージを付けてコミット
git commit -m "feat: ゲーム用プロジェクトとアプリケーションの作成
- Django プロジェクト(server)を作成
- game アプリケーションを作成
- INSTALLED_APPS に game を追加
- マイグレーションを実行"
期待される出力:
[main (root-commit) abc1234] feat: ゲーム用プロジェクトとアプリケーションの作成
10 files changed, 200 insertions(+)
create mode 100644 manage.py
create mode 100644 server/settings.py
...
Tip
コミットメッセージの書き方
本書では、Conventional Commits 形式のコミットメッセージを使用します:
<type>(<scope>): <subject>
<body>
例:
feat: 新機能を追加fix: バグを修正docs: ドキュメントを更新
参考:
Conventional Commits 公式サイト: https://www.conventionalcommits.org/
これで、プロジェクトがゲーム開発用に整理されました。次の章から、本格的なゲーム開発を始めましょう。
3.11. 次のステップ
お疲れさまでした!第3章を完了しました。
この章で学んだこと:
[✓] Djangoの基本概念(MTV)
[✓] プロジェクトとアプリケーションの作成
[✓] 仮想環境の使い方
[✓] Hello Worldの表示
[✓] テンプレートの使い方
[✓] 管理画面の確認
[✓] よくあるエラーの対処法
[✓] ゲーム用プロジェクトの準備
次の章では:
ゲームの企画をLLMと一緒に考える
データモデルの設計
データベースの基本
いよいよ、本格的なアプリ開発に入ります。
チェックリスト
Djangoプロジェクトを作成できた
開発サーバーが起動できた
"Hello, World!"が表示できた
テンプレートを使ってHTMLを表示できた
管理画面にログインできた
エラーが出ても対処できる自信がついた
ゲーム用プロジェクト(adventure-game)を作成できた
gameアプリケーションを作成できた
スーパーユーザーを作成できた
次章: ゲームの企画とデータ設計