1.

Django 環境構築・プロジェクト作成(startproject / startapp / migrate / superuser)

編集
この記事の要点
  • Django 環境は python -m venv .venv + pip install django で構築
  • プロジェクト作成: django-admin startproject myproject、アプリ作成: python manage.py startapp myapp
  • settings.py の INSTALLED_APPS に作成した myapp を追加、urls.py にルーティング登録
  • 初期化: python manage.py migrate(標準テーブル作成)→ python manage.py createsuperuser
  • 開発サーバ起動: python manage.py runserverhttp://127.0.0.1:8000/

Django とは

Django は Python 製のフルスタック Web フレームワーク。「Don't Repeat Yourself」と「Batteries Included」が標語で、ORM・管理画面・認証・テンプレートエンジン・国際化など、Web アプリに必要な機能が標準で揃っています。Instagram / Pinterest / Mozilla 等の大規模サービスでも採用実績豊富。本記事では環境構築から最初のアプリ作成までを一通り解説します。

事前準備

項目推奨
Python3.10+ (Django 5.x は 3.10 以上必須)
OSWindows / macOS / Linux 全て可
DB開発は SQLite(標準)、本番は PostgreSQL 推奨
仮想環境venv(標準)/ Poetry / pipenv / conda
エディタVS Code / PyCharm

仮想環境の作成

システム Python を汚さないため、必ず仮想環境を使います:

# プロジェクトディレクトリ
mkdir mysite && cd mysite

# 仮想環境作成
python -m venv .venv

# 有効化
source .venv/bin/activate          # macOS / Linux
.\.venv\Scripts\activate           # Windows PowerShell
.venv\Scripts\activate.bat         # Windows cmd

# プロンプトが (.venv) に変わる
# 無効化(後で)
deactivate

Django インストール

# pip 更新
python -m pip install --upgrade pip

# 最新の Django
pip install django

# バージョン指定(LTS など)
pip install "django>=5.0,<6.0"

# 確認
python -m django --version
django-admin --version

# 開発用依存パッケージもまとめて
pip install django django-debug-toolbar djangorestframework python-dotenv

# requirements.txt に固定
pip freeze > requirements.txt

プロジェクト作成

# 「config」という名前のプロジェクトをカレントに作成(推奨)
django-admin startproject config .

# 末尾のドット忘れずに(しないと config/config/ という二重構造になる)

# 結果のディレクトリ構造
.
├── manage.py
└── config/
    ├── __init__.py
    ├── settings.py        ← 設定ファイル
    ├── urls.py            ← URL ルーティング
    ├── asgi.py
    └── wsgi.py

プロジェクト名は「config」や「server」のような汎用名にすると、後でリネームせずに済むためおすすめ。ドキュメントでよく見る mysite でも構いません。

アプリ作成

Django ではプロジェクト = サイト全体、アプリ = 機能単位。例えば「ブログサイト」プロジェクト内に「記事アプリ」「コメントアプリ」「ユーザアプリ」がある形:

# 初期 DB 構築(標準アプリのテーブル作成)
python manage.py migrate

# アプリ作成
python manage.py startapp blog

# 結果
.
├── manage.py
├── config/
└── blog/
    ├── __init__.py
    ├── admin.py          ← 管理画面登録
    ├── apps.py           ← アプリ設定
    ├── models.py         ← データモデル
    ├── tests.py          ← テスト
    ├── views.py          ← ビュー(リクエストハンドラ)
    ├── migrations/       ← マイグレーション
    └── (urls.py)         ← 自分で作成

settings.py の INSTALLED_APPS 追加

# config/settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # 自作アプリ
    'blog.apps.BlogConfig',     # または 'blog' でも可
]

# 言語・タイムゾーン(日本向け)
LANGUAGE_CODE = 'ja'
TIME_ZONE = 'Asia/Tokyo'
USE_I18N = True
USE_TZ = True

# DB(デフォルトは SQLite)
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

# 静的ファイル
STATIC_URL = 'static/'
STATIC_ROOT = BASE_DIR / 'staticfiles'

urls.py のルーティング

# blog/urls.py(自分で作成)
from django.urls import path
from . import views

app_name = 'blog'
urlpatterns = [
    path('', views.index, name='index'),
    path('/', views.detail, name='detail'),
]

# blog/views.py
from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello, Django!")

def detail(request, article_id):
    return HttpResponse(f"Article {article_id}")

# config/urls.py(プロジェクト側)
from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('admin/', admin.site.urls),
    path('blog/', include('blog.urls')),
]

初期化と管理ユーザ作成

# モデルからマイグレーションファイルを作成
python manage.py makemigrations

# DB に適用
python manage.py migrate

# 管理画面用スーパーユーザ作成
python manage.py createsuperuser
# Username: admin
# Email: admin@example.com
# Password: ****
# Password (again): ****

# 開発サーバ起動
python manage.py runserver
# Starting development server at http://127.0.0.1:8000/

# ポート変更
python manage.py runserver 0.0.0.0:8080

ブラウザで:

  • http://127.0.0.1:8000/ → Django Welcome ページ
  • http://127.0.0.1:8000/blog/ → "Hello, Django!"
  • http://127.0.0.1:8000/admin/ → 管理画面(superuser でログイン)

モデルを作って管理画面に出す

# blog/models.py
from django.db import models

class Article(models.Model):
    title = models.CharField(max_length=200)
    body = models.TextField()
    published_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.title

# blog/admin.py
from django.contrib import admin
from .models import Article

@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
    list_display = ('id', 'title', 'published_at')
    search_fields = ('title', 'body')
python manage.py makemigrations blog
python manage.py migrate
python manage.py runserver
# /admin/ から Article を CRUD 可能

推奨ディレクトリ構造

mysite/
├── .venv/                    ← 仮想環境(git 除外)
├── .env                      ← 環境変数(git 除外)
├── .gitignore
├── manage.py
├── requirements.txt
├── README.md
├── config/                   ← プロジェクト設定
│   ├── settings/
│   │   ├── base.py
│   │   ├── dev.py
│   │   └── prod.py
│   ├── urls.py
│   └── wsgi.py
├── apps/                     ← アプリをまとめる
│   ├── blog/
│   ├── users/
│   └── api/
├── static/                   ← 静的ファイル
├── templates/                ← 共通テンプレート
└── media/                    ← アップロードファイル(git 除外)

.gitignore の例

# Python
__pycache__/
*.py[cod]
*.egg-info/

# Django
*.log
db.sqlite3
db.sqlite3-journal
media/

# 環境
.venv/
.env

# IDE
.vscode/
.idea/

# OS
.DS_Store
Thumbs.db

よくあるトラブル

症状原因と対処
ModuleNotFoundError: No module named 'django'仮想環境が無効化されている → source .venv/bin/activate
You have unapplied migrationspython manage.py migrate 実行
Port 8000 is already in use別ポート: runserver 8001、または lsof -i:8000 で停止
管理画面に自作モデルが出ないadmin.py に register 忘れ
マイグレーション衝突python manage.py makemigrations --merge、または migrations を整理

FAQ

Q: startproject mysitestartproject mysite . の違い
A: 末尾のドット有無でディレクトリ階層が変わる。ドット付きはカレントに展開、無しは mysite/mysite/ という二重構造。可読性のためドット推奨。

Q: SQLite から PostgreSQL へ切替
A: pip install psycopg[binary] → settings.py の DATABASES を変更 → migrate。データは dumpdata/loaddata で移行。

Q: Django REST Framework と素の Django、どちらから始める?
A: 学習なら素の Djangoでビュー/テンプレート/モデルを理解 → API 化のニーズが出たら DRF 追加。最初から API オンリーなら直接 DRF でも OK。

編集
Post Share
子ページ
  1. インストール方法(Windows)
  2. インストール方法(Linux/Mac)
  3. プロジェクトの作成方法(Windows)
  4. プロジェクトの作成方法(Mac)
  5. アプリケーションの作成方法
  6. 開発用サーバー(Windows)
  7. 開発用サーバー(Mac)
同階層のページ
  1. 環境構築とプロジェクト/アプリの作成
  2. MVC(MVT)のそれぞれの使い方と説明
  3. データベースへの接続と操作
  4. Django Administration
  5. git管理
  6. エラー一覧
  7. バージョンの確認方法
  8. ログ出力方法
  9. SQLのログ出力方法
  10. ログのローテート設定
  11. settings.pyの定数にアクセスする方法
  12. 本番環境へのインストールとアプリのデプロイ(apache編)
  13. 本番環境へのインストールとアプリのデプロイ(nginx編)
  14. djangoアプリの本番の開始URLを変更する
  15. 静的(static)ファイルの置き場所と読み込み(画像、css、js )
  16. CSRFトークンをAjaxで使用する方法
  17. ajaxの使用例(POST編)
  18. ファイルのアップロードとファイルの名前
  19. クイックスタート/チュートリアル
  20. ログイン機能
  21. テンプレート側のログイン判定
  22. ビュー側のログイン判定
  23. 管理者ユーザーの作成/判定と管理画面
  24. モデルのjson化とレスポンス
  25. runserverでポートを指定する方法
  26. cronによるバッチ実行
  27. テンプレートで利用する共通のcontextを定義する方法
  28. プログラムが本番サーバーで反映されない場合の対処法
  29. APIの作成
  30. cron用コマンド・ファイルの作成