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

Xdebug が重い!それなら PHPDBG で CI を高速化だ〜!

こんにちは、毎度おなじみ @riaf です。ここのところ、私しかブログ記事を書いていませんが、社員が居ないわけではありません。きっとそのうち書いてくれると信じています (まじ、誰かホントに書いてくれよ...)。

今日はタイトル通り、PHP7+PHPUnit4.8 から PHPDBG でのカバレッジ出力がサポートされているので、これまで CI でのカバレッジ出力に時間かかってしまって辛かった部分を解消したいと思います。

準備するものはこちら!

  • PHP7
  • CircleCI (当ブログおなじみ!や、別に CircleCI である必要はないですよもちろん)

つまり、circle.yml

machine:
    php:
        version: 7.0.4

と書き、

test:
    override:
        - phpdbg -qrr vendor/bin/phpunit --coverage-html $CIRCLE_ARTIFACTS/coverage

こんな感じで PHPDBG を使うようにしてあげるだけでした。(もっとボリュームのあるブログになる予定だったのに!)

CircleCI にはあらかじめ phpdbg がインストールされているので、その他に必要な準備もなくあっさりと解決しました。

カバレッジを出力した後は、php-coveralls とか使って Coveralls にまとめてもいいし、$CIRCLE_ARTIFACTS の下に html を置いてもいいし (上の例)、好きにすればいいですね。

というわけで、PHP7 を前提にした記事を書きましたが、来月に札幌で開催される OSC 北海道で PHP のお話をすることになりました。やることがなくてどうしようもないようでしたら、ぜひ遊びに来てみてください!

PHP BLT #4 に参加してきました

@riafです! 先週の木曜日ですが、株式会社メルカリで開催されたPHP BLT #4まとめブログ枠で参加してきました。

何かネタを作って LT 申し込もうとしてたんですが、ちょうど枠が埋まっていたの(と、エンジニアブログのネタを探していたの)で、初めてのまとめ枠でした。 ブログを書くより、5分のネタ作る方が簡単だなって..思います...。

さあ、気を取り直して早速まとめていきますよ!

会場はメルカリ

メルカリは六本木ヒルズにあります。広くて素敵なオフィスです。余ってる場所ほしい。

続きを読む