Hiromuブログ

最近はこちら(https://zenn.dev/hiromu)が本体

MAMPでCakePHPのテスト環境構築

こちらのエントリーの続きのような感じですが、今回はMAMPCakePHPのテスト環境構築してみました。

前回同様MAMPの場合以下の本の通りにはすすめられなかったのでその対応メモです。

 

結構長文なので、まずは結論を先に

 

結論

MAMPにはPHPUnitがインストールされていないので、以下コマンドでインストールする。

$ pear config-set php_dir /Applications/MAMP/bin/php/php5.4.4/lib/php
$ pear config-set auto_discover 1
$ sudo pear install pear.phpunit.de/PHPUnit

 

なお、phpのバージョンはMAMPの環境設定から確認できます。

スクリーンショット 2013-04-02 17.22.22

 

以上でCakePHPのインストールフォルダのtest.phpにアクセスすれば以下の画面が表示されました。

スクリーンショット 2013-04-02 17.39.55

 

 

結論にたどり着くまでの試行錯誤

なんかあっさりとできたような感じに見えそうですが、以下の通り結構頑張りました(^^;)

 

[CakePHPのインストールフォルダ]/test.php にアクセスするとPHPUnitがインストールされていませんと言われます。あと英語でインストール方法が書かれています。pearとかよくわかりませんが、下に示されているコマンドをうてば良いという感じらしいです。

※ちなみにPEARとはPHP公式ライブラリのことのようです(初心者まるだしかも・・・)

PHPUnit is not installed!
You must install PHPUnit to use the CakePHP(tm) Test Suite.

PHPUnit can be installed with pear, using the pear installer.

To install with the PEAR installer run the following commands:

pear config-set auto_discover 1
pear install pear.phpunit.de/PHPUnit
Once PHPUnit is installed make sure its located on PHP's include_path by checking your php.ini

 

このコマンドをうちました。
$ pear config-set auto_discover 1

 

しかし、pearコマンドが見つからないと怒られた・・・
しかたないのでpearコマンドをインストールします。

 

こちらのサイトを参照しつつ以下を実行
$ sudo php /usr/lib/php/install-pear-nozlib.phar

 

↓このように表示されました。
Password:
No log handling enabled - using stderr logging
Created directory: /var/db/net-snmp
Created directory: /var/db/net-snmp/mib_indexes
[PEAR] Archive_Tar    - installed: 1.3.7
[PEAR] Console_Getopt - installed: 1.3.0
[PEAR] Structures_Graph- installed: 1.0.4
[PEAR] XML_Util       - installed: 1.2.1
[PEAR] PEAR           - installed: 1.9.4
Wrote PEAR system config file at: /private/etc/pear.conf
You may want to add: /usr/lib/php/pear to your php.ini include_path


php.iniの作成

iniファイルがすでにある場合には、この項目は飛ばしていいようです。
無い場合には、以下を実行。
sudo cp /etc/php.ini.default /etc/php.ini

 

ファイルが読み取り専用に鳴っている場合は書き込み権限をあたえましょう
($ sudo chmod 664 php.iniとかchmod 666 php.iniとかでいけるかと)

 

そしてphp.iniの書き換え
変更前
;include_path = ".:/php/includes"

変更後
include_path = ".:/php/includes:/usr/lib/php/pear"


ライブラリをインストールするにはinstallコマンドを実行するようです。
(例)$ sudo pear install Pager
インストールディレクトリは「/usr/lib/php/pear

 

さてpearコマンドのインストールが終わったので、ようやくPHPUnitをインストール!
$ pear config-set auto_discover 1
config-set succeeded

$ pear install pear.phpunit.de/PHPUnit
Attempting to discover channel "pear.phpunit.de"...
downloading channel.xml ...
Starting to download channel.xml (804 bytes)
....done: 804 bytes
Auto-discovered channel "pear.phpunit.de", alias "pear.phpunit.de", adding to registry
unknown channel "pear.phpunit.de" in "pear.phpunit.de/PHPUnit"
invalid package name/package file "pear.phpunit.de/PHPUnit"
install failed

 

えぇぇ、なんかインストール失敗してるし・・・
やる気なくなってくる。

 

install PHPUnit, see the PHPUnit installation guide
こちらを見ると、場合によってはpearをアップグレードする必要があると書かれているので以下をためす。
$ sudo pear upgrade PEAR
Password:
Nothing to upgrade

 

何も起こりませんでしたw

 

つぎにこちらを参照するとsudoをつければいけたとのこと。
インストール中に「adding to registry」などというメッセージが出ているので管理者権限が必要なのかもしれません。

 

ためしてみると
$ sudo pear install pear.phpunit.de/PHPUnit
Attempting to discover channel "pear.phpunit.de"...
downloading channel.xml ...
Starting to download channel.xml (804 bytes)
....done: 804 bytes
Auto-discovered channel "pear.phpunit.de", alias "phpunit", adding to registry
Attempting to discover channel "pear.symfony.com"...
downloading channel.xml ...
Starting to download channel.xml (811 bytes)
...done: 811 bytes
Auto-discovered channel "pear.symfony.com", alias "symfony2", adding to registry
Did not download optional dependencies: phpunit/PHP_Invoker, use --alldeps to download automatically
phpunit/PHPUnit can optionally use package "phpunit/PHP_Invoker" (version >= 1.1.0, version <= 1.1.99)
phpunit/PHP_CodeCoverage can optionally use PHP extension "xdebug" (version >= 2.0.5)
downloading PHPUnit-3.7.19.tgz ...
Starting to download PHPUnit-3.7.19.tgz (118,196 bytes)
...done: 118,196 bytes
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.9.tgz ...
Starting to download PHP_CodeCoverage-1.2.9.tgz (159,582 bytes)
...done: 159,582 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.3.tgz ...
Starting to download PHPUnit_MockObject-1.2.3.tgz (20,390 bytes)
...done: 20,390 bytes
downloading Yaml-2.2.0.tgz ...
Starting to download Yaml-2.2.0.tgz (39,955 bytes)
...done: 39,955 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.symfony.com/Yaml-2.2.0
install ok: channel://pear.phpunit.de/PHP_TokenStream-1.1.5
install ok: channel://pear.phpunit.de/PHP_CodeCoverage-1.2.9
install ok: channel://pear.phpunit.de/PHPUnit_MockObject-1.2.3
install ok: channel://pear.phpunit.de/PHPUnit-3.7.19

インストールできた!

以下コマンドで確認。
$ phpunit --version
PHPUnit 3.7.19 by Sebastian Bergmann.


今回CakePHPのテスト環境を試すことが目的だったのですが、その環境を構築するだけで結構苦労しました(笑)
でも、pearの使い方を何となく覚えられたのでよしとします。せっかくなのでパッケージのアンインストールも覚えておいた方がよさそうですね。
http://www.phpbook.jp/pear/command/index6.html

 

最後に以下にアクセスしてみます。

[CakePHPのインストールフォルダ]/test.php

相変わらずPHPUnit is not installed!とか出てる・・・
おそらくパスの設定とかが必要なのでしょう。

 

MAMPでつかってるPHPって結局どれだっけ?という疑問がわきました。
これはMAMPの環境設定で確認できます。

 

ということで以下ファイルのパスを修正
/Applications/MAMP/conf/php5.4.4/php.ini

変更前
include_path = ".:/Applications/MAMP/bin/php/php5.4.4/lib/php"

変更後
include_path = ".:/Applications/MAMP/bin/php/php5.4.4/lib/php:/usr/lib/php/pear"

 

念のためMAMPのサーバを再起動して再度以下にアクセス。

[CakePHPのインストールフォルダ]/test.php

だめだーw

 

/Applications/MAMP/bin/php/php5.4.4/conf/php.ini
こっちのファイルかも。
だめでしたw


ここでちょっと冷静になって仕切り直し。

 

MAMP配下にpearがあらかじめインストールされているのをしります。
結局のところMAMP配下にPHPUnitもインストールする必要があるのかもなどと思ったり思わなかったり。
最初にこちらのサイトが見つかっていれば・・・・

 

$ ./pear upgrade pear

Warning: lstat(): Lstat failed for /tmp/pear/cache/b9c464ce704f2efce3ed9fca09ee1f68rest.cacheid in PEAR/REST.php on line 276
Could not get contents of package "/Applications/MAMP/bin/php/php5.4.4/bin/pear". Invalid tgz file.
upgrade failed

これはやっぱりエラー出てますが無視。


$ pear config-get php_dir
/usr/lib/php/pear

 

 

$ pear config-set php_dir /Applications/MAMP/bin/php/php5.4.4/lib/php

★これが重要っぽい

PHPUnitをインストールする先をMAMP配下に指定しています。

 

$ pear config-set auto_discover 1
$ sudo pear install phpunit/PHPUnit
とやったらエラーがでましたが、最後の行を以下に変更したらいけました。

$ sudo pear install pear.phpunit.de/PHPUnit


こんどこそ本当にできた!!!!!
わかってしまえばすぐできることだと思いますが長い道のりでした。
でも動いたときのうれしさはたまらないものがあります。

でもたぶんテストはあまりしませんwww