Phing を利用して CakePHP を継続的インテグレーション #cakeadvent2

CakeAdvent2012 の14日目を担当します。ハッシュタグは #cakeadvent2012
昨日は @k1LoW さんの「細かすぎて伝わらないCakePHP Pluginシリーズ」でした。

はじめに

継続的インテグレーションテスト駆動開発アジャイル開発 などなど、最近は開発手法の話題を目にする機会も多いかと思います。

私の所属する株式会社うるるでも、Jenkins を利用した継続的インテグレーションを採用しており、今回はこの分野で記事を書かせていただきます。

継続的インテグレーションCakePHP(Jenkins+CakePHP

こちらに関しては既に記事にされている方も多く、特に Ryuzee さんの
CakePHP2.0+Jenkinsで継続的インテグレーションを行う方法
が非常に参考になります。

なぜPhing?

Phing は、プロジェクトビルドシステムで、テストや検証などをPhingを経由して一括化することができます。

Jenkis 側にビルドコマンドを1つ1つ登録してもいいのですが、

  • ローカルマシンでもテスト・検証を一括で行いたい
  • 別プロジェクトを作る度に、Jenkinsにビルドコマンドを1つ1つ登録するのは面倒だな

なんてニーズは満たせません。

というわけで、今回は「 Phingを利用して CakePHP 2系プロジェクトを検証する際の設定を晒させていただこう 」と思っています。
コードの検証では、 CakePHP 向けに除外すべき部分なども入れ込んでみました。
宜しければ利用してみてください。

利用するPHPパッケージ

以下のパッケージを利用します。インストールは適当に行なってください。
CakePHP2.0+Jenkinsで継続的インテグレーションを行う方法
を参考にして頂くと、手早いかもしれません。

CakePHP 2.X 向け、build configs

github にビルドコンフィグを用意しました。
利用していただくと、スムーズに検証をする準備が整えられると思います。
https://github.com/uluru/phing-cakephp

以下、簡単に中身のご説明です。

  • build
    • ビルドログや、生成されるドキュメントなどが入るディレクト
  • build.xml
    • phing 用のビルドコンフィグ
    • テストサーバ向けビルド/ローカルマシン向けビルド の2種類があります。
  • phpcs.xml
    • PHP_CodeSniffer向けの設定ファイルです。
    • 準拠するコーディング規約(弊社では PSR2)、CakePHP プロジェクトでは除外すべき対象などが定義されています
  • phpmd-rule.xml
    • PHPMD の検証ルール向けの設定ファイルです。
    • CakePHP では、 $id といったような2文字変数が使われているので、「1文字変数だけダメ!」という形に変更してます。
  • phpunit.xml
  • phpunit-coverage-text.xml
    • 同じくPHPUnitカバレッジ計算用の定義です。
    • Cake テストコマンドが -coverage-text オプションに対応していないので、開発中はコマンドラインだけで完結するために、別定義として用意しました。

利用準備(ビルドコンフィグの設置)

ダウンロードしてきた CakePHP のソースには、既に build.xml があると思います。
これは CakePHP Core 自体のビルド用ファイルなので、削除してしましましょう。


その後に、github にあるXMLファイル一式を、CakePHPプロジェクトのTOPディレクトリに配置してください。
また同様にTOPディレクトリへ build ディレクトリを作成してください。

※ git submodule add 出来る形式にしておけばヨカッタ… とBlogを書きながら気づきました。その内改善するかも!?デス。

使い方

テスト環境向けビルド
$ phing build

database.php などの CakePHP 設定ファイルの入れかえも行います。
具体的には、以下のファイルがテスト環境向けの定義という想定です。

  • app/Config/core.php.testing
  • app/Config/database.php.testing
ローカルマシン向けビルド
$ phing build-local

開発者が気にすべき検証を一括で行うための方法です。
具体的には以下のテスト・検証が一気に行われます。

単純に CakePHP Test だけしたい
$ app/Console/cake test app Model/Foo

テストだけを行う場合は、普通にテストコマンドを叩いてください。
カバレッジの計算を行わないので、時間が短縮され、待ちストレスが減ります。

最後に

駆け足で書かせていただきましたが、要は「CakePHP用の各種ビルド定義を公開しただけ」ということです。
まだまだ間違いや改善点もあるかとは思いますので、コメントや pull request などで情報を頂ければ幸いです。

p.s.
なかなかCakePHPイベントには参加できていませんが、今回はAdventに参加できてヨカッタです。
次回はリアルなイベントなどにもお邪魔させて頂きます。