こんちは!@riaf です。
最近、 php5.x と php7.0 向けの開発を並行してやっているので、OSX 上で複数の PHP をインストールして開発しています。
ついうっかり composer update なんてものを実行してしまったので、その待ち時間でどういう構成にしているか、という記事でも書いてみようかと思いました。
こういった場面では、よく phpenv を使う方法が紹介されますが、内部的に rbenv を使っていたり、そもそも言語ごとに *env
用意すんのかよ..とか、ちょっと気に食わないところがあって、これまでは Vagrant を使ってアプリ毎に異なる環境を用意したりしていました。
しかし去年の秋頃から、MacBook (12インチのやつ) を使うようになったので、Vagrant で VM 立てて、環境切り替えて、、というのが若干ヘビーで、バッテリーで戦いたい時にはちょっと辛くなってきていたので、新たな作戦を考えることにしました。
ここでは
- phpenv は出来れば使いたくない
- アプリケーション毎に PHP のバージョンを指定したい
- ウェブサーバーは PHP のビルトインウェブサーバーで OK
という条件を満たしたいということにします。
さて、まず複数の PHP を用意するところですが、そこはまあ、php-build で良いでしょう。 例えば ghq を使っていれば、
ghq get php-build/php-build ghq look php-build ./install.sh
とするだけでセットアップできますね。
OSX を使っていて、大雑把にバージョンを指定出来れば良いのであれば、Homebrew/homebrew-php でも良いかもしれません。 複数バージョンをインストールするときにはすでにインストールしてある php を unlink すれば良いので、楽チンです。
あとはアプリケーション毎にバージョンを指定出来れば目的達成ですね。 PHP の実行はシェルで行っているので、環境変数 PATH を切り替えられれば良さそうです。
ということで、みんな大好き direnv を使います。
OSX + Homebrew ユーザーなら brew install direnv
で一発ですね!
アプリケーションのディレクトリで direnv edit .
して、
追記: PATH_add を使ったほうがいいですね!詳しくはコメントを!
# php-build 使ってるとき PATH=$HOME/.php/{PHPのバージョン}/bin:$PATH # homebrew-php 使ってるとき PATH="$(brew --prefix homebrew/php/php56)/bin:$PATH"
のようにしてやれば OK ですね!
おまけ
まっさらな OSX 環境で php-build を実行すると openssl が無いとか libjpeg が無いとか、ビルドが毎回こけてはライブラリを入れて、再度実行、の繰り返しでだいぶ消耗します。
今後の自分のためにも、(不要なものもあるかもしれないけど) 事前にやっておくと幸せになれるコマンドを貼っておきます。
brew install autoconf automake bison re2c libjpeg libpng libmcrypt libxml2 brew link --force libxml2 openssl