ウェブアプリケーションを作成していると、時間がかかる作業を行う必要がある場合が多いです。例えば:

  • ユーザーが会員登録すると、認証メールを送信する必要があります。
  • 毎晩12時に自動的にデータクリーンアップ作業を実行する必要があります。
  • ユーザーが特定の作業を予約すると、指定された時間に実行される必要があります。

Djangoは基本的にリクエストが来るとすぐに応答を返す方式で動作するため、時間がかかる作業を非同期に処理する方法が必要です。 ここでCeleryが登場します! 🚀

CeleryはDjangoで非同期作業を実行できるようにする強力なツールであり、Celery-Beatは予約された時間に特定の作業を実行できるようにします。

Django Celery-Beat タスクスケジューリングのイラスト

1️⃣ Django-Celery-Beatで予約作業を設定する方法

Celery-Beatで予約作業を設定する方法は大きく分けて2つあります。

✅ (1) Django AdminでGUIで予約設定

Django-Celery-BeatはDjango Adminで直接GUIを通じて予約作業を設定できるようにサポートしています。

📌 特徴
  • コーディングなしで簡単な設定だけで周期的な作業を実行できます。
  • Django管理ページでUIを通じて周期的作業を設定および修正可能。
  • ただし、静的な設定であるため、ユーザーのリクエストに関連して動的に変更するのは難しいです。
📌 どのような場合に使用すると良いですか?
  • アプリケーションとユーザー間の相互作用が必要ない場合
  • 例) 毎日真夜中に自動的にデータバックアップを実行する作業
  • 例) 毎週月曜日の朝に特定のAPIデータを更新する作業

✅ (2) Pythonコードで動的に予約作業を生成

Celery-Beatの予約作業をコードを通じて直接生成することも可能です。

📌 特徴
  • ユーザーのリクエストに応じて動的に予約作業を生成できます。
  • 予約された作業をコードを通じて生成、変更、削除可能。
  • Adminを介さず、ビュー(View)から直接周期的作業を登録できます。
📌 どのような場合に使用すると良いですか?
  • ユーザーの特定のリクエストが発生したときに予約作業が必要な場合。
  • 例) ユーザーが"予約注文"をすると、2時間後に自動的にキャンセルされる作業を登録。
  • 例) ユーザーが"メールリマインダー"機能を設定すると、指定された時間に通知メールを送信するよう予約。

2️⃣ [実習] Pythonコードで予約作業を生成する

ステップ 1: Celeryタスクを定義

from celery import shared_task

@shared_task
def send_reminder_email(user_id):
    # ここでメールを送信するロジックを実装
    print(f"📧 ユーザー {user_id} にリマインダーメールを送信しました!")

ステップ 2: Django-Celery-BeatでPeriodicTaskオブジェクトを生成

from django_celery_beat.models import PeriodicTask, IntervalSchedule
import json

# 1️⃣ 実行間隔(Interval)を生成 (例: 10分ごとに実行)
schedule, created = IntervalSchedule.objects.get_or_create(
    every=10,  # 10分間隔
    period=IntervalSchedule.MINUTES
)

# 2️⃣ PeriodicTaskを生成
task = PeriodicTask.objects.create(
    interval=schedule,  # 実行間隔
    name="Send Reminder Email",  # 作業名
    task="myapp.tasks.send_reminder_email",  # 実行するCeleryタスク名
    args=json.dumps([1]),  # ユーザーIDを渡す (ここでは例として1番ユーザー)
)

🎯 結論: Django開発者ならCeleryは必需品!

CeleryはDjangoで非同期作業を管理し、予約実行を可能にする必須のツールです。

特にCelery-Beatを活用することで、周期的な作業を設定し、特定のイベントに応じて動的に予約を管理できます。

📌 整理すると:

  1. Django-Celery-Beatは予約された作業を実行する強力なツール。
  2. Django Admin(GUI)を利用すれば簡単に周期的作業を設定できます。
  3. Pythonコードで作業を生成することで、ユーザーリクエストに応じて動的に予約作業を管理できます。
  4. Django開発者ならCeleryの基本的な概念とCelery-Beatを習得することが必須!

🔥 次回予告

今回はコードを通じてCelery-Beatの予約作業を生成する方法を簡単に紹介しました。しかし実際には`PeriodicTask`モデルの他のさまざまなフィールドを活用して複雑なロジックに対応しながら使用されます。

次回は、もっと本格的にさまざまな作業を予約する実践コードと`PeriodicTask`モデルの各フィールドがどのような役割を果たすのかについて詳しく取り上げる予定です。

より深いCelery活用法が知りたい方は次回もお楽しみに! 🚀

また、ブログ内でCeleryに関連する記事をもっと読みたい方は、

下の「類似ポスト」リストや、右上の検索ボックスで"Celery"を検索してみてください! 😊