Django manage.pyのコマンド チートシート

2017年5月9日

Djangoで開発してるといつもどのコマンド使えばいいか忘れちゃうんで、忘れないようにまとめました。
Djangoのバージョンは1.10.3です。

auth 認証関連

ユーザ認証機能などで利用します。サブコマンドは下記の2つです。それぞれこんな感じで使用します。

changepassword

$ python manage.py changepassword
Changing password for user 'ユーザ名'
Password:
Password (again):
Password changed successfully for user 'ユーザ名'

changepasswordのコマンドは管理者サイトからでも編集できるので、あまり利用頻度は高くないです。

createsuperuser

$ python manage.py createsuperuser
ユーザID:
メールアドレス:
パスワード:

createsuperuserは必ず使います。というかこのコマンド実行しないと、いつまでたっても管理者サイトにアクセスできません。

debug_toolbar デバッグ関連

デバッグ時にコンソールを開くことができて、発行したSQLを確認したりできます。呼び出し方はこんな感じ。

debugsqlshell

$ python manage.py debugsqlshell
Python 3.5.2 (default, Nov 16 2016, 03:31:08)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>>

コンソールが起動するので、あとは確認したいクエリを書いていけばいいんですが、あまり使うことはないですね・・・。

django

Djangoのメインのサブコマンドになります。

check

$ python manage.py check
System check identified some issues:

WARNINGS:
?: (urls.W001) Your URL pattern '^$' uses include with a regex ending with a '$'. Remove the dollar from the regex to avoid problems including URLs.

System check identified 1 issue (0 silenced).

Djangoプロジェクトのチェックをしてくれます。状況に応じてErrorやWarningを出力するので、必要に応じて修正して、綺麗なDjangoプロジェクトを作ります。

compilemessages

国際化対応の場合に利用します。いろんな言語に対応する必要があるシステムを作ってる場合には必須のコマンドかと思います。使い方はこんな感じです。

$ python manage.py compilemessages --locale=br_PT

createcachetable

$ python manage.py createcachetable <tablename>

tablenameのところに設定した名前でキャッシュテーブルを作成します。これも普通に開発する分にはあまり使わない気がします。

dbshell

$ python manage.py dbshell

MySQLとかPostgreSQLのコンソールが開きます。

diffsettings

$ python manage.py diffsettings

現在の設定ファイルとデフォルトの設定ファイルの差分を表示してくれます。自分で何を設定して何がデフォルトの設定だったかとかが分からなくなった時とかに使えそうです。
設定ファイルって色々さわってると最初の状態がわからなくなることがよくあるので・・・。

dumpdata

$ python manage.py dumpdata <appname appname ...>

appnameで指定したアプリケーションに関連するデータを全て出力します。データ量が多い場合などは注意が必要ですね。

flush

$ python manage.py flush

データベースを syncdb 直後の状態に戻します。データベースを綺麗にしたい時とかに使います。
自分はDBのテーブルを直接 TRUNCATE しちゃうことが多いですが。

inspectdb

$ python manage.py inspectdb

DBの情報を参照して、models.pyを出力してくれます。システムのリプレースの時などでDBは変更しないけど、Webアプリは変更するケースで使えるかと・・・。
これがあれば、DBを解析してmodels.pyを一から作る苦労をしなくて良くなるかも??

loaddata

$ python manage.py loaddata <fixture fixture ...>

指定したフィクスチャ名と一致するファイルをデータベースにロードします。
テストデータを投入したり、初期データ投入する場合に使えそうです。

makemessages

$ python manage.py makemessages --all

翻訳対象にマークさ れている文字列全てを取り出します。localeフォルダの中にメッセージファイルを作成します。
多言語対応が必要なシステムでは必須の機能ですね。

makemigrations

$ python manage.py makemigrations appname

appnameで指定したアプリケーションのマイグレーションファイルを作成します。
models.pyからDBの差分をマイグレーションファイルとしてまとめてくれます。appnameは省略可能です。
この機能は利用頻度がかなり高いです。

ただ、一点注意点が・・・。ここで生成されるマイグレーションファイルをGitなどにコミットしてしまうと他の人のDB環境と不一致を起こしてしまい、うまく動かなくことがあるので、マイグレーションファイルはgitignoreに追加するなどして管理対象外のファイルとしておくことが望ましいです。
というかそうしておかないと本番環境を構築する際などに100%失敗します。
DBの方でどのマイグレーションファイルまでを読み込んだかを覚えてるみたいで、そこがずれるとマイグレーションできなくなります。

migrate

$ python manage.py migrate

マイグレーションファイルを使ってDBをマイグレートします。
makemigrations → migrate っていう流れで実行していきます。

sendtestemail

$ python manage.py sendtestemail <email...>

テストメールを送信してくれるみたいですが、使ったことがないので、あまりよく分からないです・・・。

shell

$ python manage.py shell

Pythonのコンソールが起動します。コンソール上で確認したいコードなどがあれば、このコマンドを使ってコンソールを呼び出して、コードを試してみることができます。

showmigrations

$ python manage.py showmigrations

アプリ名とマイグレーション名をリストで表示してくれます。
マイグレーションの漏れがないかなどの確認に使えます。あとはアプリ名を忘れちゃった時とか・・・。

sqlflush

$ python manage.py sqlflush

flushコマンドで実行されるSQL文を出力します。flushで機械的にやるのが不安な場合や部分的に初期化したい場合などは、こちらのコマンドでSQL文を確認してから、DBの初期化など行えばいいと思います。

sqlmigrate

$ python manage.py sqlmigrate

migrateコマンドで実行されるSQL文を出力します。マイグレーション時のSQLログが欲しいとか言われた時には使えそうです。

sqlsequencereset

$ python manage.py sqlsequencereset <appname appname ...>

指定した appname のシークエンスをリセットするためのSQL 文を出力します。
レコードをDELETEしたけど、シーケンスはそのままって状態の時とかに使えそうですね。

squashmigrations

$ python manage.py squashmigrations appname

複数のマイグレーションファイルを一つにまとめてくれます。保守などで長期間メンテナンスしてると、どんどんマイグレーションファイルが増えてきて、マイグレーションの実行にも時間がかかるようになると思いますが、その時は squashmigrations でマイグレーションファイルを一つにまとめて綺麗にしちゃいましょう。

startapp

$ python manage.py startapp appname

appnameのアプリケーションを作成します。アプリケーションに必要な最低限のファイルをappnameフォルダ直下に作成してくれます。

startproject

$ python manage.py startproject projectname

projectnameのプロジェクトを作成します。settings.pyやurls.pyファイルを作成してプロジェクトに必要なファイルを作成してくれます。

test

$ python manage.py test <appname>

appnameで指定したアプリケーションのテストを実行します。コンソール上で成功/失敗を確認することができます。

testserver

$ python manage.py testserver <fixture fixture ...>

指定したフィクスチャを使って開発用サーバを起動します。フィクスチャのデータをテストデータとして使えます。

sessions セッション関連

clearsessions

$ python manage.py clearsessions

セッションをクリアします。あまり使うことはないかも??

staticfiles 静的ファイル関連

collectstatic

$ python manage.py collectstatic

settings.pyで設定したSTATIC_ROOTのパスに静的ファイルを集めてくれるコマンドみたいです。
本番環境で静的ファイルをSTATIC_ROOTのパスに配置し、Webサーバにそのパスへのアクセス権をつけてあげることで、本番環境で静的ファイルを読み込むことができるようになります。

このコマンドを実行しないとWebサーバは静的ファイルを参照するために、自分で開発した静的ファイルのディレクトリやDjangoのフレームワーク自体が保持している静的ファイルのディレクトリに対して個別でアクセス権を設定しなければならなくなります。

本番環境へデプロイする際には忘れずに実行が必要なコマンドですね。

findstatic

$ python manage.py findstatic <filename>

相対パスで指定したfilenameのパスを探してくれます。テンプレートとかで呼び出してる静的ファイルの場所が分からなくなったりしたら使えるかも??

runserver

$ python manage.py runserver

開発用サーバが起動します。特に設定とか変更してなければ「http://localhost:8000」が起動すると思います。

最後に

manage.pyのコマンドを一通り確認していきましたが、実際に使ってるコマンドって5つくらいしかありませんでした。
まだまだDjangoの全てを使いこなせてないので、これからも精進していきたいと思います。
今回、コマンドを確認してきた中で一番使えそうなコマンドは「squashmigrations」だと思います。
マイグレーションファイルって一つにまとめられるってこと、初めて知りました。早速使っていきたいと思います。