macでPHPUnitを使う方法
自分はmacを使っているのですが、どうしてもPHPUnitの勉強をしなければならなかったので頑張って導入してみました。
【必要なもの】
まずはMAMPをインストールした。
これは次へ次へとかでサクッとできた。
あとはPHPも必要。僕の場合は最初から入ってたっぽい。
僕の環境
OS: Mac OS X 10.7.5 MAMP: 2.0.2 PHP: 5.3.12
PEARが必要
PEARって?
プログラミング言語PHP用のライブラリ集。色々な拡張モジュールやアプリケーションがPEARに登録されており、ネットワーク経由で取得・利用することができる。PerlでいうCPANにあたる。
PEARとは
とりあえずこれがあれば、PHPUnitがネット経由で取得できるという事ですかね。
何かPEARが何者なのかイマイチ分からない。
要は、世界中のPHPのすげー人達が、PHPが更に便利になるクラスをパッケージ化して配布してて
それをPEARから使えるようになるんだって。
ここに公開されてるパッケージ一覧があった。
PEARのパッケージ一覧
これでDBと接続できるようになったり、HTTPのリクエストとか簡単にできるようになるのかな?
誰か教えてください!笑
さて、PEARを使おうとしたらなぜか使えなかった。
とりあえずMAMPのPEARを使おうとする場合はpear.confというのを消す必要があるらしい。
面倒くせーな。
以下のサイトを参考にさせていただきました。ありがとうございました。
MAMPにPEARを入れる方法
まず移動
cd /Applications/MAMP/bin/php/php5.3.6/conf/
この中のpear.confを削除または改名する必要があるらしいので消した。
rm pear.conf
今度はPEARをインストールするための場所に移動して、PEARを最新版にする
cd /Applications/MAMP/bin/php/php5.3.6/bin/ ./pear upgrade PEAR
インストール可能なライブラリ一覧を確認
./pear list-all
何かワーニングが出た
WARNING: channel "pear.php.net" has updated its protocols, use "pear channel-update pear.php.net" to update
なんかPEARにはチャネルってのがあって、これを使うと、PEAR以外のとこのパッケージもインストールできるらしい。
ちなみにPHPUnitもPEAR互換のチャネルでソフトウェアを配布してるらしい。
とりあえず指示通りやってみた。
./pear channel-update pear.php.net Updating channel "pear.php.net" Update of Channel "pear.php.net" succeeded
成功したらしい。
「PEARでインストールされる先の確認」
./pear config-get php_dir /Applications/MAMP/bin/php/php5.3.6/lib/php
PEARでインストールしたものはここに入るってことか。
早速インストール!!
./pear install phpunit/PHPUnit Attempting to discover channel "phpunit"... Attempting fallback to https instead of http on channel "phpunit"... unknown channel "phpunit" in "phpunit/PHPUnit" invalid package name/package file "phpunit/PHPUnit" install failed
はぁ。。もう意味わかんねー
なんで失敗してんだよ。
phpunitなんてチャネルないよ?ってこと?
とりあえずググった。
よくわからないままに以下の3つやった
./pear channel-discover pear.phpunit.de ./pear channel-discover components.ez.no ./pear channel-discover pear.symfony-project.com
でもう一回
./pear install phpunit/PHPUnit Did not download optional dependencies: phpunit/PHP_Invoker, use --alldeps to download automatically phpunit/PHPUnit requires package "channel://pear.symfony.com/Yaml" (version >= 2.1.0) phpunit/PHPUnit can optionally use package "phpunit/PHP_Invoker" (version >= 1.1.0) phpunit/PHP_CodeCoverage can optionally use PHP extension "xdebug" (version >= 2.0.5) downloading File_Iterator-1.3.3.tgz ... Starting to download File_Iterator-1.3.3.tgz (5,152 bytes) .....done: 5,152 bytes downloading Text_Template-1.1.4.tgz ... Starting to download Text_Template-1.1.4.tgz (3,701 bytes) ...done: 3,701 bytes downloading PHP_CodeCoverage-1.2.7.tgz ... Starting to download PHP_CodeCoverage-1.2.7.tgz (157,806 bytes) ...done: 157,806 bytes downloading PHP_Timer-1.0.4.tgz ... Starting to download PHP_Timer-1.0.4.tgz (3,694 bytes) ...done: 3,694 bytes downloading PHPUnit_MockObject-1.2.2.tgz ... Starting to download PHPUnit_MockObject-1.2.2.tgz (20,347 bytes) ...done: 20,347 bytes downloading PHP_TokenStream-1.1.5.tgz ... Starting to download PHP_TokenStream-1.1.5.tgz (9,859 bytes) ...done: 9,859 bytes install ok: channel://pear.phpunit.de/File_Iterator-1.3.3 install ok: channel://pear.phpunit.de/Text_Template-1.1.4 install ok: channel://pear.phpunit.de/PHP_Timer-1.0.4 install ok: channel://pear.phpunit.de/PHP_TokenStream-1.1.5 install ok: channel://pear.phpunit.de/PHP_CodeCoverage-1.2.7 install ok: channel://pear.phpunit.de/PHPUnit_MockObject-1.2.2
最初に変なの出てるけど成功?
確認
phpunit -version bash: phpunit: command not found
できてねーじゃん!!!
インストールされてるパッケージ一覧を取得するには「pear list」でやるらしく
オプションでcをつけるとチャネルを指定できるらしい。
./pear list -c phpunit Installed packages, channel pear.phpunit.de: ============================================ Package Version State File_Iterator 1.3.3 stable PHPUnit_MockObject 1.2.2 stable PHP_CodeCoverage 1.2.7 stable PHP_Timer 1.0.4 stable PHP_TokenStream 1.1.5 stable Text_Template 1.1.4 stable
alldepsというオプションつけると、依存関係があるパッケージもインストールしてくれるらしいのでやってみた。
(ちなみに、--nodepsで依存関係を無視したインストールをすることもできるらしい)
./pear install --alldeps phpunit/PHPUnit Unknown remote channel: pear.symfony.com phpunit/PHPUnit requires package "channel://pear.symfony.com/Yaml" (version >= 2.1.0) phpunit/PHP_Invoker requires PHP extension "pcntl" No valid packages found install failed
ああああああめんどくせえええええ
./pear channel-discover pear.symfony.com Adding Channel "pear.symfony.com" succeeded Discovery of channel "pear.symfony.com" succeeded
もう一回!
./pear install --alldeps phpunit/PHPUnit phpunit/PHP_Invoker requires PHP extension "pcntl" downloading PHPUnit-3.7.10.tgz ... Starting to download PHPUnit-3.7.10.tgz (117,079 bytes) .........................done: 117,079 bytes downloading Yaml-2.1.6.tgz ... Starting to download Yaml-2.1.6.tgz (38,550 bytes) ...done: 38,550 bytes install ok: channel://pear.symfony.com/Yaml-2.1.6 install ok: channel://pear.phpunit.de/PHPUnit-3.7.10
お・・
./pear list -c phpunit Installed packages, channel pear.phpunit.de: ============================================ Package Version State File_Iterator 1.3.3 stable PHPUnit 3.7.10 stable PHPUnit_MockObject 1.2.2 stable PHP_CodeCoverage 1.2.7 stable PHP_Timer 1.0.4 stable PHP_TokenStream 1.1.5 stable Text_Template 1.1.4 stable キターーーーーーーー phpunit --vertion -bash: phpunit: command not found パスとおってないっぽい cd /Applications/MAMP/bin/php/php5.3.6/bin/ lsしたらphpunitあった ./phpunit --version PHPUnit 3.7.10 by Sebastian Bergmann.
やっとスタートラインにたった。。。。
長かった・・・
30分くらいかかったぜ。。
とりあえず意味わからなかったから復習しとこう
【復習】PEARとかライブラリとか、チャネルとかなんだったの??【大事】
PEARって?
とにかくPHPを使うのに便利なライブラリがネット経由で使えるようになるやつ。
ライブラリって?
PHPの関数がつらつらと書かれたもので、これ使うと色々と便利になるもの
例えば何が便利になるのか?
例:webサイトを簡単に解析する「simple_html_dom」というライブラリ
<?php require('simple_html_dom.php'); $html = file_get_html('http://www.google.com/'); foreach($html->find('a') as $element) { echo $element->href . ''; } ?>
これだけで、リンクのurl文字列を表示することができる。
つまり、simple_html_domってライブラリのfile_get_htmlという関数がgoogleのサイトをさっくりと解析してPHPで簡単に使えるようにしてくれるのだ!!
これはすげぇ!
で、途中で出てきた「pear.php.net」とか「pear.symfony.com」ってなんだったの?
PRARのサイトいわく
PEAR パッケージはすべて pear.php.net のサーバに登録され、そこからダウンロードします。 "チャネル" と呼ばれるその他サードパーティのサーバでもパッケージを配布しており、 これも PEAR インストーラでインストールすることができます
ほぉ。つまりPHPUnitはpear.symfony.comというチャネルが登録されてないとインストール出来なかったのですね。
途中でやった「./pear channel-discover pear.symfony.com」とは?
pear channel-discover <チャネル名>で、<チャネル名>がチャンネルサーバーかどうか調べ,チャンネルサーバーなら内部データベースに追加するそうです。
次回はPHPUnitを実際に使ってみます。
あと、simple_html_domでどっかのサイトを解析してみます。