phpbrewとcomposerとborisを使ったローカル開発環境の構築

  • 24
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

pythonならpyenv/virtualenv+pip/bpython、rubyならrvm/bundler/pryでできることをphpではphpbrew/composer/borisでやる。

目標

  1. システムワイドなphpから独立した、ローカル環境で使える任意のバージョンのphpをビルドしたい
  2. システムワイドなphp環境に影響を与えずにプロジェクトローカルで依存ファイルを管理したい
  3. 気軽にバージョンを変更しながらREPL環境で新しい構文を試したい

なんでもローカルで解決するので、ホームディレクトリにおもちゃ箱を作ってなんでもそこに放り込む。

mkdir $HOME/.bin
echo "PATH=$HOME/.bin:$PATH" >> .bash_profile
exec $SHELL

phpbrewでローカルに独立したphp環境を構築する

Requirements

  • Mac OS 10.5+
  • Ubuntu, Debian
  • PHP5.3
  • curl
  • gcc, binutil, autoconf, libxml, zlib, readline

brew/port/apt-getで必要なパッケージはとりあえず公式ドキュメントからコピペする。

phpbrewを落としてきて有効化する。

curl -O https://raw.github.com/c9s/phpbrew/master/phpbrew
mv ./phpbrew ~/.bin/phpbrew
sudo chmod +x ~/.bin/phpbrew
phpbrew init
source ./.phpbrew/bashrc
echo '[[ -s "$HOME/.phpbrew/bashrc" ]] && source "$HOME/.phpbrew/bashrc"' >> .bash_profile

適当にphp5.5.9をビルドしてみる。phpbrew variantsで有効なvariantsを参照できるので適宜参照のこと。

phpbrew install php-5.5.9 +default+dbs

通常のphpだとあとから拡張モジュールを有効にするにはソースファイルの適当なディレクトリでphpize && ./configure && make && make installしてphp.iniにextensionを記載する必要があるが、phpbrewを使うと以下のように単にext install hogeすればよい。

phpbrew ext install gd

上のコマンドを実行すると~/.phpbrew/php/php-(バージョン)/var/db以下にgd.iniが作られ、php起動時に自動的に読み込まれる仕組み。拡張の有効・無効を切り替えたいときは、

phpbrew ext enable gd
phpbrew ext disable gd

phpbrew ext経由でどんな拡張を扱えるかは、

phpbrew ext

とすることで、インストール可能な拡張の一覧と拡張の適用状態を確認することができる。

phpbrew ext installはpeclフロントエンドとしても使えるのでapcやxdebugなども簡単に導入が可能だ。

phpbrew ext install xdebug

そんでphp -vしてみると、

$ php -v
PHP 5.5.9 (cli) (built: Feb 13 2014 09:08:07)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
    with Xdebug v2.2.3, Copyright (c) 2002-2013, by Derick Rethans

peclで落としてきたものもphpbrew ext enable hogeすると~/.phpbrew/php/php-(バージョン)/var/db以下にextension=hoge.soが記載されたhoge.iniファイルが生成される。

pecl install mongo
phpbrew ext install mongo

手動でphpizeしたものもphpbrew ext enable hogeでOK。

git clone https://github.com/nicolasff/phpredis.git
cd phpredis
phpize && ./configure && make && make install
phpbrew ext enable redis

pearでインストールしたものは~/.phpbrew/php/php-(バージョン)/lib/php以下に配置される。

pear config-set auto_discover 1
pear install pear.phpunit.de/PHPUnit

phpunitのバイナリは、

$ which phpunit
/home/oouchi/.phpbrew/php/php-5.4.12/bin/phpunit

ここではphpbrewをローカル環境構築のために使ったが、phpbrewはシステムワイドなphpバージョンの管理にも使える。詳しくはphpbrewのドキュメントをチェック。

手軽なREPL環境をborisで構築する

コンソール上のREPL環境上でサッと実験したいときに手頃なツールとしてborisがある。

curl -L -O https://github.com/d11wtq/boris/releases/download/v1.0.8/boris.phar
chmod +x boris.phar
mv ./boris.phar ~/.bin/boris

ターミナル上でborisを呼び出してREPL環境が立ち上がればOK!

composerでプロジェクトローカルな依存ライブラリを管理する

composerの導入。

curl -s http://getcomposer.org/installer | php

composer.pharはよく使うのでおもちゃ箱に格納するがよいであろう。

mv composer.phar ~/.bin/composer

composer.jsonに依存関係を記述して、当該composer.jsonが置いてあるディレクトリでダウンロードするには、

composer install

これでcomposer.lockができて、ダウンロードした時点でのファイルとバージョンが記載されたファイルができるので、以後にcomposer installしてもcomposer.lockの内容でファイルとバージョンがロックされる。composer.jsonを書き換えたりしてcomposer.lockを更新する場合は、

composer update

例としてcomposer経由で phpunitの導入を行う。

まずは適当なプロジェクトディレクトリを作って初期設定ファイルを作る。

mkdir hoge
cd hoge
composer init

プロンプトで色々聞かれるけど適当にエンター押しまくる。そうすっと以下の様なcomposer.jsonができる。

composer.json
{
    "name": "oouchi/hoge",
    "authors": [
        {
            "name": "keitaoouchi",
            "email": "略"
        }
    ],
    "require": {

    }
}

そんでこのcomposer.jsonのrequireに以下のように依存ライブラリを追記してcomposer installする。

composer.json
{
    "name": "oouchi/hoge",
    "authors": [
        {
            "name": "keitaoouchi",
            "email": "略"
        }
    ],
    "require": {
        "phpunit/phpunit": "3.7.*"
    }
}

これでhoge/vendor/bin以下にphpunitが配置されるので、このプロジェクトのユニットテストは、

vendor/bin/phpunit

とプロジェクトローカルなphpunitを使える。

composerを使って導入できるライブラリはpackagistを参照。

古いpearライブラリなどcomposer対応してないライブラリなども以下のようにrepositories設定を加えればcomposer管理下に置ける。

composer.json
    "repositories": [
        {
            "type": "pear",
            "url":  "pear.hoge.com"
        }
    ],
    "require": {
        "fuga": "1.0.0"
    }

以上。