PHPTweetこんにちは、亀本です。アシアルも技術者の人数がそこそこ増えてきて、技術ブログの当番が回ってくるまで日数がかかるようになったためか、久方ぶりのブログです。今回はちょっとツール使う系の話です。前にPHP勉強会で「phpUnderControl」というツールの事が話題に上がっていたのを見たのですが、これが個人的にはなかなか惹かれるツールでした。phpUnderControlとは、「継続インテグレーション」というアジャイル開発手法(厳密には、アジャイルで提唱されたというより昔からあった概念のようです)を実現するための自動ビルド/テスト/開発支援ツールです。゚Д゚)ハァ?って感じですが、phpUnderControlは単純なビルドにとどまらず、色々な事をやってくれます。・PHP_CodeSnifferでのコード標準のチェック・PHPUnitによるユニットテストとかcoverageとかこれらを自動的に行い、綺麗なWebインターフェースに表示してくれます。これを知った時、あー、これはすごく便利だなー・・・symfonyでも使いたいなーと思っていたのですが、symfonyでやるならどうせならlimeを使ってやりたい。いう考えが浮かんできました。symfonyにはsfPHPUnitPluginというPHPUnitを組み込むプラグインもあるので、phpUnderControl対応を軸に考える時はこっちを使ってあげる形がいいかな、という気もしますが、やはりsymfonyを使う以上、limeでのテストもちゃんと考えてあげた方がいいよね、ということで、symfony/limeでphpUnderControl利用する、というトライをしてみました。使う結論から言うと、PMDとCoverageは対応できていませんが、他の一通りはpluginを組み込ませたりすることで対応する事ができました。1.2対応を行いました。本当は対応したものをフィードバックしたいんですが、pluginのリポジトリツリーにも該当プラグインがないので(^^;公開しちゃっていいのか。いうのは迷いどころだったので、いったん自分のがわで作った部分だけ公開しておきます。あとは、元のプラグインのlibから1枚コピーしてきて新しいプラグインのlibに配置するだけ。いう状態です(READMEに書いてあります)。http://blog.asial.co.jp/data/sgTest4CruisePlugin.tar.gzちなみに、上のような事情があるので、pearパッケージにはなってません。ただのtarballです。これ、どうするかは作者にメールなりしつつ、今後どうしていくかを考えます(^^;なお、元のプラグインの配置場所も再掲しておきます。2.0では標準機能として採用される。現在limeのリポジトリbranchesの中にある2.0-experimentalのツリーでは、LimeTestクラス内にtoXML()メソッドというPHPUnit形式のXMLを構築するメソッドが実装されているので、そのうち利用可能になるのではないかと思います。)方法さて、それでは実際に対応方法を紹介していきます。phpUnderContorlの導入方法ですが、これはid:miauさんのブログが非常に詳しいです。http://d.hatena.ne.jp/miau/20090525/1243209286http://d.hatena.ne.jp/miau/20090527/1243424606ここでは、まとめ的に手順だけ紹介していきます。CruiseContorlをインストールします。sun-java6-jdkとすれば必要な物がひと通り入ります。rpm系の方はsunのサイトからダウンロードしたりとか、色々な文章が世に出回っているのでそちらを参照して下さい。CruiseContorlは、Sourcefogeでバイナリ版が提供されているので、それを使えば十分です。http://cruisecontrol.sourceforge.net/download.htmlこれを適当な所に展開すれば、CruiseControlはインストール完了です。今回は、/data/cctestと言うディレクトリに展開したという前提で説明していきます。CruiseControlを起動するには、展開したディレクトリ直下にあるcruisecontorl.shを実行します。./cruisecontorl.sh気をつけるべき点は、起動時に環境変数の$JAVA_HOMEを呼び出して使う点です。debianの場合だと、/usrを指定してやらないと、javaコマンドの呼び出しに失敗します。exportするなり、cruisecontrol.shの中でJAVA_HOME=/usrを指定してやるなり、何かしらの対策処理は施しておきましょう。次に、phpUnderControlとそれに関連するるライブラリをインストールします。phpUnderControl、および関連ライブラリは独自のpearチャンネル上で配布されているので、それらのチャンネルを登録したうえでpearコマンドでインストールします。phpunit/phpUnderControl-betaこれで必要なライブラリがひと通りインストール完了し、phpucというコマンドが使えるようになります。pearでのインストールが終わったら、そのphpucコマンドを使ってCruiseControlにパッチを当て、phpUnderControl用の画面を生成します。/data/cctest以上で、phpUnderControlのインストールは完了です。今回の対応用に使うpluginは、上述の説明の通り、pluginディレクトリで展開してからlibの中身を古いものから移植してきてください。pluginごとsvnなどのリポジトリに入れてしまい、phpUnderControlにプロジェクトを作成します。今回はアプリケーションとしてsymfonyのサンプルであるjobeet(ただし、lib/vendro/symofnyを除いたもの)を使ってみました。以下のようにしてjobeetという名のプロジェクトを生成します。/data/cctestこうしてプロジェクトを生成すると、CruiseControl(/data/cctest)のprojectsディレクトリ以下にjobeetというプロジェクトが生成され、sourceがチェックアウトされます。/data/cctest直下のconfig.xmlへプロジェクトが追記されます。プロジェクトが生成されたら、config.xmlとjobeetプロジェクトのbuild.xmlを以下のように編集します。</project></cruisecontrol>まずconfig.xmlですが、ほとんどの部分は自動生成されていて変更の必要はなく、<publishers>要素の中のみ変更をします。変更されているのは、<publishers>の中の<execute>タグが追加になっている点と、<artifactspublisher>の中のdest属性のディレクトリを、logsからartifactsに変更してある点です。</target></project>次に、projects/jobeet以下のbuild.xmlですが、<target>要素としてunit-testを追記しています。name="build">のタグの中に、unit-testがビルド対象として加えてあります。以上の設定が終われば、準備完了です。./cruisecontrol.sh(時々Exceptionはいてたりもしますがw)そのまま一気にドキュメント生成やらテストの実行やらが行われます。プロジェクトを見ると、テスト結果等が見えるようになってるのがわかるかと思います。coverageやPMDの機能はまだ利用できないものの、limeでテストを作成して行く際に継続インテグレーションを導入するには、基本的な機能は利用できるので、結構ちゃんと使えるんじゃないでしょうか。追記:なお、本文に書き忘れていましたが。symfonyは、本体がとても巨大なため、へたにfreezeした状態でphpUnderControlと組み合わせると、phpDocumentorなどがメモリの使用量オーバーを起こしたりしてAPIドキュメントが正常に生成できなくなる場合があります。byスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。