メインコンテンツへスキップ

TCPモード

通常、SDK は各リクエストごとに新しい Copilot CLI プロセスを起動します(stdio モード)。 TCP モードを使うと、事前に起動した Copilot CLI サーバーへ接続できます。

TCPモードのメリット

  • パフォーマンス向上: プロセス起動オーバーヘッドがない
  • リソース共有: 複数の Laravel プロセスで同一 CLI サーバーを共有できる
  • プロセス管理: Laravel Forge / Laravel Cloud でバックグラウンドプロセスとして管理できる
  • デプロイ対応: デプロイ時の自動再起動に対応できる

使い方

1. Copilot CLIサーバーを起動

2. 環境変数を設定

これだけで、SDK は stdio モードから TCP モードに自動で切り替わります。
  • tcp:// は任意です。http:// やスキームなしでも動作します。
  • ポートだけの指定も可能です。その場合ホストは自動で 127.0.0.1 になります。
  • ホストだけの指定は 127.0.0.1 と localhost のみ有効です。その場合ポートはデフォルト 12345 になります。

設定ファイル

config/copilot.php で TCP 接続を設定できます。
COPILOT_URL(cli_url)と COPILOT_CLI_PATH を両方設定した場合は TCP モードが優先されます。

実行時のモード切り替え

通常は設定ファイルに従って TCP モードか stdio モードかが自動で選ばれます。 コード内で明示的に切り替えることも可能です。
サーバーによっては TCP モードで正常に動作しないことがあります。 キュー処理は TCP モード、HTTP リクエスト内の処理は stdio モードのように使い分けることも可能です。

Laravel Forge / Laravel Cloudでの運用

Laravel Forge

  1. Daemon を作成: Forge 管理画面で Daemon を作成します。
  2. 環境変数を設定: .env に COPILOT_URL を追加します。
  3. デプロイ時に再起動: デプロイスクリプトで Daemon を再起動します。
現在の Forge 環境では不要な場合があります。

Laravel Cloud

Laravel Cloud のワーカー機能を使い、バックグラウンドプロセスとして実行できます。 詳しくは Laravel Cloudでの使い方 を参照してください。

注意事項

セキュリティ

TCPサーバーは可能な限りローカルバインド(127.0.0.1)を使ってください。 外部公開する場合はファイアウォール設定を適切に行ってください。

再接続

現在のバージョンには自動再接続機能がありません。接続が切れると例外がスローされます。

接続の終了と起動エラー

Client::stop() は stdio モードでは SDK が起動したランタイムを停止します。TCP モードでは共有サーバーを停止せず、クライアントの接続だけを閉じます。 stdio の起動ハンドシェイクがタイムアウトした場合、例外には直近 8 KiB までのプロセス stderr が含まれます。診断出力には機密情報が含まれる可能性があるため、外部へ記録する前に内容を確認してください。

現在モードの確認

プログラム内でクライアントがどちらのモードか確認できます。

トラブルシューティング

接続できない

  1. Copilot CLI サーバーが起動しているか確認
  1. ポートが正しいか確認
  1. ファイアウォール設定を確認

タイムアウトエラー

config/copilot.php の timeout 値を増やしてください。
最新情報は GitHub リポジトリ を参照してください。
最終更新日 2026年10月26日