読者です 読者をやめる 読者になる 読者になる

肉とビールとパンケーキ by @sotarok

少し大人になった「肉とご飯と甘いもの」

モダンなPHPの開発環境の構築方法

PHP

誰か書くんじゃないかと思いつつ、まあ、お決まりのパターンとしてPHP版も書いてみよう。
PHPのこと見てると、書き方とか取り巻く環境ってあんま変わってないなーとか思いつつ、そして何がモダンなんだっけ?新しければいいのか?って話だけど。

一般的な OSX 環境および Linux 環境における、モダンな PHP 開発環境の構築方法についてまとめてみた。最新のPHPxdebugがあれば十分。

PHP 5.3.2 のインストール

ソースから入れてた時期もあるけどやっぱパッケージが楽だな。。オフィシャルじゃないリポジトリを使えばパッケージで入れられる。
pearpeclは、パッケージ入れるときに一緒に入れちゃう。

pearpecl そのものは、PHPよりも頻繁にバージョンアップされるし、パッケージになってたりなってなかったりの管理が面倒だから基本的にpear/peclコマンドで。

Mac OS X

Snow LeopardならデフォルトでPHP 5.3.1入ってる。が、Mac Portsから入れるのがいいならPortsから入れる(Perl は脱Portsの流れなの?)。最近はvariantsで入れるのではなくモジュールごとにパッケージが分けられるようになった。ばんざーい。でもpearコマンドやらpeclコマンドのために +pear は必要っていうね...

% sudo port install php5 +pear
% sudo port install php5-mbstring

ports で入れたPHPを使うには、パスの調整が必要(以下は、OpenSolaris(!)、Mac(ports), Linux全般対応版)。

PATH=$HOME/bin:/usr/gnu/bin:/opt/local/bin:/usr/local/bin:$PATH:/sbin:/usr/sbin
Debian

squeeze ならデフォルトで PHP 5.3.3 が入る。
以下は、lenny の場合。dotdeb から PHP 5.3 むけのaptパッケージを入れる。

2012/1/19追記: dotdeb の source URLが変更されています。mirror リストの中から Japan のものを使えば良いと思います。 http://www.dotdeb.org/mirrors/

% sudo vim /etc/apt/sources.list

#末尾に以下の2行を追加
deb http://php53.dotdeb.org stable all
deb-src http://php53.dotdeb.org stable all

% sudo aptitude update
% sudo aptitude install php5 php5-dev php-pear php5-mbstring

update の時点で、以下のようなエラーが出る場合があるが、

W: GPG error: http://php53.dotdeb.org stable Release: 公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY E9C74FEEA2098A6E
W: これらの問題を解決するためには apt-get update を実行する必要があるかもしれません

その場合は、以下のように対応(参考 Dotdeb packages are now signed! | Dotdeb)

% gpg --keyserver keys.gnupg.net --recv-key 89DF5277
% gpg -a --export 89DF5277 | sudo apt-key add -
CentOS

epelとremiを使えばyumで入る。remiはデフォルトでenabledにならないので、enabledにする。

% sudo rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
% sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm
% sudo vim /etc/yum.repos.d/remi.repo

### [remi] セクションで 0 を 1 に
enabled=1

% sudo yum install php php-devel php-pear php-mbstring

xdebug

開発環境なら当然xdebugは入れる。

% sudo pecl install xdebug

最後にiniに extension=xdebug.so って書け、と出てくるが、正しくは zend_extension。php.ini には書かないで、Config File Scan Dir に xdebug.ini ってファイルを作成して、そこに書く。

に、

zend_extension=/path/to/xdebug.so

を記述。zend_extensionには絶対パスを書かなければいけないので、分からない場合は pear config-show の ext_dir を参考にすること。

deploy の手法

pearのディレクトリをまるごとrsyncでもいいな。peclは、アーキテクチャによって違うから個別にインストールしたほうが良い。

xdebug

xdebugはdeploy環境にいれるなよ!

APC

開発環境には xdebug 必須だけど、本番環境にはやっぱAPCでしょ。PHP 5.3対応版はbeta。

% pecl install apc-beta

メモリなどの設定は、pear の doc_dir の doc/APC/INSTALL を参考。以下はdebianの場合のファイルの場合。

% sudo vim /etc/php5/conf.d/apc.ini

extension=apc.so

apc.enabled=1
apc.shm_segments=1
apc.shm_size=128M
apc.ttl=7200
apc.user_ttl=7200
apc.num_files_hint=1024
apc.mmap_file_mask=/tmp/apc.XXXXXX
apc.enable_cli=1

apc の管理画面は、pearphp_dir から apc.php をウェブでアクセス出来る場所にコピーして使う。

複数アプリケーションを開発していて、それぞれの依存モジュールがそれぞれことなる場合の運用

アプリケーション以下に lib/ などとディレクトリを作って、その中に pear コマンドなどでパッケージを入れる+ include_path を調整するのが良い(まあ、だいたいフレームワークがやってるよ)。

アプリケーションの中で include_path を調整するには以下。

<?php

set_include_path('/path/to/lib' . PATH_SEPARATOR . get_include_path());

ちなみにシステムのpearディレクトリじゃなくて任意のディレクトリのpearのインストールをするには、 .pearrc を作れば良い。kayacさんのブログをご参考のこと。


余談だけど、Ethnaなら pear-local コマンドってやつがあるよ!

異なるバージョンのPHPをまとめて入れる場合

id:hnw 先生による phpall を使って入れる。複数環境でテストを実行したい場合には非常に役に立つ。ただし、インストールには時間かかりまくる。

使用するPHPのバージョンの選定

PHP 5.3.2 択一(2010/07/17現在)。
PHP 5.3.0のころから5.3は使っているけど、今はだいぶ安定してるし(nequalのサービスは全部PHP 5.3で動いてるよ)、やっぱ名前空間や無名関数使いたい。PHP 5.2.x 使ってた人が移行する場合は、特に注意すべきはE_DEPRECATED。それ以外はわりとすんなりいくとおもう。

PHP 4とか使ってる場合すぐさま今すぐ本当に今すぐとにかく今すぐJust Now、PHP 5にアップグレードするべきですね。

追記

これはこれでイイ!のだが、個人的には開発環境と本番環境は極力バージョンやパッケージも含め完全同一化するほうが後で悩まされなくてすむと思う。ということでいつも仮想化。

はてなブックマーク - Ryuzeeのブックマーク - 2010年7月18日
  • 僕もいつも仮想化(ですが、それはまた別の話)。たぶん仮想化すべき、って話とこのエントリ自体は対立する話じゃなくて、仮想化した中での環境構築方法。本番と開発環境のバージョンは完全同一化すべきですね!モダンならね... 最新のPHP 5.3.2でね... (理想は)。