手元で任意のバージョンのPHPをビルドして使い分けるプロジェクトとして、phpenv+php-buildとphpbrewの2つが有名かと思います。僕はphpenv+php-build派なんですが、phpbrewを少しだけ触ってみたので、両者の違いをまとめてみます。
phpenv+php-buildの良いところ
- bashスクリプトで書かれているので多くの環境で前準備なしで動く
- シェルの補完をサポートしている
-
phpenv install [TAB]
で候補が出てくる
-
- 最近サブコマンドとしてupdateとuninstallが実装された
- 気軽さの意味でphpbrewに追いついた感
- PHPのalphaやbetaやRCのビルドレシピを配っている
- リリース後1日から2日くらいのうちに降ってくる
- 最新snapshotのビルドレシピもある
- 最新機能がすぐ試せる
- 独自パッチを適用する指定をレシピに書ける
- 古いPHPのビルドに必要なパッチがphp-buildに含まれている
- メジャーどころの拡張モジュールは標準で有効
- XdebugやOPcacheあたりをデフォルトで入れてくる
- 広く使われている
- Travis CIやCircleCIなどで複数PHPバージョンを提供するのに使われている
phpenv+php-buildのイマイチなところ
- phpenvの実装が複数あって、どれを使ったらいいか初見ではわからない
- CHH/phpenvを使うとrbenvとコンフリクトする人が多い
- 内部的にrbenvを使っているため
- うまく.bashrcや.zshrcに記述すればコンフリクトしない気がするけど…
- 絶対にrbenvとコンフリクトしないよう改造したphpenvもある
- phpenvをインストールした後、改めてphp-buildをインストールする必要があって面倒
- コマンドライン指定だけではconfigureオプションの変更ができず、レシピファイルを書き換える必要がある
- レシピを記述するdefinitionファイルの文法が独特で若干ハードルが高い
phpbrewの良いところ
- 1コマンドで動くのでインストールが簡単
- configureオプションの変更がコマンドラインから簡単に出来る
- メジャーどころの拡張モジュールは標準で有効
-
$HOME/.phpbrew
以下のディレクトリ構成がシンプルでわかりやすい - シェルの補完をサポートしている
-
phpbrew install [TAB]
で候補が出てくる
-
phpbrewのイマイチなところ
- phpbrew自体の動作に、自身がビルドしたのとは別のPHPが必要
- alphaやbetaやRCのビルドレシピを配っていない
- 最新snapshotのビルドレシピもない
- XdebugやOPcacheあたりは明示的に入れないと入らない
-
phpbrew install 5.5.5 +opcache
などとする - 最近のPHPならOPcacheをデフォルトで有効にしておいて欲しい
- PHPバージョンごとにXdebugの適切なバージョンが違うので自分で選ぶのは案外面倒
-
- configureオプション違いで同一バージョンを複数共存させたい場合のやり方がわからない