はじめに
LaravelのProcessファサードは、Symfony Processコンポーネントの薄いラッパーです。 シェルコマンドをLaravelアプリケーションから呼び出し、その結果を扱うための簡潔なAPIを提供します。プロセスの起動
Process::run() を使うと、コマンドを同期的に実行して結果を取得できます。
ProcessResult インスタンスには、結果を確認するための各種メソッドが用意されています。
失敗時に例外をスローする
終了コードが 0 より大きい場合にIlluminate\Process\Exceptions\ProcessFailedException をスローさせるには、throw() または throwIf() を使います。
プロセスオプション
作業ディレクトリ
path() で作業ディレクトリを指定できます。省略すると現在のPHPスクリプトの作業ディレクトリが使われます。
標準入力
input() でプロセスの標準入力にデータを渡せます。
タイムアウト
デフォルトは60秒です。timeout() で変更できます。タイムアウトするとプロセスが中断され、ProcessTimedOutException がスローされます。
CarbonInterval ヘルパー関数も使えます。
forever() を使います。
環境変数
env() で環境変数を追加または上書きできます。システムの環境変数は自動的に継承されます。
false を指定します。
出力の無効化
大量の出力が不要な場合はquietly() でメモリ消費を抑えられます。
リアルタイム出力
run() の第2引数にクロージャを渡すと、出力をリアルタイムに受け取れます。
パイプライン
Process::pipe() を使うと、あるコマンドの出力を次のコマンドの入力として渡せます。
as() でキーを付けると、出力クロージャでどのプロセスからの出力かを判別できます。
非同期プロセス
Process::start() を使うと、プロセスを非同期で起動できます。プロセスが実行中の間、アプリケーションは他の処理を続けられます。
プロセスIDとシグナル
id() で実行中プロセスのOSプロセスIDを取得できます。
signal() でプロセスにシグナルを送れます。
非同期プロセスの出力
実行中にlatestOutput() と latestErrorOutput() を使うと、前回取得以降の差分出力を取得できます。
waitUntil() を使います。
非同期プロセスのタイムアウト確認
ループ内でensureNotTimedOut() を呼ぶと、タイムアウトしていた場合に例外がスローされます。
並行プロセス
Process::pool() を使うと、複数のプロセスを並行して実行できます。
concurrently() を使うと、プールをすぐに開始して結果を待つ処理を1行で書けます。
プロセスへの名前付け
as() で各プロセスに文字列キーを付けると、結果の取得が明確になります。
テスト
プロセスのフェイク
Process::fake() を使うと、実際のシェルコマンドを実行せずにテストできます。
特定のコマンドをフェイクする
ワイルドカードやコマンド文字列をキーにして個別にフェイクを設定できます。シーケンスのフェイク
同じコマンドを複数回呼び出す場合、返す結果の順序を指定できます。アサーション
| メソッド | 説明 |
|---|---|
Process::assertRan('command') | コマンドが実行されたことを検証 |
Process::assertNotRan('command') | コマンドが実行されなかったことを検証 |
Process::assertRan(fn) | クロージャで実行内容を詳細に検証 |
Process::assertRanTimes('command', 3) | コマンドが指定回数実行されたことを検証 |
予期しないプロセスの防止
Process::preventStrayProcesses() を呼ぶと、フェイクが設定されていないコマンドが実行された場合に例外がスローされます。
関連ページ
Artisanコンソール
カスタムコマンドを作成してプロセスを呼び出す
キュー
非同期処理との比較