イントロダクション
Artisan(アーティザン:職人)とは、Laravelを構成しているコマンドラインインターフェイスの名前です。アプリケーション開発で役立つ、数多くのコマンドを用意しています。パワフルなSymfonyコンソール・コンポーネントを利用し動いています。
使用法
使用可能な全コマンドの一覧
使用可能なコマンドのリストを全部表示するには、list
コマンドを使用してください。
php artisan list
コマンドのヘルプ表示
全てのコマンドは「ヘルプ」が用意されており、説明と使用できる引数、オプションを表示します。ヘルプを表示するには、help
に続いてコマンド名を入力してください。
php artisan help migrate
設定環境の指定
コマンドを実行する設定環境を指定するには、--env
スイッチを使用します。
php artisan migrate --env=local
現在のバージョンの表示
インストールしているLaravelのバージョンを確認するには、--version
オプションを指定します。
php artisan --version
コマンド外からの呼び出し
ArtisanコマンドをCLI外部から実行したいこともあります。例えば、HTTPルートからArtisanコマンドを起動したい時です。Artisan
ファサードを使用するだけです。
Route::get('/foo', function()
{
$exitCode = Artisan::call('command:name', ['--option' => 'foo']);
//
});
Artisanコマンドをキューに入れれば、キューワーカーにより、バックグラウンドで実行されます。
Route::get('/foo', function()
{
Artisan::queue('command:name', ['--option' => 'foo']);
//
});
Artisanコマンドスケジューラー
今まで開発者は、コンソールコマンドを一つ一つスケジュールするために、Cronエントリーを毎回作成してきました。しかし、これは悩みの種でした。コンソールの実行スケジュールは、ソース管理されていませんでしたし、Cronのエントリを追加するため、その都度SSHでサーバーに接続する必要がありました。人生をより簡単に生きましょう。Laravelコマンドスケジューラーを使い、サーバーにCronエントリーを一つ追加するだけで、他に何も用意しなくてもLaravelだけで、コマンド実行スケジュールをスラスラと記述的に定義することができます。
コマンドスケジュールは、app/Console/Kernel.php
ファイルに記述します。このクラスの中に、schedule
メソッドが見つかるでしょう。始めやすいように、このメソッドの中に簡単な例を準備してあります。好きなだけジョブスケジュールをSchedule
オブジェクトに追加してください。唯一以下のCronエントリーだけ、サーバーに追加してください。
* * * * * php /path/to/artisan schedule:run 1>> /dev/null 2>&1
このCronエントリは、Laravelコマンドスケジューラーを毎分呼び出します。それにより、Laravelはスケジュールされているジョブを評価し、実行する必要のあるジョブを起動します。これ以上簡単にできません!
スケジュール例
他のスケジュール例をご覧ください。
クロージャーによるスケジュール
$schedule->call(function()
{
// タスクを行う…
})->hourly();
端末コマンドのスケジュール
$schedule->exec('composer self-update')->daily();
Cronの記述法により指定
$schedule->command('foo')->cron('* * * * *');
一定間隔の繰り返し
$schedule->command('foo')->everyFiveMinutes();
$schedule->command('foo')->everyTenMinutes();
$schedule->command('foo')->everyThirtyMinutes();
毎日行うジョブ
$schedule->command('foo')->daily();
24時間制で時間を指定し、毎日行うジョブ
$schedule->command('foo')->dailyAt('15:00');
一日に2回行うジョブ
$schedule->command('foo')->twiceDaily();
ウィークデーに行うジョブ
$schedule->command('foo')->weekdays();
週毎に行うジョブ
$schedule->command('foo')->weekly();
// 曜日(0から6)と時間を指定する週間スケジュール
$schedule->command('foo')->weeklyOn(1, '8:00');
月毎に行うジョブ
$schedule->command('foo')->monthly();
特定の曜日に実行するジョブ
$schedule->command('foo')->mondays();
$schedule->command('foo')->tuesdays();
$schedule->command('foo')->wednesdays();
$schedule->command('foo')->thursdays();
$schedule->command('foo')->fridays();
$schedule->command('foo')->saturdays();
$schedule->command('foo')->sundays();
ジョブの多重起動を防ぐ
デフォルトでは、以前の同じジョブが起動中であっても、スケジュールされたジョブは実行されます。これを防ぐには、withoutOverlapping
メソッドを使用してください。
$schedule->command('foo')->withoutOverlapping();
この例で、foo
コマンドは起動していない限り、毎分実行されます。
ジョブを実行する環境の指定
$schedule->command('foo')->monthly()->environments('production');
アプリケーションがメンテナンスモードでも実行することを指定
$schedule->command('foo')->monthly()->evenInMaintenanceMode();
コールバックの結果がTrueの時だけジョブを実行
$schedule->command('foo')->monthly()->when(function()
{
return true;
});
スケジュールしたジョブの出力をメール送信
$schedule->command('foo')->sendOutputTo($filePath)->emailOutputTo('foo@example.com');
注意: メール送信する前に、予めファイルへ出力を書き出しておく必要があります。
ジョブの出力を指定したファイルへ書き出し
$schedule->command('foo')->sendOutputTo($filePath);
ジョブを実行後に指定したURLへPing
$schedule->command('foo')->thenPing($url);
thenPing($url)
の機能を利用するにはGuzzle HTTPライブラリーが必要です。Guzzle 5をプロジェクトに追加するには、composer.json
ファイルへ以下の行を追加してください。
"guzzlehttp/guzzle": "~5.0"