PyrusでプロジェクトローカルなPEARライブラリインストール : PHP Advent Calendar jp 2011 Day 10
PHP Avent Calendar jp 2011の10日目、[twitter:@calpo22]です。
→前日「includeとextractの組み合わせでテンプレート処理を作る。PHPのAdvent Calender #9 - それマグで!」
※追記 2012/09/16
PHPが古いとかの事情がなければ、今はライブラリの依存管理にはcomposer使うのがいいと思います。
取り急ぎ手元でPHPUnit使いたいとかであれば http://qiita.com/items/81085381c4281e498cde で一発。
みなさんPEAR使ってますか?
PEARのライブラリを普通にインストールすると/usr/binとかに入るんですが、そうじゃなくて自分用に~/binに入れたいとか、フレームワークのvendorディレクトリに入れたいとかありますよね。
これで結構苦労していたところ、今年のPHPカンファレンスで「Pyrus使うと捗るよ」みたいな話を聞きくことができました。
pearの後継となるパッケージマネージャらしく、「なにそれすごい!これでかつる!」と期待に胸をふくらませつつ家に帰って試してみたところ・・・
とにかく日本語の情報が全然無い
という状態でなんか凹みました。
でも、Pyrusだとpearよりもプロジェクトローカルなライブラリのインストールがやりやすいです!
ということでPyrusによるPEARライブラリインストールのご紹介。
まずは俺ローカルなPEARライブラリインストール
~/mypyrusに自分用のPEARライブラリをインストールしてみます。
(必ずしも俺ローカルが必要なわけではないですが、整理しやすかったのでこのようにしています)
pyrus.pharダウンロード
pyrus.phar自体はどこにあってもいいんですが、とりあえず~/mypyrusに入れておくことに。
$ mkdir mypyrus $ cd mypyrus/ $ wget http://pear2.php.net/pyrus.phar
pyrusの初期設定
最初にpyrusを実行すると初期設定が行われ、パッケージのインストール先のディレクトリ等が設定されます。
$ php pyrus.phar install Pyrus version 2.0.0a3 SHA-1: BE7EA9D171AE3873F1BBAF692EEE9165BB14BD5D Pyrus: No user configuration file detected It appears you have not used Pyrus before, welcome! Initialize install? Please choose: yes no [yes] : # ↑yesなのでそのままEnter Great. We will store your configuration in: /home/calpo/.pear/pearconfig.xml Where would you like to install packages by default? [/home/calpo/mypyrus] : # ↑にインストールなのでそのままEnter $ ls ~/.pear/pearconfig.xml /home/calpo/.pear/pearconfig.xml
~/.pear/pearconfig.xmlが作成されます。
config-showコマンドで設定を確認できます。
$ php pyrus.phar config-show Pyrus version 2.0.0a3 SHA-1: BE7EA9D171AE3873F1BBAF692EEE9165BB14BD5D Using PEAR installation found at /home/calpo/mypyrus System paths: php_dir => /home/calpo/mypyrus/php ext_dir => /usr/lib64/php/modules cfg_dir => /home/calpo/mypyrus/cfg doc_dir => /home/calpo/mypyrus/docs bin_dir => /usr/bin data_dir => /home/calpo/mypyrus/data ・ ・
bin_dirが/usr/binになっているので自分用に変更しましょう。
(~/mypyrus/.config が生成されます)
$ php pyrus.phar set bin_dir /home/calpo/mypyrus/bin $ php pyrus.phar config-show ・ ・ bin_dir => /home/calpo/mypyrus/bin ・ ・
PHPUnitインストール
準備ができたので俺専用PHPUnitをインストールしてみましょう。
$ php pyrus.phar set auto_discover on $ php pyrus.phar channel-discover pear.phpunit.de $ php pyrus.phar install phpunit/PHPUnit Pyrus version 2.0.0a3 SHA-1: BE7EA9D171AE3873F1BBAF692EEE9165BB14BD5D Using PEAR installation found at /home/calpo/mypyrus Sorry, phpunit/PHPUnit references an unknown channel pear.symfony-project.com for pear.symfony-project.com/YAML Do you want to add this channel and continue? Please choose: yes no [yes] : # ↑途中チャンネルの追加について問われます ・ ・ pear.phpunit.de/PHP_Invoker depended on by pear.phpunit.de/PHPUnit
どん!
入りました。
$cd ~/mypyrus $ ls bin cache docs downloads php pyrus.phar $ ls bin/ phpunit $ ls php/ File PHP PHPUnit SymfonyComponents Text
include_pathの設定
早速bin/に入ったphpunitを実行しようとしても、必要なディレクトリがinclude_pathに設定されていないので怒られます。
$ cd ~/mypyrus/bin $ ./phpunit Warning: require(PHPUnit/Autoload.php): failed to open stream: No such file or directory in /home/calpo/mypyrus/bin/phpunit on line 42 $ php -i | grep include_path include_path => .:/usr/share/pear:/usr/share/php => .:/usr/share/pear:/usr/share/php
今回はお手軽に~/mypyrus/bin/phpunit に設定を追加して、~/mypyrus/phpをinclude_pathに入れてしまいます。
<?php // ↓をrequireの前に追加 set_include_path( realpath(dirname(__FILE__).'/../php') . PATH_SEPARATOR . dirname(__FILE__) . PATH_SEPARATOR . get_include_path());
ただライブラリによってbin/に入るファイルがphpスクリプトだったりシェルスクリプトだったり、PHP_CLASSPATHみたいな独自の環境変数を設定する必要があったりとなんかもう・・・
php.iniが変更できるならそれが一番確実です。
$ cd ~/mypyrus/bin $ ./phpunit --version PHPUnit 3.6.4 by Sebastian Bergmann.
いぇーい
プロジェクトローカルなPEARライブラリインストール
続いて適当なプロジェクトのvendorディレクトリにプロジェクト専用PEARライブラリをインストールしてみます。
ディレクトリの設定
setとかのコマンドの前にディレクトリを指定してあげると、そこローカルな作業と設定ができます。
(そのディレクトリに.configが出来上がります)
例えば~/project_hoge/vendorにインストールする場合・・・
$ php pyrus.phar /home/calpo/project_hoge/vendor set bin_dir /home/calpo/project_hoge/vendor/bin $ php pyrus.phar /home/calpo/project_hoge/vendor config-show Pyrus version 2.0.0a3 SHA-1: BE7EA9D171AE3873F1BBAF692EEE9165BB14BD5D Using PEAR installation found at /home/calpo/project_hoge/vendor System paths: php_dir => /home/calpo/project_hoge/vendor/php ext_dir => /usr/lib64/php/modules cfg_dir => /home/calpo/project_hoge/vendor/cfg doc_dir => /home/calpo/project_hoge/vendor/docs bin_dir => /home/calpo/project_hoge/vendor/bin ・ ・
インストール
チャンネルの設定などもプロジェクトローカルなのでまた設定します。
$ php pyrus.phar /home/calpo/project_hoge/vendor set auto_discover on $ php pyrus.phar /home/calpo/project_hoge/vendor channel-discover pear.phpunit.de $ php pyrus.phar /home/calpo/project_hoge/vendor install phpunit/PHPUnit ・ ・ pear.phpunit.de/PHP_Invoker depended on by pear.phpunit.de/PHPUnit $ ls ~/project_hoge/vendor/bin phpunit
こんな感じでプロジェクトローカルなPEARライブラリをほいほいインストールしていけます。