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以外のとこのパッケージもインストールできるらしい。
ちなみにPHPUnitPEAR互換のチャネルでソフトウェアを配布してるらしい。
とりあえず指示通りやってみた。

./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 インストーラでインストールすることができます

ほぉ。つまりPHPUnitpear.symfony.comというチャネルが登録されてないとインストール出来なかったのですね。

途中でやった「./pear channel-discover pear.symfony.com」とは?

pear channel-discover <チャネル名>で、<チャネル名>がチャンネルサーバーかどうか調べ,チャンネルサーバーなら内部データベースに追加するそうです。

次回はPHPUnitを実際に使ってみます。

あと、simple_html_domでどっかのサイトを解析してみます。