最近イチオシの php-buildphpenv について紹介してきました.

内容はほぼ最近のブログ記事をまとめた感じです.

一度ブログに書いたものを敢えて発表ネタにしたのにはいくつか理由があります.
(もちろん, 一度記事にまとめたネタなのでスライドに起こしやすい, というのもありますが…)

  • もっと色んな人に知って欲しい
  • もっといろんな人に使って欲しい
  • まだまだこなれていない部分があり, フィードバックが必要
  • フィードバックやパッチによりもっと改善されるはず

というわけで皆さんどんどん使いましょう.

類似のツールについて

php-build および phpenv と類似の機能をもったツールは他にもあります.
勉強会でも, 例えば phpall とはどう違うのか, という質問がありました.

結論から言うと, 私は他のツールは特に使ったことが無いのでよくわかりません.
ですが, もともと rbenv は Ruby コミュニティではかなり人気のツールですし, 便利な機能はいろいろと揃っており, 比較的失敗の無い選択肢だと考えています.

また, phpall の違いとして, phpall は各バージョンのバイナリをそれぞれ php-5.2.8 といった, バージョン番号付きのファイル名にしているようですが, phpenv は php コマンド自体を自由に切り替えます.
特定のコードを複数のバージョンで一気に実行する, というときには phpall が便利そうですが, ライブラリの開発等には phpenv の方が適していると思われます.
また, phpenv においては pyrus, phar, phpunit といったコマンドも各バージョンごとに試すことができる, というのも大きな利点です.

phpenv のプラグイン機能について

元々, これまでのブログ記事をまとめただけの発表にするつもりでしたが, ひとつだけおもしろい機能を見つけたので, そこだけ新ネタです.
phpenv の元になっている rbenv にはプラグインという機能があり, 専用のディレクトリにシェルスクリプトを配置するだけで簡単にサブコマンドを登録できる, というものです.
当然 phpenv でも使える機能です.

phpenv each によるコマンドの一斉実行

rbenv のプラグインとして公開されているものの中で, とりあえず rbenv-each というものをつかってみました.
これは rbnev (もしくは phpenv) の管理下にある全てのバージョンのバイナリで, 指定したコマンドを実行する, というものです.

とりあえず, php -v によるバージョンの確認を試してみました.

phpenv each によるバージョンの一斉確認

phpenv each によるバージョンの一斉確認

これ自体はあまり意味の無い例ですが, 例えば PHPUnit によるユニットテストを, 複数のバージョンの PHP で一斉に実行できるすれば, ライブラリ作者に取ってはかなり便利なのではないでしょうか.
それについてはいずれ調べて, また記事にしたいと思います.

このように, php-buildphpenv にはまだまだ便利な使い方がたくさんあるはずです.
利用者が増えることで, そういったノウハウが発掘され, 共有されることを心から願います.

最後になりますが, 今回の勉強会の主催の @gusagi さん, そして会場提供の株式会社 VOYAGE GROUP さん, 楽しい勉強会を本当にありがとうございました.

, ,

phpenv とは

phpenv

CHH/phpenv – GitHub

複数のバージョンの PHP を管理し, コマンドで簡単に切り替えるためのものです.
Ruby でいう rbenvRVM, Perl でいうところの perlbrew にあたるものです.

なお, phpenv の中身は rbenv を流用することで動いています.

インストール

まず, 以下のコマンドでインストールスクリプトを実行します.

$ curl https://raw.github.com/CHH/phpenv/master/install.sh | sh

中では rbenv を git clone していたりするので, Git をインストールしている必要があります.

上記コマンドが成功したら, ~/.bashrc もしくは zsh 使いなら ~/.zshrc に以下のコマンドを追記します.

あとはいま編集したファイルを再度読み込み直すことでインストールは完了です.

# bash の場合
$ source ~/.bashrc

# zsh の場合
$ source ~/.zshrc
# phpenv
export PATH=$HOME/.phpenv/bin:$PATH
eval "$(phpenv init -)"

rbenv をインストールしている場合

先にも書きましたが, phpenv は rbenv を利用した作りになっています.
その関係もあって, PATH の設定は rbenv が phpenv よりも先になっていないと, 正常に動作しません.
~/.bashrc や ~/.zshrc の設定は, 例えば以下のようにする必要があるので注意が必要です.

# rbenv & phpenv
export PATH=$HOME/.rbenv/bin:$HOME/.phpenv/bin:$PATH
eval "$(rbenv init -)"
eval "$(phpenv init -)"

PHP のインストール

phpenv は PHP の環境を管理するためのものであって, RVM や perlbrew のようにインストールするための機能はありません.
その点は rbenv も同様です.

rbenv では ruby-build を使って Ruby をインストールしますが, phpenv では php-build というツールを使うことができます.

php-build のインストールについては以下の記事を参考にしてください.

php-build で PHP 5.4.0 beta1 をビルドする

以下は php-build のインストールを済ませた, という前提で進めます.

phpenv で管理できるようにインストールするには, ~/.phpenv/versions ディレクトリ内にサブディレクトリを作って, それぞれのバージョンの PHP をインストールする必要があるので, 以下のようにします.

$ php-build 5.4.0beta2 ~/.phpenv/versions/5.4.0beta2

インストールが完了すれば phpenv の管理下に置かれることになります.

$ phpenv versions
  5.4.0beta1
* 5.4.0beta2 (set by /home/yuya/.phpenv/version)

使用する PHP のバージョンを切り替える

以下のようなのコマンドで, インストール済みの PHP のバージョンを切り替えることができます.

$ phpenv global 5.4.0beta2

その他, 使い方は基本的に rbenv と同様なので, そちらを参考にしてください.

sstephenson/rbenv – GitHub

phpenv と php-build の連携

php-build でのビルドでも充分に簡単ですが, せっかくなので phpenv と連携させてもっと簡単にしてみましょう.
以下のようなコマンドだけで好きなバージョンの PHP をビルドし, phpenv の管理下にインストールできるようにします.

$ phpenv install 5.4.0beta2

rbenv でも ruby-build と連携することで rbenv install というサブコマンドを利用することができるようになります.
そこで, rbenv install するためのスクリプト rbenv-install を流用して, こんなものを用意してみました.

このスクリプトを ~/.phpenv/libexec/rbenv-install として保存するだけでインストールは完了です.
これで先のような phpenv install サブコマンドが使えるようになっています.

, ,

php-build とは

コマンドライン一発でソースコードのダウンロード, 展開, ビルドまで自動でやってくれるツールです.

ところで Ruby にも ruby-build というツールがありますね.

環境について

最悪壊れても困らない環境で試すことをオススメします.
今回は開発用 VM 上の Ubuntu 10.10 で作業を行いました.

php-build のインストール

GitHub の php-build プロジェクト上で特にインストール方法について説明されていません.
ここではホームディレクトリ上の .php-build というディレクトリにインストールし, そこにパスを通す, という方法を採ります.

.zshrc の部分については, Bash を使っている場合は .bashrc に置き換えてください.

以下のようにコマンドを実行して, 同様の結果が得られれば php-build のインストールは完了です.

php-build では各バージョンの定義ファイルを元にビルドを行うのですが, これは定義ファイルの一覧です.
ここに列挙されているバージョンであれば php-build でインストール可能です.

5.4.0 beta1 用の定義ファイルの追加

GitHub に置いてますので, 以下のようにして追加することが可能です.

再度 php-build –definitions を実行すると, そこに 5.4.0beta1 が追加されていることを確認できるはずです.

依存パッケージのインストール

PHP 本体をビルドする前に, 依存するパッケージをいろいろとインストールします.

比較的クリーンな状態での Ubuntu 10.10 で PHP 5.4.0 beta1 をインストールするには, トライアル & エラーを繰り返した結果, 以下のようなパッケージが必要なことがわかりました.

依存パッケージが足りずにビルドにコケるようであれば, エラーメッセージから判断して, 適宜追加する必要があります.

PHP 5.4.0 beta1 のビルド

以下のようなコマンドを実行して, あとはひたすら待ちます.
第一引数が定義ファイルの名前で, 第二引数が出力ディレクトリです.
ディレクトリの指定はフルパスで行う必要があるようなので, 注意しましょう.

いろいろ warning が出るけど, とりあえず気にしない.

実行してみる

以下のようなコマンドを実行し, 同様の結果が得られればとりあえず成功です.

Short Array Syntax が取り入れられていることがわかりますね.

次回は phpenv と連携させて, もう少し幸福追求してみようと思います.
あと, make test とかする方法があると嬉しいですね…

,