phpallのDocker版を作ってみた話

この記事はPHP Advent Calendar 2016の19日目のエントリです。

はじめに

PHPerは大体自分のマシンにPHPの各バージョンを入れて、バージョン間の挙動の違いなどを確認していると聞きました*1
しかし、各バージョンのPHPをビルドするのって時間が凄くかかってめんどくさいですよね。

なら各バージョンのPHPが動く Docker イメージを作ればいいのではとか思い、PHP 5.0.0 以降の各バージョン毎の Docker イメージを作ってみました。

https://hub.docker.com/r/hamaco/php-all/

使い方

まず、Docker イメージをダウンロードしておかないと話にならないので以下のコマンドで一括ダウンロードします。

$ docker pull -a hamaco/php-all

ただ、1イメージ辺り20MB程容量を喰う為、ディスク容量に余裕のない人は docker pull hamaco/php-all:7.1.0 みたいにして自分の必要なバージョンだけダウンロードしてきてください。
Docker イメージのダウンロードが完了したら、以下のリンクから docker-phpall をダウンロードしてきて PATH の通った所に置いてください。

github.com

そして、docker-phpall コマンドの引数に、実行したい PHP のコード or 実行したい PHP ファイルを渡してあげると、、、

$ docker-phpall '"0x1"=="1e0"'
php-5.0.0: bool(true)
php-5.0.1: bool(true)
php-5.0.2: bool(true)
php-5.0.3: bool(false)
php-5.0.4: bool(false)
php-5.0.5: bool(false)
php-5.6.28: bool(true)
php-5.6.29: bool(true)
php-7.0.13: bool(false)
php-7.0.14: bool(false)
php-7.1.0: bool(false)

こんな感じでダウンロード済みの Docker イメージの各バージョンで実行され、結果が出力されます。
上記コマンドの場合出力がないですが、phpall 同様に実行結果が空の場合 var_dump() で囲んで再実行しているのでその結果が出力されています。

まとめ

だいぶさっくり紹介ですまぬ…すまぬ…。

@hnw さんの https://github.com/hnw/phpall にあるインストールスクリプトを使用して PHP のインストールを行なっているので、基本的に phpall 互換になっていると思います。
docker-phpall の引数の挙動自体も、上記 phpall コマンドに合わせているつもりなので、同じような使いかたができると思います。もし、挙動が違うようでしたら PR なり、不具合報告なりして頂ければと。

あと、闇PHP勉強会で PHP5 以前のバージョンも作れとか圧があったのでもう少し改良予定です。そもそも新バージョンの PHP のビルド手動でやりたくないのでその辺もどうにかしないと…。