2014-02-01

PHPのビルド? Phing?

ビルドまわりについては 過去に調べた ことがある。

しかし、PHPに対してビルドという言葉が使われている記事などを見かけたり、聞いたりすることが多くなって、意味がわからなくなってきた。 (PHPそのものに対してであればわかるけど、多分そうではない)

ビルド=コンパイル+リンクだと思っている。けど、PHPコードをコンパイルとかリンクする意味や必要があるのか。「Phing」というPHP用のビルドツールなるものがあるようだけど、一体どんな用途で使われているんだろう。

という疑問を持ったので、調べてみた。

http://www.m-takagi.org/docs/php/pocket_guide/2.3/ja/phing.html

Phing(PHing Is Not GNU make)はApache Antをもとにしてつくられらたプロジェクトビルドシステムです。
PHPの世界ではソースファイルをビルドしたりコンパイルしたりする必要はありません。Phingが意図しているのは、パッケージの作成や配布、そしてアプリケーションのテストを容易にすることです。
これらの作業を行うために、Phingには多くの独創的な操作モジュール(”タスク”)が用意されており、また独自のタスクを追加しやすいようにオブジェクト指向のモデルが提供されています。

PHPコードそのものをビルド・コンパイルする必要は無いということがわかった。その認識は間違ってなくて良かった。 しかし、Phingのメリットについてはこの説明じゃよくわからなかった。 もう少し追って調べてみる。

http://d.hatena.ne.jp/lifegood/20121214/p1

なぜPhing?
Phingはプロジェクトビルドシステムで、テストや検証などをPhingを経由して一括化することができます。
Jenkis側にビルドコマンドを1つ1つ登録してもいいのですが、
・ローカルマシンでもテスト・検証を一括で行いたい
・別プロジェクトを作る度に、Jenkinsにビルドコマンドを1つ1つ登録するのは面倒だな
なんてニーズは満たせません。

なるほど。PHPUnitを使ったユニットテストとか、PHP_CodeSnifferを使ったコード規約違反の有無チェックとか、phpDocumenterを使ったドキュメント生成とかを、Phingでは簡単に管理できるようだ。 もう少し具体的に調べてみたところ、各設定を終えたあと以下のコマンドなどでユニットテスト、コードチェック、ドキュメント生成など、登録した作業が実行できるようだった。

phing build 

とか

phing test

とか。具体的なコマンドについては自分で設定できるのかもしれない。 さしあたって、そこは本質的なところではないので、考えないことにしよう。

と、ここまで調べて自分が疑問に思っていたPHPとビルドの関係についてはなんとなく解消された。 PHPコードのビルドを指しているのではなくて、PHPで書かれたプロジェクトをビルドするのがPhingのようなツールだったということ。

でも、ビルドはコンパイル+リンクだよね。なんでPHPプロジェクトをビルドする必要があるのか、いまいちわからない。ビルドの意味を勘違いしているのか、PHPプロジェクトは何かしらの場面でビルドをする必要があるのか、どっちかなのか。それとも、PhingはJavaのビルドツールAntのPHP版だからという理由で、ビルドという言葉が使い回されているのか。

これ以上は調べてもなかなか出てこなかったので断念。。 またの機会に調べよう。