はい。こんにちは。なんとなく、水戸市からお送りします。
川原です。

php-build+phpenv という環境を揃えれば、
PHPの version を管理できること (複数バージョンを切り替えて使うなど)
が、可能なのはしっているけど、
そのために、いくつも git clone するのが嫌なのと、
php-build がいろいろとイケてなかったので、せっかくなので自分なりの
管理ツールを作ったよー。

その名も、php-nabe である。
https://github.com/kawahara/php-nabe

作り始めた時、鍋食いたかったのでこの名前にした。
無理やり、意味付けしろと言われたら
maNAgement a Brilliant Environment
とか、どうよ。超無理矢理。

使い方

インストール

ホームディレクトリへのインストール例。

$ mkdir ~/.php-nabe
$ cd ~/.php-nabe
$ git clone https://github.com/kawahara/php-nabe

$ export PATH=$HOME/.php-nabe/php-nabe/bin:$PATH

PHP5.4.1インストールの例 (Debian)

これだけ?

$ sudo apt-get install build-essential autoconf autobuild bison libtool flex re2c
$ php-nabe install 5.4.1
$ php-nabe use 5.4.1
$ php -v 
PHP 5.4.1 (cli) (built: Apr 29 2012 13:14:03) 
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies

目標

PHPをビルドするために、phpを必要としない。

この手の、PHPのバージョン管理ツールは、実に多種多様あって、phpbrew なんていうのもあって、機能面ではなかなかイケているのだが、残念なことに php をビルドするために、php が必要。 必要な、ライブラリだけそろえて、ササッとビルドしてしまえるようにしたい。
というわけで、php-nabe自体は bash で動くようにした。あと動作に必要な物は、 git など。 (理由は後述)

簡単なExtensionのインストール

PHPのかったるい Extension のインストールを楽にしたい。

以下のように、pecl とか、 php-src/ext かを意識しないでも php extension のビルドができるようにした。ついでに、 ext-install が終わると、勝手に extension名.ini に extension=extension名 をやってくれる、便利かもしれない機能をつけた。
これは、後で設定ファイル追加しないオプションをつけておく。

  $ php-nabe ext-install mbstring
  $ php-nabe ext-install mongo

mysqlnd に関しては、デフォルトで組み込まれるが、 php-nabe install 時に、 –disable-mysqlnd オプションを付加することにより、組み込まないことも可能。

インストール可能バージョン管理リストを持たない

pvm を始めとする、多くの PHP バージョン管理システムでは、スクリプト中にバージョン情報についてのリストを持っている。これでは、phpのバージョンが新しく出るたびに更新しなければならない。(のは僕が面倒くさい。)
ということで、php-nabe の大方針として、 git を使うことにして、タグからソースコードを参照するようにしている。

composerとの統合

まだできてないけど、今後やりたい。

composer とは、PHP製ライブラリの依存管理をやってのける便利なものである。オートロードを自動的になんとかしてくれたりと、モダンなPHPをやっている人にとっては至りつくせりなプロダクトである。Symfony2.1 ではこれを採用するとのこと。まだまだ、開発段階でかなり動きが激しいが、十分に活用することができる。

既に、

  $ php-nabe composer-install

をすると、composer が手に入るようにはしているが、今後は、 package.json 中に書いてある Extension を php-nabe によって、extension ごと自動的な依存管理をできるようにしたい。これは、PHPUnit のテスト実施において、余計な Extension を追加しない状態でテストしたい場合などに、非常に有効な気がしている。

というわけで、すでに自分の環境については、これで構築してみたよー。
まだまだ、すっからかんな状態なので、鍋に具を投入したい方は、Pull Request をいただければ、
奉行である私が投入します。

Posted in PHP.

Leave a reply

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>