Skip to main content

はじめに

laravel/multiplex は、複数のコマンドを同時に実行するためのターミナルUI(TUI)です。Laravel 13のphp artisan devから利用され、PHP開発サーバー、キューワーカー、ログ監視、Viteなど、ローカル開発に必要なプロセスを1つのターミナルで管理できます。 タブごとにプロセスの出力を表示でき、出力の検索とスクロールにも対応します。終了時には各プロセスの出力が通常のターミナルのスクロールバックへ書き戻されるため、TUIを終了した後もログを確認できます。

インストールと直接実行

Laravelアプリケーションではphp artisan devが必要な設定を行うため、通常はMultiplexを直接インストールする必要はありません。単独で使う場合は、Node.js 22.13以降を用意してnpmでインストールします。
コマンドはlabel,command形式で渡します。

TUIとインラインモード

標準入力と標準出力がTTYの場合はタブ形式のTUIが起動します。sでストリーム表示に切り替え、/で出力を検索し、rで選択中のプロセスを再起動できます。qで終了します。 TTYがないCIやパイプ処理では、インラインモードに自動的に切り替わります。各行にプロセスのラベルが付き、出力が到着した順に表示されます。明示的にインラインモードを使う場合は-iを指定します。
インラインモードでは最後のプロセスが終了すると実行も終了し、コマンドの失敗を終了コードに反映します。JSON形式で処理結果を扱う場合は--jsonを使います。

自動再起動と終了処理

クラッシュしたプロセスは1秒待ってから最大5回まで自動的に再起動されます。起動から1秒以内に終了したプロセスは、実行ファイルの不足やポート競合など、最初から起動できていない可能性があるため再試行されません。ビルドやマイグレーションのような一度だけ実行するコマンドでは--no-restartを指定します。
Multiplexは終了時やシグナル受信時に子プロセスのプロセスグループを終了させます。開発サーバーだけが残ってポートを占有する状態を防ぐため、複数プロセスをまとめて停止できます。

注意点

子プロセスには標準入力が渡されません。そのため、php artisan tinkerやマイグレーションの確認プロンプトなど、入力を要求するコマンドはMultiplexから実行できません。対話的なコマンドは別のターミナルで実行してください。 MultiplexのプログラムAPIも提供されていますが、コマンドはsh -cで実行されます。設定ファイルやリクエストなど、信頼できない値をコマンド文字列に埋め込まないでください。

参考資料

最終更新日 2026年8月13日