この記事はlaravel/cpxのREADME.mdとUPGRADE.mdに基づく情報です。v2.0.0(2026年7月24日リリース)時点の内容です。
cpxとは
cpx は、Composerパッケージに含まれるコマンドをインストールせずに実行できるツールです。npmにおけるnpxのComposer版と考えると分かりやすいです。
なぜ必要か
composer global require で個別ツールをインストールする方法には以下の課題があります。
- グローバル依存関係同士が競合する(
nikic/php-parserやsymfony/consoleなど共通依存を使うツールで発生しやすい) - 同じツールの異なるバージョンをプロジェクトごとに切り替えたい
- 長期運用時にグローバルパッケージの更新を忘れる
- 一度しか使わないツールをグローバルインストールしたくない
v2.0での全面リライト
cpxは v2.0 で全面的に書き直され、自己完結型のPHARとして配布されるようになりました。基本的な使い方(cpx <package-name> <command> [arguments])や ~/.cpx キャッシュディレクトリはそのまま維持されています。1.xは開発が凍結されており、バグ修正・セキュリティ修正を含め今後のリリースはありません。
アップグレードはグローバルインストールし直すだけです。
v2.0の新機能
ローカルバイナリの優先実行
npxと同様に、プロジェクトに既にインストールされているバイナリがあれば、分離コピーをインストールする前にそちらを優先して実行します。カレントディレクトリから上に遡って最も近いComposerプロジェクトを探し、vendor/bin(デフォルトのbin-dir)内の一致するバイナリを実行します。
--skip-local を使います。
ローカルパッケージディレクトリの直接実行
開発中のComposerパッケージのディレクトリを直接指定して、そのバイナリを実行できます。composer.json が必要で、依存関係は事前に vendor/autoload.php にインストールされている必要があります。cpxはこの場合、Composerの実行やパッケージのコピー・キャッシュを行いません。
cpx exec と cpx tinker
PHPコードを素早く実行する複数の方法が用意されています。
Laravelプロジェクト内では
cpx exec がconfig・facade・.envを含めてフルにアプリケーションをブート($appが使用可能)し、cpx tinker はプロジェクト自身の php artisan tinker を実行します(laravel/tinkerがインストールされている場合)。それ以外の場所ではPsySHシェルが起動します。
スクリプト内では cpx_require('vendor/package')(1.xのcomposer_require()から改名)でパッケージをその場でオートロードできます。
エイリアス機能
長いパッケージ名を覚えなくて済むよう、独自のショートカットを定義できます。非対話モードとJSON出力
cpxはlaravel/agent-detectorによるAIエージェント検出、標準入力のリダイレクト、--no-interaction/-n フラグから非対話環境を自動検出します。非対話モードでは、installed・aliases・alias・unalias・clean・update などcpx自身の管理コマンドが整形テキストの代わりに1行のJSONを返します。対話端末からでも --json を渡せば同じ出力を得られます。
v1.xからの主な変更点(コマンド)
関連ページ
~/.cpxディレクトリのキャッシュや旧バージョンパッケージは自動的に新形式へ移行されますが、バージョン制約付きで実行していたパッケージは新しいディレクトリ名で管理されるため初回のみ再インストールされます。不要になった1.x時代のコピーは cpx clean で削除できます。
laravel/cpx リポジトリ
ソースコードと最新のREADMEはこちら。
cpx 2.0 アップグレードガイド
1.xから2.xへの詳細な移行手順。