7.

Django Mac 開発用サーバー (runserver) 完全ガイド

編集
この記事の要点
  • 基本: python manage.py runserver127.0.0.1:8000 起動
  • 外部接続: python manage.py runserver 0.0.0.0:8080 + ALLOWED_HOSTS に IP / ホスト名追加
  • 自動リロード: ファイル変更で再起動。停止したい時は --noreload
  • 静的ファイル: DEBUG=True なら自動配信、本番は collectstatic + Nginx
  • 本番では runserver 禁止gunicorn / uvicorn + Nginx を使う

Django runserver とは

Django に標準同梱されている開発用 Web サーバpython manage.py runserver 1 行で立ち上がり、ファイル変更を検知して自動再起動するため、開発体験が良いのが特徴です。

注意: あくまで開発用。性能・安全面の理由から本番では絶対に使わず、gunicorn / uvicorn + Nginx 等に置き換えます。

基本的な起動

# venv をアクティブにしてから
source venv/bin/activate

# 起動 (デフォルト: 127.0.0.1:8000)
python manage.py runserver

# 出力例:
# Watching for file changes with StatReloader
# Performing system checks...
# System check identified no issues (0 silenced).
# December 11, 2026 - 09:00:00
# Django version 5.0, using settings 'myproject.settings'
# Starting development server at http://127.0.0.1:8000/
# Quit the server with CONTROL-C.

# ブラウザで http://127.0.0.1:8000/ にアクセス

ポート・IP の変更

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

# IP + ポート
python manage.py runserver 0.0.0.0:8000

# IPv6
python manage.py runserver [::]:8000

# 0.0.0.0 にすると同一 LAN の別端末からアクセス可能
# Mac の IP 確認:
ifconfig | grep "inet "
# または
ipconfig getifaddr en0
# → 192.168.1.42 等

# 他端末から
# http://192.168.1.42:8000/

ALLOWED_HOSTS の設定 (重要)

外部 IP で起動すると、デフォルトでは Django が拒否します。settings.py に追加が必要:

# settings.py
DEBUG = True

ALLOWED_HOSTS = [
    'localhost',
    '127.0.0.1',
    '192.168.1.42',
    '*.local',           # Mac の Bonjour 名
    'my-mac.local',
]

# DEBUG=True かつ ALLOWED_HOSTS が空の場合は
# localhost / 127.0.0.1 のみ自動許可

主な起動オプション

オプション動作
--noreloadファイル変更検知 / 自動再起動を無効化
--nothreadingシングルスレッドで実行 (デバッグ用)
--insecureDEBUG=False でも静的ファイルを配信
--ipv6 / -6IPv6 で待機
--verbosity 2詳細ログ
--settings=myproject.settings.dev使う設定モジュール指定
--pythonpath /path/to/projPython パス追加

自動リロードの仕組み

Django 2.2+ では StatReloader がデフォルト。.py ファイルのタイムスタンプを定期的に確認し、変更があれば再起動します。watchdog をインストールすると WatchmanReloader になり高速:

pip install watchdog
# 以降は WatchmanReloader が使われる (高速 + イベント駆動)

# 自動リロードを止めたい (デバッガ接続中など)
python manage.py runserver --noreload

# 監視対象を増やす場合は settings.py で BASE_DIR を確認
# テンプレートは .py じゃないので変更時はブラウザ F5 のみで OK

Mac 特有のトラブル

症状原因対処
port 5000 が使えないmacOS AirPlay Receiver が占有システム設定 → 一般 → AirDrop と Handoff → AirPlay レシーバー OFF、または別ポート
「ファイアウォール」確認ダイアログが出るマシン外からのアクセス時「許可」で OK
port already in use前回の runserver が残っているlsof -i :8000kill
python ではなく python3macOS 標準 Python が古いHomebrew で brew install python@3.12
pip install で SSL errorシステム Python の OpenSSL が古いpyenv / brew の Python を使う
# ポート占有チェック
lsof -i :8000
# COMMAND   PID  USER ... NAME
# Python   1234  taro ... TCP localhost:irdmi (LISTEN)

# プロセス停止
kill 1234
# もしくは
kill -9 1234

# Python 3 を Homebrew で
brew install python@3.12
brew link python@3.12

python3 --version
pip3 --version

# venv を作る
python3 -m venv venv
source venv/bin/activate
pip install django
django-admin startproject myproject
cd myproject
python manage.py migrate
python manage.py runserver

HTTPS 開発 (mkcert)

本番が HTTPS の場合、開発でも証明書を使えると Cookie の Secure 属性 や Service Worker のテストができます:

# mkcert で自己署名 CA を OS にインストール
brew install mkcert
mkcert -install
mkcert localhost 127.0.0.1 192.168.1.42

# runserver は HTTPS 非対応 → django-extensions の runserver_plus を使う
pip install django-extensions Werkzeug pyOpenSSL

# settings.py
INSTALLED_APPS += ['django_extensions']

# 起動
python manage.py runserver_plus --cert-file localhost+2.pem --key-file localhost+2-key.pem
# https://localhost:8000/

Django Channels (ASGI) のローカル起動

WebSocket / 非同期ビューを使うなら ASGI サーバが必要:

pip install channels daphne uvicorn

# settings.py
ASGI_APPLICATION = 'myproject.asgi.application'

# asgi.py を作成 (channels テンプレート参照)

# daphne で起動
daphne -p 8000 myproject.asgi:application

# uvicorn で起動 (HTTP のみで OK な場合)
uvicorn myproject.asgi:application --reload --host 0.0.0.0 --port 8000

本番への置き換え

runserver の代わりに使う本番構成の例:

[ブラウザ] ──HTTPS──> [Nginx] ──HTTP/proxy_pass──> [gunicorn] ──> [Django]
                                                       │
                                                       ├─ /static/ → Nginx が直接配信
                                                       └─ /media/  → Nginx が直接配信
# gunicorn 起動 (本番)
gunicorn myproject.wsgi:application \
  --bind 127.0.0.1:8001 \
  --workers 4 \
  --timeout 60 \
  --access-logfile - \
  --error-logfile -

# 静的ファイル収集
python manage.py collectstatic --noinput

# ASGI (WebSocket 含む) なら uvicorn / daphne
uvicorn myproject.asgi:application \
  --host 127.0.0.1 --port 8001 --workers 4

VS Code / PyCharm からの起動

// .vscode/launch.json
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Django runserver",
      "type": "python",
      "request": "launch",
      "program": "${workspaceFolder}/manage.py",
      "args": ["runserver", "0.0.0.0:8000", "--noreload"],
      "django": true,
      "justMyCode": false
    }
  ]
}

FAQ

Q: runserver が静的ファイルを返さない
A: DEBUG=False にすると停止します。開発中は DEBUG=True、または --insecure で強制配信。本番では Nginx が配信すべき。

Q: 同一 LAN の iPhone から見たい
A: runserver 0.0.0.0:8000 + ALLOWED_HOSTS に Mac の IP 追加 + ファイアウォール許可。iPhone で http://192.168.x.x:8000/

Q: ホットリロードが効かない
A: ファイル監視数の上限に達している可能性。watchdog を入れる、もしくは node_modules 等の巨大ディレクトリを .gitignore に。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. インストール方法(Windows)
  2. インストール方法(Linux/Mac)
  3. プロジェクトの作成方法(Windows)
  4. プロジェクトの作成方法(Mac)
  5. アプリケーションの作成方法
  6. 開発用サーバー(Windows)
  7. 開発用サーバー(Mac)