Skip to main content

はじめに

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::preventStrayProcesses() を呼ぶと、フェイクが設定されていないコマンドが実行された場合に例外がスローされます。

関連ページ

Artisanコンソール

カスタムコマンドを作成してプロセスを呼び出す

キュー

非同期処理との比較
最終更新日 2026年4月13日