タスクスケジュールイントロダクション今までは実行をスケジュールする必要のあるタスクごとにサーバで、Cronエントリを制作していたかと思います。これはすぐに面倒になります。Laravelのコマンドスケジューラは、Laravel自身の中でコマンドの実行スケジュールをスラスラと記述的に定義できるようにしてくれます。スケジューラを使用すると、サーバにはCronエントリがたった一つだけで済みます。タスクスケジュールは、app/Console/Kernel.phpファイルのscheduleメソッドで定義します。使いはじめる手助けになるように、サンプルがこのメソッド中で定義してあります。スケジューラを使いはじめるスケジューラを使用するには、サーバに以下のCronエントリを追加するだけです。Forgeのようなサービスを使用することを考慮してください。2>&1このCronはLaravelコマンドスケジューラを毎分呼び出します。schedule:runコマンドが実行されると、Laravelはスケジュールされているジョブを評価し、実行する必要のあるジョブを起動します。スケジュール定義スケジュールタスクは全部App\Console\Kernelクラスのscheduleメソッドの中に定義します。手始めに、スケジュールタスクの例を見てください。この例は毎日深夜12時に「クロージャ」をスケジュールしています。「クロージャ」の中でテーブルをクリアするデータベースクエリを実行しています。}}さらにクロージャを使用したスケジュールでは、invoke可能なオブジェクトも使用できます。Invoke可能なオブジェクトとは、単に__invokeメソッドを含むPHPクラスのことです。DeleteRecentUsers)->daily();Artisanコマンドのスケジュール「クロージャ」の呼び出しをスケジュールするほかに、Artisanコマンドやオペレーティングシステムコマンドをスケジュールできます。コマンド名かそのクラスのどちらかを用いて、Artisanコマンドをスケジュールするcommandメソッドを使ってみましょう。'--force'])->daily();キュー投入するジョブのスケジュールキュー投入するジョブをスケジュールするには、jobメソッドを使います。このメソッドを使うと、ジョブをキューに入れるためのクロージャを自前で作成するcallメソッドを使わずとも、ジョブをスケジュール実行することができます。'heartbeats')->everyFiveMinutes();シェルコマンドのスケジュールオペレーティングシステムでコマンドを実行するためにはexecメソッドを使います。/home/forge/script.js')->daily();繰り返しのスケジュールオプションタスクには様々なスケジュールを割り付けることができます。タイムゾーン設定これらのメソッドは週の特定の曜日だけに実行させるために、追加の制約と組み合わせ細かく調整できます。'17:00');以下が追加のスケジュール制約のリストです。時間制限betweenメソッドは一日の時間に基づき、実行時間を制限するために使用します。'22:00');同じように、unlessBetweenメソッドは、その時間にタスクの実行を除外するために使用します。'4:00');真値テスト制約whenメソッドは指定した真値テストの結果に基づき制限を実行します。言い換えれば指定した「クロージャ」がtrueを返し、他の制約が実行を停止しない限りタスクを実行します。true;});skipメソッドはwhenをひっくり返したものです。skipメソッドへ渡したクロージャがtrueを返した時、スケジュールタスクは実行されます。true;});whenメソッドをいくつかチェーンした場合は、全部のwhen条件がtrueを返すときのみスケジュールされたコマンドが実行されます。環境制約environmentsメソッドは指定した環境時のみ、タスクを実行するために使用します。'production']);タイムゾーンtimezoneメソッドを使い、タスクのスケジュールをどこのタイムゾーンとみなすか指定できます。->at('02:00')スケジュール済みの全タスクへ同じタイムゾーンを指定する場合は、app/Console/Kernel.phpファイル中でscheduleTimezoneメソッドを定義してください。このメソッドで全スケジュール済みタスクに適用する、デフォルトのタイムゾーンを返します。タイムゾーンの中には夏時間を取り入れているものがあることを忘れないでください。夏時間の切り替えにより、スケジュールされたタスクが2回実行されたり、全くされないことがあります。そのため、可能であればタイムゾーンによるスケジュールは使用しないことをおすすめします。タスク多重起動の防止デフォルトでは以前の同じジョブが起動中であっても、スケジュールされたジョブは実行されます。これを防ぐには、withoutOverlappingメソッドを使用してください。Artisanコマンドは実行中でない限り毎分実行されます。withoutOverlappingメソッドは指定したタスクの実行時間の変動が非常に大きく、予想がつかない場合に特に便利です。overlapping)」ロックを期限切れにするまでに、何分間経過させるかを指定できます。時間切れまでデフォルトは、24時間です。この機能を使用するには、アプリケーションのデフォルトキャッシュドライバとして、memcachedかredisキャッシュドライバを使用する必要があります。全サーバが同じ単一のキャッシュサーバと通信している必要があります。アプリケーションが複数のサーバで実行される場合、スケジュール済みのジョブを単一サーバ上のみで実行するよう制限できるようになりました。毎週の金曜の夜に、新しいレポートを生成するタスクをスケジュールしていると仮定しましょう。タスクスケジューラが3つのワーカーサーバ上で実行されているなら、スケジュールされているタスクは3つ全部のサーバで実行され、3回レポートが生成されます。タスクをサーバひとつだけで実行するように指示するには、スケジュールタスクを定義するときにonOneServerメソッドを使用します。このタスクを最初に取得したサーバが、同じタスクを同じCronサイクルで他のサーバで実行しないように、ジョブにアトミックなロックを確保します。->onOneServer();バックグランドタスクデフォルトでは、同じ時間にスケジュールされている複数のコマンドは、順次実行されます。実行時間がかかるコマンドがある場合、それ以降のコマンドが期待している時間より遅れて起動されてしまいます。全てを同時に実行するには、runInBackgroundメソッドを使用し、コマンドをバックグランドで実行してください。runInBackgroundメソッドはcommandかexecメソッドにより、タスクをスケジュールするときにのみ使用してください。メンテナンスモードLaravelのスケジュールタスクは、Laravelがメンテナンスモードの間は実行されません。メンテナンスが完了していないサーバ上で、タスクが実行されてほしくないからです。メンテナンスモードでも実行するように強制したい場合は、evenInMaintenanceModeメソッドを使用します。$schedule->command('emails:send')->evenInMaintenanceMode();タスク出力Laravelスケジューラはスケジュールしたタスクが生成する出力を取り扱う便利なメソッドをたくさん用意しています。最初にsendOutputToメソッドを使い、後ほど内容を調べられるようにファイルへ出力してみましょう。->sendOutputTo($filePath);出力を指定したファイルに追加したい場合は、appendOutputToメソッドを使います。->appendOutputTo($filePath);emailOutputToメソッドを使えば、選択したメールアドレスへ出力をメールで送ることができます。タスク出力をメールで送信する前に、メール送信サービスの設定を済ませておく必要があります。->emailOutputTo('foo@example.com');コマンド失敗時に出力をメール送信したい場合は、emailOutputOnFailureメソッドを使用します。emailOutputOnFailure、sendOutputTo、appendOutputToメソッドは、commandとexecメソッドに対してどれか一つしか指定できません。タスクフックbeforeとafterメソッドを使えば、スケジュールされたタスクの実行前後に指定したコードを実行することができます。});onSuccessとonFailureメソッドにより、そのスケジュールタスクが成功・失敗した時に特定のコードを実行できます。});URLへのPingpingBeforeとthenPingメソッドを使用し、タスク実行前、タスク完了後に指定したURLへ自動的にPingすることができます。Envoyerのような外部サービスへスケジュールされたタスクが始まる、または完了したことを知らせるのに便利です。->thenPing($url);pingBeforeIfとthenPingIfメソッドは、指定した条件がtrueのときのみ、指定URLへPingするために使用します。$url);pingOnSuccessとpingOnFailureメソッドは、タスクが成功・失敗したときに指定URLへPingするために使用します。HTTPライブラリが必要です。Composerパッケージマネージャを使用して、プロジェクトにGuzzleを追加できます。2019.ドキュメントメンテナンス期間は終了しました。注目:アイコン:ページ内リンク設置(リンクがないヘッダーへの移動では、リンクがある以前のヘッダーのハッシュをURLへ付加します。閉じる移動クリックで即時移動します。適用ボタンクリック後に、全項目まとめて適用されます。Scaffoldスカフォールド型枠生成スカフィールドLargeスクリーン表示幅640px80%90%100%インデントなし1rem2rem3rem本文フォントコードフォントフォント適用確認フォントの指定フィールドから、フォーカスが外れると、当ブロックの内容に反映されます。EnglishのDisplayもPreviewしてください。フォント設定時、表示に不具合が出た場合、当サイトのクッキーを削除してください。バックスラッシュを含むインライン\Code\Blockの例です。以下はコードブロックの例です。}}設定を保存する前に、表示が乱れないか必ず確認してください。CSSによるフォントファミリー指定の知識がない場合は、フォントを変更しないほうが良いでしょう。