Django で独自のカスタム管理コマンドを作成し、定期的な処理やバッチ処理を実行する方法を解説します。
Django では、python manage.py
で実行できる管理コマンドを カスタムコマンドとして作成 できます。
これにより、定期的なデータ処理、データベースのメンテナンス、ログの解析などのバッチ処理を手軽に実装 できます。
✅ この記事で学べること
Django には manage.py
を使った多くのコマンド (runserver
, migrate
, createsuperuser
など) が用意されていますが、
独自のコマンドを追加することで、特定のタスクを簡単に実行 できます。
📌 カスタムコマンドの活用例
まず、Django アプリ (base/
) の management/commands/
フォルダを作成します。
BASHmkdir -p base/management/commands
次に、__init__.py
を作成して、Python パッケージとして認識させます。
BASHtouch base/management/__init__.py touch base/management/commands/__init__.py
base/management/commands/sample_command.py
を作成します。
PYTHONfrom django.core.management.base import BaseCommand class Command(BaseCommand): help = 'サンプルのカスタムコマンド' def handle(self, *args, **kwargs): self.stdout.write(self.style.SUCCESS('カスタムコマンドが実行されました!'))
✅ コードの解説:
BaseCommand
を継承してカスタムコマンドを作成help
でコマンドの説明を定義handle()
メソッド内に実行する処理を記述作成したコマンドを以下のように実行できます。
BASHpython manage.py sample_command
✅ 出力例:
カスタムコマンドが実行されました!
コマンドに引数を渡せるように拡張できます。
base/management/commands/greet.py
を作成し、引数を受け取るようにします。
PYTHONfrom django.core.management.base import BaseCommand class Command(BaseCommand): help = '指定した名前で挨拶するコマンド' def add_arguments(self, parser): parser.add_argument('name', type=str, help='挨拶する名前') def handle(self, *args, **kwargs): name = kwargs['name'] self.stdout.write(self.style.SUCCESS(f'こんにちは、{name} さん!'))
以下のように引数を渡して実行できます。
BASHpython manage.py greet 太郎
✅ 出力例:
こんにちは、太郎 さん!
📌 ポイント:
add_arguments()
を使って引数を追加handle()
で kwargs['name']
を取得古いデータを削除するカスタムコマンドを作成できます。
PYTHONfrom django.core.management.base import BaseCommand from base.models import User from datetime import timedelta from django.utils.timezone import now class Command(BaseCommand): help = '90日以上ログインのないユーザーを削除' def handle(self, *args, **kwargs): threshold_date = now() - timedelta(days=90) deleted_count, _ = User.objects.filter(last_login__lt=threshold_date).delete() self.stdout.write(self.style.SUCCESS(f'{deleted_count} 件のユーザーを削除しました。'))
✅ 実行方法:
BASHpython manage.py cleanup_users
✅ 出力例:
50 件のユーザーを削除しました。
management/commands/
フォルダ内に Python ファイルを作成BaseCommand
を継承し、handle()
メソッド内に処理を記述add_arguments()
を使うと、引数を受け取ることが可能回 | タイトル | リンク |
---|---|---|
第 1 回 | Django: 認証システムとログイン機能 | 詳 細 |
第 2 回 | Django: カスタムユーザーモデルの作成 | 詳 細 |
第 3 回 | Django: メール認証とパスワードリセット | 詳 細 |
第 4 回 | Django: ソーシャルログイン(Google・LINE 認証) | 詳 細 |
第 5 回 | Django: API の作成と Django REST Framework の導入 | 詳 細 |
第 6 回 | Django: 認証付き API(JWT 認証とセッション認証) | 詳 細 |
第 7 回 | Django: CORS 設定とフロントエンドとの連携 | 詳 細 |
第 8 回 | Django: ルーティングのテストとデバッグ | 詳 細 |
第 9 回 | Django: カスタムミドルウェアの作成 | 詳 細 |
第 10 回 | Django: 非同期処理と async/await の活用 | 詳 細 |
第 11 回 | Django: カスタムコマンドの作成 | この記事 |
当サイトの情報は、一般的な参考情報として提供しております。
正確な情報の掲載に努めておりますが、その内容の正確性・完全性・最新性を保証するものではありません。
記事の内容をご利用の際は、ご自身の責任において判断し、必要に応じて専門家にご相談ください。
当サイトの情報の利用により生じたいかなる損害についても、一切の責任を負いかねますのでご了承ください。
※ 本ページでは、著作権法に基づき、適正な引用の範囲内でコンテンツを紹介しています。
オリジナルの情報は発信元をご確認ください。
もし問題がありましたら、こちら からお問い合わせください。