OTOBANK Engineering Blog

オトバンクはコンテンツが大好きなエンジニアを募集しています!

複数バージョンの PHP をインストールして使う

こんちは!@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