IT-Q

定期実行(バッチ処理)は Laravel ではどう組みますか。

サーバーの cron には schedule:run を毎分実行する1行だけを置き、個々の予定はアプリ側のコードで定義します。何がどの環境で動くかがリポジトリから分かる状態になります。

面接官が見ているのはスケジューラの仕組み。

よくある答えと、面談でどう見られるか

  • アプリ側にスケジュールを定義し、cron には schedule:run を毎分実行する1行だけ登録する
    その通りです。定義がコードに入るので、何が動いているかがリポジトリから分かります。
  • 処理ごとに cron を1行ずつサーバーに登録する
    動きはしますが、定義がサーバー上にしか残らず引き継ぎで失われます。
  • キューに積めば自動的に定期実行される
    キューは「一度だけあとで実行」で、定期実行の仕組みではありません。
  • ミドルウェアで時刻を判定して実行する
    リクエストが来ないと動きません。

模範解答

サーバーの cron には schedule:run を毎分実行する1行だけを登録し、個々のスケジュールはアプリ側のコードで定義します。

処理を追加するたびに cron を編集しなくて済み、定義がリポジトリに入るのでどの環境で何が動くかがコードから分かります。

前回の実行が終わらないうちに次が起動すると二重処理になるので、withoutOverlapping() を付けて重複を防ぎます。