mcpField
S
symfony-scheduler

symfony-scheduler

github.com/dev-toolings開発22782 回インストール3 週間前に更新
リポジトリ

symfony-scheduler について

Symfony で定期処理を設定する開発者向けのスキルです。トリガーの選択やスケジュール構成、ワーカー運用に加え、重複や実行の重なりを抑える方法を扱います。

主な機能

  1. 01定期・cronトリガー
  2. 02名前付きスケジュールプロバイダー
  3. 03ステートフルスケジュールとロック
  4. 04ワーカー運用と監視

活用シーン

  1. 01レポート、クリーンアップ、同期の定期実行
  2. 02負荷の高い処理の重複防止
  3. 03スケジュールメッセージと実行日のテスト

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/dev-toolings/superpowers-symfony --skill symfony-scheduler

インストール後、Claude Code で/symfony-schedulerを入力して読み込まれたか確認します。

同梱ファイルreference.md

詳細

Symfony Scheduler (Symfony)

使用する場面

  • システムの cron エントリーを使わずに、定期的な処理(レポート、クリーンアップ、同期)を実行する場合。
  • RecurringMessage::every()、RecurringMessage::cron()、カスタムの TriggerInterface のどれを使うか選ぶ場合。
  • #[AsSchedule] を使って、ジョブを複数の名前付きスケジュールに分割する場合。
  • 負荷の高いスケジュールタスクの重複実行や実行漏れを防ぐ場合。

デフォルトのワークフロー

  1. symfony/scheduler をインストールし、メッセージと、その #[AsMessageHandler] ハンドラーを作成します。
  2. ScheduleProviderInterface を実装する #[AsSchedule('default')] クラスを作成し、RecurringMessage エントリーを追加します。
  3. トリガーを選択します。every('5 minutes') または cron('0 */6 * * *') を使い、cron には明示的なタイムゾーンを指定します。
  4. 負荷の高いタスクでは、Schedule に stateful($cache) と lock($lockFactory->createLock('scheduler')) を追加します。
  5. Supervisor の下で messenger:consume scheduler_default を実行します。スケジュールごとにプロセスを 1 つ起動します。
  6. PreRunEvent と PostRunEvent でログを記録し、getRecurringMessages() と getNextRunDate() を使ってプロバイダーをテストします。

注意事項

  • スケジュールごとにコンシューマーを 1 つ(numprocs=1)だけ実行し、ロックを追加してください。そうしないと、同じタスクが 2 回実行されます。
  • すべての cron トリガーでタイムゾーンを明示してください。
  • 実行が繰り返される可能性があるため、スケジュールされたハンドラーは冪等である必要があります。
  • 長時間稼働するワーカーを自動的に再起動できるよう、Supervisor の autorestart と --time-limit を併用してください。

段階的な情報開示

  • 実行方針とリスク管理には、このファイルを使用します。
  • 実装の詳細が必要な場合は、リファレンスを参照してください。

出力要件

  • トリガーとタイムゾーンを含むスケジュールプロバイダー。
  • ワーカーのコマンドと Supervisor のエントリー。
  • 重複実行の制御方針(stateful、lock)と監視用フック。

リファレンス

  • reference.md

コメント