Breaking News

Default Placeholder Default Placeholder

前の記事では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__.pycommandsディレクトリを作成してください。

さらに、 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でカスタムコマンドを実装する手順まとめでした!