django-adminコマンド チートシート

cheatsheet

プロジェクト管理 ⚙️

Djangoプロジェクトの作成と基本的な管理を行います。

💡 ヒント

プロジェクトルートにある manage.pydjango-admin のラッパーです。通常、プロジェクト内では python manage.py <command> を使用します。django-admin は主にプロジェクト作成時に使用されますが、DJANGO_SETTINGS_MODULE 環境変数を設定すればプロジェクト外からも利用可能です。
コマンド 説明 オプション例 注意点/補足
startproject <project_name> [directory] 新しいDjangoプロジェクトを作成します。指定した名前でプロジェクトディレクトリと基本的な設定ファイル群が生成されます。
# カレントディレクトリに myproject を作成
django-admin startproject myproject .

# テンプレートからプロジェクトを作成
django-admin startproject --template=/path/to/my_template myproject

# 特定の拡張子を除外して作成
django-admin startproject --extension py,rst myproject
[directory] を省略すると、<project_name> という名前のディレクトリが作成され、その中にプロジェクトが配置されます。. を指定するとカレントディレクトリ直下にプロジェクトファイルが展開されます。既存のディレクトリ名は指定できません。
check プロジェクト全体の設定やモデル定義などに問題がないか静的にチェックします。デプロイ前の確認に役立ちます。
# システム全体をチェック (manage.py経由)
python manage.py check

# デプロイ設定でチェック
python manage.py check --deploy

# 特定のアプリケーションをチェック
python manage.py check polls auth

# 特定のタグが付いたチェックを実行
python manage.py check --tag models
重大な問題が見つかるとエラーを、軽微な問題や推奨事項は警告を出力します。--deploy オプションは、本番環境向けの設定(DEBUG=False など)に関する追加チェックを行います。

アプリケーション管理 🧩

Djangoプロジェクト内のアプリケーション(機能単位のモジュール)を作成・管理します。

コマンド 説明 オプション例 注意点/補足
startapp <app_name> [directory] 新しいDjangoアプリケーションを作成します。指定した名前でアプリケーションディレクトリと基本的なファイル(models.py, views.py など)が生成されます。
# カレントディレクトリに polls アプリを作成 (manage.py経由)
python manage.py startapp polls

# 特定のディレクトリ内にアプリを作成
python manage.py startapp products ./apps/products
作成されたアプリケーションは、プロジェクトの settings.pyINSTALLED_APPS に手動で追加する必要があります。Pythonのモジュール名として有効な名前(ハイフン不可など)を使用してください。

データベース操作 💾

データベーススキーマのマイグレーション、対話シェル、データ管理などを行います。

マイグレーション管理

コマンド 説明 オプション例 注意点/補足
makemigrations [app_label ...] モデルの変更に基づいて新しいマイグレーションファイルを作成します。
# プロジェクト全体の変更からマイグレーション作成
python manage.py makemigrations

# 特定のアプリ(polls)の変更から作成
python manage.py makemigrations polls

# マイグレーションファイルに名前を付ける
python manage.py makemigrations --name add_price_field polls

# 空のマイグレーションファイルを作成 (データ移行用など)
python manage.py makemigrations --empty polls
モデルに変更がない場合は何も作成されません。作成されたマイグレーションファイルはバージョン管理に含めるべきです。チーム開発ではコンフリクトに注意が必要です。
migrate [app_label] [migration_name] 未適用のマイグレーションをデータベースに適用し、スキーマを更新します。
# 全ての未適用マイグレーションを適用
python manage.py migrate

# 特定のアプリ(polls)のマイグレーションのみ適用
python manage.py migrate polls

# 特定のマイグレーションまで適用/ロールバック
python manage.py migrate polls 0001_initial

# 全てのマイグレーションを取り消す (危険!)
python manage.py migrate zero

# 実行されるSQLを表示 (適用はしない)
python manage.py migrate --plan
引数なしで実行すると、INSTALLED_APPS 内の全てのアプリケーションの未適用マイグレーションが適用されます。migrate zero はそのアプリのテーブルを全て削除するため、本番環境での使用は非常に危険です。
sqlmigrate <app_label> <migration_name> 指定したマイグレーションが実行するSQL文を表示します。実際にデータベースには適用しません。
# pollsアプリの0002番目のマイグレーションが実行するSQLを表示
python manage.py sqlmigrate polls 0002

# 特定のデータベース方言で表示
python manage.py sqlmigrate --database=postgresql polls 0002
データベースの種類によって生成されるSQLが異なる場合があります。デバッグや適用前の確認に有用です。
showmigrations [app_label ...] プロジェクト内のマイグレーションの状態(適用済みか未適用か)を一覧表示します。
# 全てのアプリのマイグレーション状態を表示
python manage.py showmigrations

# 特定のアプリ(auth, sessions)の状態を表示
python manage.py showmigrations auth sessions

# 適用状況をリスト形式で表示
python manage.py showmigrations --list

# 実行計画を表示 (どのマイグレーションが次に実行されるか)
python manage.py showmigrations --plan
[X] は適用済み、[ ] は未適用を示します。

データベースシェル

コマンド 説明 オプション例 注意点/補足
dbshell settings.py で設定されたデータベースのネイティブなコマンドラインクライアントを起動します。
# デフォルトデータベースのシェルを起動
python manage.py dbshell

# 特定のデータベース接続を指定して起動
python manage.py dbshell --database=replica
データベースクライアント(psql, mysql, sqlite3 など)がシステムにインストールされている必要があります。直接SQLを実行してデータを確認・操作したい場合に便利です。
inspectdb [> models.py] 既存のデータベーススキーマを調査し、Djangoのモデル定義(models.py の内容)を標準出力に生成します。
# 既存DBからモデル定義を出力
python manage.py inspectdb

# 特定のテーブルのみを対象にする
python manage.py inspectdb auth_user auth_group

# 出力をファイルに保存
python manage.py inspectdb > myapp/models.py

# 特定のデータベース接続を使用
python manage.py inspectdb --database=legacy_db
生成されたモデルは完璧ではなく、手動での調整(主キー、リレーションシップ、managed = False の設定など)が必要なことが多いです。既存のデータベースからDjangoプロジェクトを始める際の出発点として利用します。

データ管理

コマンド 説明 オプション例 注意点/補足
dumpdata [app_label[.ModelName] ...] データベースのデータをシリアライズして標準出力に書き出します(フィクスチャのエクスポート)。
# 全データをJSON形式で出力
python manage.py dumpdata --format=json --indent=2

# 特定のアプリ(polls)のデータを出力
python manage.py dumpdata polls

# 特定のモデル(auth.User)のデータを出力
python manage.py dumpdata auth.User

# 出力をファイルに保存
python manage.py dumpdata polls > polls/fixtures/initial_data.json

# 特定の主キーを持つオブジェクトを除外
python manage.py dumpdata --exclude auth.permission --exclude contenttypes --pks=1,2,3 polls.Question
デフォルトのフォーマットはJSONです。YAMLやXMLも指定可能です (PyYAML, xml.dom.minidom が必要)。バックアップや初期データの作成、環境間のデータ移行に利用します。contenttypesauth.Permission は通常、migrate で管理されるため除外することが多いです。
loaddata <fixture_file ...> 指定されたフィクスチャファイル(dumpdata で作成したものなど)からデータをデータベースに読み込みます。
# polls/fixtures/initial_data.json を読み込む
python manage.py loaddata polls/fixtures/initial_data.json

# 複数のフィクスチャファイルを読み込む
python manage.py loaddata fixture1.json fixture2.yaml

# 特定のアプリの fixtures ディレクトリから検索して読み込む
python manage.py loaddata initial_data --app myapp

# 特定のデータベースに読み込む
python manage.py loaddata mydata.json --database=other_db
ファイル形式(JSON, YAML, XML)は自動で判別されます。フィクスチャファイルは、各アプリケーションディレクトリ内の fixtures サブディレクトリに置くと、ファイル名だけで指定できます。主キーが衝突する場合、既存のデータは上書きされません(エラーになる)。
flush データベースから全てのデータを削除しますが、マイグレーションによって作成されたテーブル構造は残します。
# データベースを空にする (確認あり)
python manage.py flush

# 確認プロンプトをスキップ (⚠️危険!)
python manage.py flush --noinput

# 特定のデータベースを空にする
python manage.py flush --database=test_db
⚠️非常に破壊的な操作です。 本番環境での使用は絶対に避けてください。テスト環境や開発初期のリセットにのみ使用します。実行前に確認プロンプトが表示されます。

開発サーバー 🖥️

開発目的の軽量なWebサーバーを起動します。

コマンド 説明 オプション例 注意点/補足
runserver [addrport] 開発用の軽量Webサーバーを起動します。デフォルトでは 127.0.0.1:8000 でリッスンします。
# デフォルト (127.0.0.1:8000) で起動
python manage.py runserver

# ポート 8080 で起動
python manage.py runserver 8080

# 全てのIPアドレス (0.0.0.0) のポート 8000 で起動 (LAN内からアクセス可)
python manage.py runserver 0.0.0.0:8000

# IPv6 アドレスで起動
python manage.py runserver [::]:8000

# 静的ファイルをサーブしない (パフォーマンス改善目的)
python manage.py runserver --nostatic

# 自動リロードを無効化
python manage.py runserver --noreload
本番環境での使用は非推奨です。セキュリティやパフォーマンスの観点から、本番では Gunicorn や uWSGI などのWSGIサーバーを使用してください。コードが変更されると自動的にサーバーがリロードされます(--noreload で無効化可)。

テスト ✅

アプリケーションのテストを実行します。

コマンド 説明 オプション例 注意点/補足
test [test_label ...] プロジェクト内のテストケースを発見し、実行します。
# 全てのテストを実行
python manage.py test

# 特定のアプリ(polls)のテストを実行
python manage.py test polls

# 特定のテストクラスを実行
python manage.py test polls.tests.QuestionModelTests

# 特定のテストメソッドを実行
python manage.py test polls.tests.QuestionModelTests.test_was_published_recently_with_future_question

# テスト失敗時にデバッガを起動
python manage.py test --debug-mode

# カバレッジ計測 (coverage.py が必要)
coverage run manage.py test
coverage report

# テストDBを作成せず、既存DBを使用 (⚠️データ破壊の可能性あり)
python manage.py test --keepdb
デフォルトでは、テスト用に別の空のデータベースが作成されます。test_*.py という名前のファイル内の unittest.TestCase サブクラスが検索されます。--keepdb はテスト実行を高速化しますが、既存のDBが変更されるリスクがあります。
sendtestemail recipient [recipient ...] テスト用のメールを送信します。メール設定(settings.pyEMAIL_* 設定)が正しく機能するか確認するのに使います。
# test@example.com にテストメールを送信
python manage.py sendtestemail test@example.com

# 複数宛先に送信
python manage.py sendtestemail user1@example.com user2@example.com
実際にメールが送信されるため、意図しない宛先に送らないよう注意が必要です。コンソールバックエンド(EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend')を使えば、メール内容はコンソールに出力されます。

CSS, JavaScript, 画像などの静的ファイルを管理します。

コマンド 説明 オプション例 注意点/補足
collectstatic 各アプリケーションの静的ファイル(static ディレクトリ内)や STATICFILES_DIRS で指定された場所にあるファイルを、STATIC_ROOT で指定された単一のディレクトリに収集します。
# 静的ファイルを収集 (確認あり)
python manage.py collectstatic

# 確認プロンプトをスキップ
python manage.py collectstatic --noinput

# 収集前に STATIC_ROOT を空にする
python manage.py collectstatic --clear

# リンクではなくファイルをコピーする (デフォルト)
python manage.py collectstatic --no-link

# シンボリックリンクを作成する (ストレージ節約)
# python manage.py collectstatic --link # Windowsでは動作しない場合あり

# 特定のストレージを使用
python manage.py collectstatic --storage myapp.storage.CustomStorage
本番環境で静的ファイルを配信する前に実行する必要があります。DEBUG = False の場合、Django開発サーバーは静的ファイルを配信しないため、このコマンドで集めたファイルをWebサーバー(Nginxなど)やCDNから配信する設定が必要です。
findstatic <staticfile ...> 指定された静的ファイルが、設定された静的ファイルファインダー(STATICFILES_FINDERS)によってどのパスで見つかるかを検索して表示します。
# css/base.css を探す
python manage.py findstatic css/base.css

# 複数のファイルを探す
python manage.py findstatic css/base.css images/logo.png

# 最初の1件だけ表示
python manage.py findstatic css/base.css --first
静的ファイルのパス設定が正しいか、期待通りにファイルが認識されているかを確認するのに役立ちます。ファイルが見つからない場合、STATICFILES_DIRS の設定やアプリ内の static ディレクトリの配置を確認してください。

セッション管理 🍪

ユーザーセッションデータを管理します。

コマンド 説明 オプション例 注意点/補足
clearsessions 期限切れのセッションデータをストレージ(データベースやファイルシステム)から削除します。
# 期限切れセッションを削除
python manage.py clearsessions
通常、このコマンドは定期的に(例: cronジョブで毎日)実行することが推奨されます。これにより、不要なデータがストレージを圧迫するのを防ぎます。セッションバックエンドがデータベース(django.contrib.sessions.backends.db)の場合に特に有効です。

ユーザー管理 👤

主に管理者ユーザー(スーパーユーザー)を作成します。

コマンド 説明 オプション例 注意点/補足
createsuperuser 全ての権限を持つ管理者ユーザー(スーパーユーザー)を作成します。対話形式でユーザー名、メールアドレス、パスワードなどを入力します。
# 対話形式でスーパーユーザー作成
python manage.py createsuperuser

# ユーザー名を事前に指定
python manage.py createsuperuser --username=admin

# メールアドレスを事前に指定
python manage.py createsuperuser --email=admin@example.com

# 非対話モード (環境変数や引数で全ての情報を指定する必要あり)
# 例: DJANGO_SUPERUSER_PASSWORD 環境変数を設定
export DJANGO_SUPERUSER_PASSWORD='mypassword'
python manage.py createsuperuser --username=admin --email=admin@example.com --noinput
Django管理サイト (/admin/) にログインするために必要です。--noinput を使用する場合、ユニーク制約のあるフィールド(デフォルトではユーザー名)が必須で、かつ環境変数などでパスワードが指定されている必要があります。カスタムユーザーモデルを使用している場合、USERNAME_FIELDREQUIRED_FIELDS の設定に応じてプロンプト内容が変わります。
changepassword [username] 指定したユーザーのパスワードを変更します。ユーザー名を省略すると、現在のログインユーザー(環境変数 USER などから推測)のパスワードを変更しようとします。
# adminユーザーのパスワードを変更 (対話形式)
python manage.py changepassword admin

# 現在のユーザーのパスワードを変更
python manage.py changepassword
パスワードを忘れた場合や、定期的な変更が必要な場合に利用します。スーパーユーザー権限は不要です。

翻訳 (国際化・地域化) 🌍

アプリケーションの多言語対応に必要なメッセージファイルを操作します。

コマンド 説明 オプション例 注意点/補足
makemessages ソースコード(Pythonファイル、HTMLテンプレート)から翻訳対象の文字列(_(){% trans %} などでマークされたもの)を抽出し、メッセージファイル (.po ファイル) を作成または更新します。
# 日本語(ja)のメッセージファイルを作成/更新
python manage.py makemessages -l ja

# 全ての利用可能な言語について作成/更新
python manage.py makemessages -a

# 特定のドメイン(djangojs)を対象にする (JavaScript用)
python manage.py makemessages -d djangojs -l ja

# 特定の拡張子を対象にする
python manage.py makemessages -l ja --extension html,txt

# シンボリックリンクを辿る
python manage.py makemessages -l ja --symlinks
gettext ユーティリティがシステムにインストールされている必要があります。LOCALE_PATHS 設定で指定されたディレクトリ、または各アプリケーションの locale ディレクトリに .po ファイルが生成されます。
compilemessages .po ファイルを、Djangoが実際に翻訳時に使用するバイナリ形式の .mo ファイルにコンパイルします。
# 全ての .po ファイルをコンパイル
python manage.py compilemessages

# 特定のロケール(ja)のみコンパイル
python manage.py compilemessages -l ja

# ファジーな翻訳(翻訳が不確かなマーク)を無視してコンパイル
python manage.py compilemessages --ignore fuzzy
.po ファイルを編集して翻訳を追加・修正した後に実行する必要があります。gettext ユーティリティが必要です。

その他 ✨

その他の便利なコマンド。

コマンド 説明 オプション例 注意点/補足
shell Djangoプロジェクトの環境が読み込まれた状態で、Pythonの対話シェル(デフォルトは標準Pythonシェル、IPythonやbpythonがインストールされていればそちらを優先)を起動します。
# Pythonシェルを起動
python manage.py shell

# IPython を強制的に使用
python manage.py shell -i ipython

# bpython を強制的に使用
python manage.py shell -i bpython

# 起動時に特定のコマンドを実行
python manage.py shell -c "from polls.models import Question; print(Question.objects.count())"
モデルをインポートしてデータを操作したり、設定値を確認したり、特定の関数を試したりするのに非常に便利です。デバッグや簡単なデータ操作に適しています。
version [app_label ...] Djangoのバージョン、および指定されたアプリケーションのバージョン(__version__ 属性があれば)を表示します。
# Djangoのバージョンを表示
python manage.py version

# アプリのバージョンも表示 (アプリに __version__ が定義されていれば)
# python manage.py version myapp1 myapp2
環境の確認やバグ報告時に役立ちます。
diffsettings 現在のDjangoプロジェクトの設定(settings.py などで定義されたもの)と、Djangoのデフォルト設定との差分を表示します。
# 設定の差分を表示
python manage.py diffsettings

# 全ての設定を表示 (デフォルト値も含む)
python manage.py diffsettings --all

# 特定のデータベース設定の差分を表示
python manage.py diffsettings --database=other_db
どのような設定項目をカスタマイズしているかを確認するのに便利です。特に、予期せぬ挙動の原因調査や、設定の最適化に役立ちます。
runscript <script_name> [script_args ...] django-extensions パッケージ(別途インストールが必要)で提供されるコマンド。プロジェクト内の指定されたスクリプト(通常は scripts ディレクトリに配置)をDjangoの環境下で実行します。
# scripts/my_script.py を実行
# (django-extensions が必要)
python manage.py runscript my_script

# スクリプトに引数を渡す
python manage.py runscript populate_data --arg1=value1 --arg2
バッチ処理やカスタム管理タスクを実行するのに便利です。スクリプト内ではDjangoのモデルや設定を自由に利用できます。

⚠️ 注意:

  • このチートシートは一般的なコマンドとオプションを網羅していますが、全てのオプションや詳細な動作については公式ドキュメントを参照してください。
  • コマンドによっては、特定のライブラリ(例: psycopg2, mysqlclient, coverage.py, PyYAML, django-extensions)やシステムツール(例: gettext)が別途必要になる場合があります。
  • 破壊的な操作(flush など)を実行する際は、対象環境(開発、ステージング、本番)を十分に確認し、必要であればバックアップを取得してください。

コメント

タイトルとURLをコピーしました