HomebrewでPHP環境 現時点でのまとめ
MacでHomebrewを使ってPHPの開発環境を作るまとめです。
HomebrewはMacPortsより圧倒的にコンパクトなのがメリットです。MacPortsでPHPをインストールすると、/opt/localに、Apacheを含め、すごい量のパッケージをインストールされます。PHPのビルドにApacheのライブラリが必要で、さらに、Apacheのビルドには...という具合。これだと、容量あたりの単価がかかるSSD搭載のMac bookがかわいそうですね。HomebrewのPHPは、MacOSにApacheがあるのを知っているので、依存が浅くて軽いです。
MAMP.appがあるじゃないかという人はちょっと待った。あのパッケージ構造、httpd.confとphp.iniとmy.iniがどこにあるかすごくわかりにくいんですよね。そのうえ、使っている拡張の最新バージョン追従が個別にできないのは辛いです。
何よりHomebrewがいいのは、php54とphp53という個別のパッケージがあること。FuelPHPの仕事とBEAR.Sundayの趣味プロを同時にやりたいというとき、サクッと切り替えたり、php53を使っているときにphp54-xdebugのアップデートをしたり。
じゃあ、やり方いきますよ。
まずHomebrewのインストール
>Homebrew — MacPorts driving you to drink? Try Homebrew!
$ ruby -e "$(curl -fsSkL raw.github.com/mxcl/homebrew/go)"
/usr/local/binにbrewコマンドができるので、シェルでパスを通しておきましょう。パッケージに含まれるコマンドはここに入ってきます。
うまくいったか環境チェックするにはこう。
$ brew doctor
あ、ちなみに最新のXCodeが要るのでMac AppStoreで調達しておいてくださいね。
実はMacについてくるApacheにはPHP5.3が付いてきます。Homebrewは「Macに最初から入っているものは含まない」というポリシーを守っていて、PHPは既存ソフト扱いなんだそうです。でも、アップデートされないわ、バージョン固定だわ、Xdebugは使えないわ、MySQLのドライバ入ってないわ、なんてPHPは使いたくないですよね。
そんなある日(2012年の4月ごろだったかな)、HomebrewにTapという機能が導入されました。外部のFormula(パッケージの定義)集を追加/管理するコマンドです。
https://github.com/mxcl/homebrew/wiki/Homebrew-0.9
これでオリジナルのFormulaと混ぜることなく、GitHubにある外部のFormulaセットを追加することが可能になります。たったこれだけ。
$ brew tap homebrew/dupes $ brew tap josegonzalez/homebrew-php
削除は brew untap コマンドです。
事前に homebrew/dupes を追加しているのは、その一部に homebrew-php が依存しているためです。
さてこれで準備OKなのでお待ちかねPHPをインストール。
まずはどんなインストールオプションがあるかを確認します。
$ brew options php53 --without-bz2 Build without bz2 support --with-tidy Include Tidy support --with-fpm Enable building of the fpm SAPI executable (implies --without-apache) --with-cgi Enable building of the CGI executable (implies --without-apache) --with-gmp Include GMP support --with-intl Include internationalization support --with-unixodbc Include unixODBC support --without-pear Build without PEAR --with-mssql Include MSSQL-DB support --with-mysql Include MySQL support --with-suhosin Include Suhosin patch --with-mariadb Include MariaDB support --32-bit Build 32-bit only. --with-homebrew-openssl Include OpenSSL support via Homebrew --with-pgsql Include PostgreSQL support --with-imap Include IMAP extension --without-apache Build without shared Apache 2.0 Handler module --with-libmysql Include (old-style) libmysql support
intlがないとSymfonyに怒られるのでオン、あと、MySQLとPostgreSQLのドライバも入れましょう。
$ brew install php53 --with-intl --with-mysql --with-pgsql
まだMySQLとPostgreSQLをインストールしていない場合、MySQLとPostgreSQLのインストールが始まります。分けてやってもいいのですが、記事を書くのが面倒なので依存を一気に入れちゃおうと...
やってみたらドライバだけはインストールされましたが、MySQL等の本体は別途インストールしないとだめでした。勝手に依存を入れるわけではなくなったようです。
インストール中にいろいろメッセージが出てきますが、まあ、最初はスルーしておきましょう。最後に出てくるPHPの設定ガイドだけしっかり見て下さい。
For 10.5 and Apache: Apache needs to run in 32-bit mode. You can either force Apache to start in 32-bit mode or you can thin the Apache executable. To enable PHP in Apache add the following to httpd.conf and restart Apache: LoadModule php5_module /usr/local/Cellar/php53/5.3.16/libexec/apache2/libphp5.so The php.ini file can be found in: /usr/local/etc/php/5.3/php.ini ☆☆☆☆ PEAR ☆☆☆☆ If pear complains about permissions, 'Fix' the default PEAR permissions and config: chmod -R ug+w /usr/local/Cellar/php53/5.3.16/lib/php pear config-set php_ini /usr/local/etc/php/5.3/php.ini ☆☆☆☆ Extensions ☆☆☆☆ If you are having issues with custom extension compiling, ensure that this php is in your PATH: PATH="$(brew --prefix josegonzalez/php/php53)/bin:$PATH" Extensions will never be compiled against this homebrew-php PHP. Please install them using --with-homebrew-php to enable compiling against this php. ☆☆☆☆ FPM ☆☆☆☆ If you have installed the formula with --with-fpm, to launch php-fpm on startup: * If this is your first install: mkdir -p ~/Library/LaunchAgents cp /usr/local/Cellar/php53/5.3.16/homebrew-php.josegonzalez.php53.plist ~/Library/LaunchAgents/ launchctl load -w ~/Library/LaunchAgents/homebrew-php.josegonzalez.php53.plist * If this is an upgrade and you already have the homebrew-php.josegonzalez.php53.plist loaded: launchctl unload -w ~/Library/LaunchAgents/homebrew-php.josegonzalez.php53.plist cp /usr/local/Cellar/php53/5.3.16/homebrew-php.josegonzalez.php53.plist ~/Library/LaunchAgents/ launchctl load -w ~/Library/LaunchAgents/homebrew-php.josegonzalez.php53.plist Mountain Lion comes with php-fpm pre-installed, to ensure you are using the brew version you need to make sure /usr/local/sbin is before /usr/sbin in your PATH: PATH="/usr/local/sbin:$PATH" You may also need to edit the plist to use the correct "UserName". Please note that the plist was called 'org.php-fpm.plist' in old versions of this formula.
php.ini は /usr/local/etc/php/5.3/php.ini です。5.4 だとこれが php/5.4/php.ini になります。
Apache にロードするには /etc/apache2/httpd.conf あたりにこんな感じで追加します。Apacheは homebrew/dups でビルドしてもいいですね。今は簡単に MacOS の標準に入れておきましょう。
#LoadModule php5_module libexec/apache2/libphp5.so LoadModule php5_module /usr/local/Cellar/php53/5.3.16/libexec/apache2/libphp5.so
PEARを使うために、手動でこんな操作が必要らしいのでやっておきましょう。パーミッションが書き込みできないようになってて、pear がうまくいかないのです。忘れるとマジでハマります。
$ chmod -R ug+w /usr/local/Cellar/php53/5.3.16/lib/php $ pear config-set php_ini /usr/local/etc/php/5.3/php.ini
え、こんなの全部憶えられない? って、エディタにコピーなんかしとかなくても大丈夫ですよ。コマンドでもう一度表示させることができるので、設定が済んだら忘れていいですよ。
$ brew info php53
ほら。
これで、MySQLとPostgreSQLの設定も確認できます。一括でインストールして読み飛ばしてもいいよというのはそういう意味。
$ brew info mysql $ brew info postgresql
Hello Worldやるぶんには使わないので、あとでこれ見て勝手にやっといてください。
$ php -r 'echo "Hello World\n";'
はいこんにちは。
あと、開発するなら必須な拡張をいくつかインストール。何はなくとも、XdebugとAPCは要りますよね。
$ brew install php53-xdebug --with-homebrew-php
$ brew install php53-apc --with-homebrew-php
おしりの --with-homebrew-php がポイントです。これを付けないと、MacOSのデフォルトのPHPをリンクしてしまったり、5.4用の拡張なのにカレントの5.3をリンクしたり、という現象が起こりかねません。これを指定することで、必ず、Homebrewのphp53をリンクするようになります。(php-build等で勝手インストールしたランタイムとリンクしたい人のために、デフォルトは遠慮してるそうです)
追記ここから
$ brew install php53-xdebug $ brew install php53-apc
2012-10-08から、オプションの指定が逆になったようです。--without-homebrew-php で、homebrewのPHPをできるだけ避けてビルドするようにし、何も指定しなければhomebrewの対応するバージョンのPHPを使うのがデフォルトになっています。なのでオプションに注意しなくてもOKです。
ここまで
あ、ちなみにこれ、今日やっと正常に動作したホットな機能です。ここ修正されたのが、このエントリを書いてる動機です。
https://github.com/josegonzalez/homebrew-php/issues/151
https://github.com/josegonzalez/homebrew-php/issues/297
XdebugとAPCのインストールが済むと、便利なことに、/usr/local/etc/php/5.3/conf.d/ext-xdebug.ini と /usr/local/etc/php/5.3/conf.d/ext-apc.ini ができました。とりあえず初期設定のまま使うぶんには、 php.ini の修正はしなくていいです。
ふー、あともう一歩、PEARで開発に必須なものを入れます。
$ pear config-set auto_discover 1 $ pear install pear.phpunit.de/PHPUnit $ pear install PhpDocumentor $ pear install pear.phing.info/phing
まあこれぐらいあればまずはいいでしょう。パーミッションでハマらないように。
PEARでツールをインストールしたときは、もうひとつハマりどころがあります。インストールが成功してもすぐにはコマンドが使えないんですよね。Homebrewでインストールしたコマンドの正体は、/usr/local/binの中に置かれたシンボリックリンクなんですが、PEARを初めて使う前にもう、それ済んじゃってますよね。というわけで、シンボリックリンクを作り直します。
$ brew unlink php53 Unlinking /usr/local/Cellar/php53/5.3.16... ?? links removed $ brew link php53 Linking /usr/local/Cellar/php53/5.3.16... ?? symlinks created
完了。phpunit も phing も使えるようになりました。
じゃあ、php54 も同じ要領でインストールしましょう。できますよね、3が4になるだけですよ。
〜時間がかかるのでこちらに出来上がったものがございます〜
5.3と5.4の切り替えは、Cellerに直接パスを通してやるのもいいけど、
# export PATH="$(brew --prefix josegonzalez/php/php53)/bin:$PATH" export PATH="$(brew --prefix josegonzalez/php/php54)/bin:$PATH"
Homebrewのbinにあるリンクを再設定する方法だと、 .bash_profile を編集する必要もなくてラクラクです。
5.4 -> 5.3
$ brew unlink php54 $ brew link php53
5.3 -> 5.4
$ brew unlink php53 $ brew link php54
仕事中にこっそり裏でビルトインサーバとかBEAR.Sundayとかぐへへ...
そうそう、定期的にパッケージの更新は、やったほうがいいですよ。
$ brew update $ brew outdated $ brew upgrade $ brew unlink php53; brew link php54 $ pear list-upgrades $ pear upgrade $ brew unlink php54; brew link php53 $ pear list-upgrades $ pear upgrade