前の記事ではDjango5のローカル環境構築について書きました。
今回の記事ではそのDjango5の環境を使って、カスタムコマンドを作っていきたいと思います。
環境構築がまだの方はまずはこちらの記事を参考にして、Django5の環境構築を行なってください。
やること
- Appを作る
- settingsファイルを編集する
- カスタムコマンド用のディレクトリ、ファイルを作る
- 実行してみる
Appを作る
まずはDjangoのアプリケーションを作っていきます。
アプリケーションは以下のコマンドで作成します。ここではアプリ名は myapp
とします。
コンテナ内で以下のコマンドを実行
$ django-admin startapp myapp
コンテナに入らなくても、docker-composeのサービスを対象にして、コマンド実行することができます。
$ docker-compose exec django django-admin startapp myapp
これで、myappディレクトリが作成されていたら成功です。
settingsファイルを編集する
作成したアプリケーションが認識されるようにします。
settingsファイルを開き、 INSTALLED_APPS
というところを見つけてください。初期ではこんな感じになっています。
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles'
]
次に、作成したmyappアプリケーション配下の app.py
を開いてください。そのファイル内のクラス名をコピーしてください。
私の環境だと、以下のようになっています。 MyappConfig
がクラス名ですね。
from django.apps import AppConfig
class MyappConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'myapp'
先ほど見つけたsettings.pyの INSTALLED_APPS
を以下のように編集していきます。
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp.apps.MyappConfig' # ← ここを追加
]
これでOKです👍
カスタムコマンド用のディレクトリ、ファイルを作る
カスタムコマンドのpythonファイルを作ります。その前に、ディレクトリを作っていきます。
myapp
ディレクトリ配下に management
ディレクトリを作成してください。
また、 management
ディレクトリ内に、__init__.py
と commands
ディレクトリを作成してください。
さらに、 commands
ディレクトリに、 sample.py
を作ってください。
今、こんな感じになっているはずです。
myapp
├── __init__.py
├── __pycache__
│ ├── __init__.cpython-312.pyc
│ ├── admin.cpython-312.pyc
│ ├── apps.cpython-312.pyc
│ └── models.cpython-312.pyc
├── admin.py
├── apps.py
├── management # ここに注目!
│ ├── __init__.py
│ └── commands
│ ├── __init__.py
│ └── sample.py
├── migrations
│ ├── __init__.py
│ └── __pycache__
│ └── __init__.cpython-312.pyc
├── models.py
├── tests.py
└── views.py
sample.py
が、今回作るカスタムコマンドになります。
中身を書いていきましょう。今回は実行されると単に sample start!!
と出力するだけのコマンドを作っていきます。
from django.core.management.base import BaseCommand
class Command(BaseCommand):
def handle(self, *args, **options):
print("sample start!!")
これで準備完了です。これを実行してみましょう!
実行してみる
コンテナに入り、以下を実行してください。
$ python manage.py sample
sample start!!
sample start!!
と出力されましたね。成功です!🎉
コンテナに入らなくても、以下のコマンドでも実行可能です。
$ docker-compose exec django python manage.py sample
以上、Django5でカスタムコマンドを実装する手順まとめでした!