phpenv: シンプルなコマンドラインツールで複数のPHPビルドを管理
シンプルなPHPバージョン管理。なぜ自分の開発マシンで PHP アプリを実行できないのか疑問に思ったことはありますか?
ひと目でわかる
- これは何?
- .php-version ファイルを使ってプロジェクトごとにPHPを切り替えるバージョンマネージャー。rbenv の考え方に基づいています。
- 誰に向いている?
- README は phpenv を rbenv のクローンであり支援が必要だと説明しており、MIT ライセンスはソフトウェアを保証なしで提供しています。 phpenvでは、既存のPHP実行ファイルを直接置き換えるのではなく、rbenv由来のshimと複数ビルドを切り替える仕組みを確認します。
- 商用利用できる?
- できます。MIT は寛容なライセンスで、著作権表示とライセンス表示を残せば、使用・改変・販売が可能です。
- 今もメンテナンスされている?
- されています。最後のコミットは 47 日前です。
- 何の言語で書かれている?
- 主に Shell です(GitHub の言語統計による)。
回答はプロジェクトの GitHub データ(最終同期:2026年9月14日)と当サイトの分析に基づくもので、法的助言ではありません。
オープンソース詳細解説
複数のPHPカスタムビルドを簡素化
phpenv は、1台のマシンで複数のPHPビルドをインストールおよび管理するためのコマンドラインツールです。README では「シンプルなPHPバージョン管理」と説明され、人間のために設計されたと述べています。このプロジェクトはもともと rbenv と ruby-build に触発され、リリースのビルド、異なるリリースの管理、新しいリリースを繰り返しビルドするためのPHP固有の追加機能が含まれています。説明では、スクリプトが古いインタプリタでどのように動作するかを確認でき、PHPアプリが自分の開発マシンで実行されない問題を回避できると述べています。
phpenvでは、既存のPHP実行ファイルを直接置き換えるのではなく、rbenv由来のshimと複数ビルドを切り替える仕組みを確認します。対象アプリのcomposer要件と選択したPHPのconfigure条件が一致するかを先に調べ、READMEが支援を求めている点を保守リスクとして扱います。 この境界を押さえると、READMEの機能一覧を導入判断へ結び付けやすくなります。
バージョン選択の仕組み
インストール後、phpenv は PATH に自身を注入するため、php、php-fpm、その他のPHP実行可能ファイルを呼び出すと、まず phpenv が有効になります。次に、現在のプロジェクトディレクトリで .php-version という名前のファイルをスキャンします。見つかった場合、そのファイルがそのディレクトリで使用するPHPバージョンを決定します。phpenv は、~/.phpenv/versions/ の下にあるインストール済みバージョンの中からそのバージョンを探します。各バージョンディレクトリには、php、php-fpm、pecl、pyrus、php.ini など、独自のバイナリ、ライブラリ、設定ファイル、マニュアルページが含まれています。`phpenv local 8.3.13` のようなコマンドでバージョンを設定すると、現在のディレクトリの .php-version ファイルにバージョンが書き込まれます。異なるプロジェクトで異なるバージョンを使用でき、ディレクトリを変更すると phpenv が切り替わります。
インストールオプションとアップグレード方法
README には2つのインストール方法が記載されています。1つ目は macOS と Linux で Homebrew を使用する方法です。`brew install phpenv/tap/phpenv` を実行し、`eval "$(phpenv init -)"` をシェルプロファイルに追加します。2つ目は手動の GitHub チェックアウトです。リポジトリを ~/.phpenv にクローンし、~/.phpenv/bin を PATH に追加し、init 行を追加してシェルを再起動します。PHPバージョンをビルドするには php-build プラグインが必要で、$(phpenv root)/plugins/php-build の下に phpenv プラグインとしてインストールします。新しいPHPバイナリをインストールした後は、`phpenv rehash` を実行して shim バイナリを再構築する必要があるかもしれません。アップグレードは ~/.phpenv ディレクトリで git pull を使用して行います。
バージョンの選択: グローバル、ローカル、シェル
phpenv はバージョン選択に3つのスコープを提供します。`phpenv global` は ~/.phpenv/version にバージョンを書き込み、上書きされない限りすべてのシェルに適用されます。`phpenv local` は現在のディレクトリに .php-version ファイルを書き込み、そのプロジェクトのグローバル設定を上書きします。`phpenv shell` は現在のシェルの PHPENV_VERSION 環境変数を設定し、両方を上書きします。各コマンドは引数なしで現在設定されているバージョンを報告します。特別な名前 `system` は、PATH にあるシステムPHPを使用するように phpenv に指示します。README はまた、`phpenv versions` が既知のすべてのバージョンをリストしアクティブなものにアスタリスクを付けること、`phpenv version` が現在のバージョンとそのソースを表示すること、`phpenv rehash` がすべてのPHPバイナリの shim をインストールすること、`phpenv which` が指定されたコマンドの完全なパスを表示することを示しています。
PHPのビルドとウェブサーバーへの接続
README は、php-build が phpenv 互換のプラグインであり、PHPのコンパイルとインストールを行うと説明しています。デフォルトの設定オプション、バージョンごとの定義、および PHP_BUILD_CONFIGURE_OPTS や PHP_BUILD_INSTALL_EXTENSION などの環境変数を使用してビルドをカスタマイズします。ウェブサーバー統合には、PHP-FPM が推奨されます。PHPをビルドした後、~/.phpenv/versions/$VERSION/etc/init.d/php-fpm から php-fpm を起動するか、systemd ユニットを介して起動するか、手動で起動できます。デフォルトの php-fpm 設定は localhost:9000 をリッスンします。あるいは、php-build を介して Apache モジュール libphp.so をビルドし、LoadModule ディレクティブで使用できます。README には、php-fpm に接続するための Apache と NGINX の wiki 記事へのリンクがあります。
phpenv init の動作と環境変数
README には「Neckbeard Configuration」セクションがあり、`phpenv init -` が何を行うかを詳しく説明しています。shims パスを設定し、オートコンプリート(bash または zsh)をインストールし、shim を再生成し、プラグインがシェル変数を変更できるようにするシェルディスパッチャーをインストールします。`phpenv init -` を実行すると実際の出力を確認できます。phpenv は環境変数でも設定できます。PHPENV_VERSION はバージョンを指定し、PHPENV_ROOT はデフォルトで ~/.phpenv になり、PHPENV_DEBUG はデバッグ出力を有効にし、PHPENV_HOOK_PATH はフックパスをリストし、PHPENV_DIR は .php-version ファイルを検索する開始ディレクトリを設定します。
アンインストール、開発、ライセンス
phpenv を無効にするには、シェル起動設定から `phpenv init` 行を削除します。これによりバージョン切り替えが停止します。完全にアンインストールするには、phpenv ルートディレクトリも削除します。これによりインストール済みのすべてのPHPバージョンが削除されます。ソースは GitHub でホストされ、テストは Bats で実行されます。README は、このプロジェクトが本質的に rbenv の「検索と置換」クローンであり、支援が必要だと述べています。フォーク、プルリクエスト、バグ報告を歓迎しています。このソフトウェアは MIT ライセンスの下でライセンスされており、著作権および許可通知を含めることを条件に、コピーの使用、複製、変更、統合、公開、配布、サブライセンス、販売の権利を許可します。ライセンスは、ソフトウェアが「現状のまま」提供され、いかなる種類の保証もないことを述べています。
編集部の結論
README は phpenv を rbenv のクローンであり支援が必要だと説明しており、MIT ライセンスはソフトウェアを保証なしで提供しています。 phpenvでは、既存のPHP実行ファイルを直接置き換えるのではなく、rbenv由来のshimと複数ビルドを切り替える仕組みを確認します。対象アプリのcomposer要件と選択したPHPのconfigure条件が一致するかを先に調べ、READMEが支援を求めている点を保守リスクとして扱います。 導入対象はこの確認結果で決めます。
コミュニティノート