私たちのプロジェクトのcomposer.jsonチラ見せ::CakePHP Advent(4日目)

この記事は[2014年CakePHP Advent Calendar](http://qiita.com/advent-calendar/2014/cakephp)の4日目です。

今回は私が現在支援で関わっているプロジェクトのcomposer.jsonを2つチラ見せしたいと思います。
とは言っても、すべての内容を掲載することはできないので、以下のフィルタがかかっています。

- requireとrequire-devの内容についてversion情報は固定にしているものが多いので、すべて共通で伏字(`x.x`)にしています。
- プライベートリポジトリ内の共通ライブラリも使っているのですが、それは以下の内容から削除しています。

## プロジェクトY（仮名）

```json
    "require": {
        "cakephp/cakephp": "x.x",
        "cakedc/search": "x.x",
        "sizuhiko/fabricate": "x.x",
        "shama/ftp": "x.x",
        "josegonzalez/cakephp-entity": "x.x",
        "fusic/filebinder": "x.x",
        "yohang/finite": "x.x",
        "symfony/http-foundation": "x.x"
    },
    "require-dev": {
        "phpunit/phpunit": "x.x",
        "pear-pear.horde.org/horde_text_diff": "x.x",
        "cakephp/debug_kit": "x.x",
        "cakedc/migrations": "x.x",
        "sizuhiko/Bdd": "x.x",
        "behat/mink-goutte-driver": "x.x",
        "behat/mink-selenium-driver": "x.x",
        "behat/mink-selenium2-driver": "x.x",
        "weavora/mink-extra-context": "x.x",
        "wsdl2phpgenerator/wsdl2phpgenerator": "x.x"
    }

```

## プロジェクトX（仮名）

```json
    "require": {
        "cakephp/cakephp": "x.x",
        "fusic/filebinder": "x.x",
        "sizuhiko/fabricate": "x.x",
        "phpseclib/phpseclib": "x.x",
        "josegonzalez/cakephp-entity": "x.x",
        "barracudanetworks/archivestream-php": "x.x",
        "josegonzalez/queuesadilla": "x.x",
        "behat/gherkin": "x.x"
    },
    "require-dev": {
        "phpunit/phpunit": "x.x",
        "pear-pear.horde.org/horde_text_diff": "x.x",
        "cakephp/debug_kit": "x.x",
        "sizuhiko/Bdd": "x.x",
        "behat/mink-goutte-driver": "x.x",
        "behat/mink-selenium-driver": "x.x",
        "behat/mink-selenium2-driver": "x.x",
        "cakedc/migrations": "x.x"
    }

```

## 利用しているライブラリの紹介

プロジェクト間で大きな違いはないのですが、利用しているライブラリやCakePHP2プラグイン(以下、バージョンを省略してCakePHPプラグインと記述)について紹介します。

### cakedc/search

CakePHPのSearchプラグインです。簡単に検索機能付きの一覧画面を作れる必須のプラグインです。
http://github.com/CakeDC/search

### sizuhiko/fabricate

主にテストデータを生成するためのデータジェネレータです。RubyのFabricator、FactoryGirlに影響を受けたCakePHPプラグインです。fixtureに記述するデータを利用するとテストが壊れやすくなる問題を解決します。
https://github.com/sizuhiko/Fabricate

### shama/ftp

FTP/SFTPを実行するCakePHPプラグインです。内部ではphpseclibを使っています。私たちのプロジェクトではSFTPをCakePHPから容易に実行できるので利用しています。
https://github.com/shama/cakeftp

### josegonzalez/cakephp-entity

もともとバスケさんがCakePHP1用に開発したプラグインをコアデベロッパーのjoseが引き継いでCakePHP2用にメンテしているCakePHPプラグインです。find結果をarrayでなくEntityオブジェクトで返却します。最新バージョンではCakePHP3と同じように ORM/Table のようにネームスペースなどを使いCakePHP3と互換性を持たせる実装に変わっているので、CakePHP2からCakePHP3へ移行する前に一部の実装を予めCakePHP3に寄せておくことが可能になっています。
https://github.com/josegonzalez/cakephp-entity


### fusic/filebinder

PHPMatsuri優勝者を多数輩出するFusicが公開しているファイル添付を実現するCakePHPプラグインです。ファイルを添付するプラグインはいくつか出ているのですが、機能や利用しやすさなどを比較し採用しています。
https://github.com/fusic/filebinder

### yohang/finite

ステートマシーンのPHP実装で、状態管理/制御を持つオブジェクトのプログラミングでは必須のライブラリです。
http://yohan.giarel.li/Finite/

### symfony/http-foundation

`Response::isClientError()` と `Response::isServerError()` を活用しています（そのためだけという...）
https://github.com/symfony/HttpFoundation

### phpunit/phpunit

PHPUnitです
https://phpunit.de/

### pear-pear.horde.org/horde_text_diff

テキストのdiffを取るのに便利なライブラリです。
http://www.horde.org/libraries/Horde_Text_Diff/download

### cakephp/debug_kit

CakePHPでのアプリケーション開発には必須のDebugKit
https://github.com/cakephp/debug_kit

### cakedc/migrations

DBスキーマをマイグレーションするためのCakePHPプラグイン。継続的インテグレーションを実践するプロジェクトでは必須です
https://github.com/CakeDC/migrations

### sizuhiko/Bdd

CakePHPアプリケーションをBehat/Minkから簡単にテストできるようにするCakePHPプラグインです。私たちのプロジェクトではBehat/Mink/Selenium2とJenkinsの活用でエンドツーエンドテストを実施し継続的インテグレーションを実践しています。
https://github.com/sizuhiko/Bdd

### behat/mink-goutte-driver, behat/mink-goutte-driver, behat/mink-selenium2-driver

Behat/Minkでテストを実行するときに必要となるドライバ群

### weavora/mink-extra-context

Behat/Minkでテストを実行するのに便利なステップをまとめたBehat拡張
https://github.com/weavora/mink-extra-context

### wsdl2phpgenerator/wsdl2phpgenerator

WsdlファイルからPHPのコードを自動生成するライブラリ。生成されるコードも可読性が高く利用も簡単なのでSoapインターフェースを実装するのにお勧めです
http://wsdl2phpgenerator.github.io/wsdl2phpgenerator/

### phpseclib/phpseclib

PHPでRSA, AES, SSH2, SFTP, X.509などを利用するための定番ライブラリ。
http://phpseclib.sourceforge.net/

### barracudanetworks/archivestream-php

動的にtarやzipをダウンロードするためのライブラリ
https://github.com/barracudanetworks/ArchiveStream-php

### josegonzalez/queuesadilla

ジョブキューを実現するためのライトウェイトライブラリ。Beanstalk,In-Memory,Mysql,Redisに対応しています。
http://josegonzalez.viewdocs.io/php-queuesadilla/

### behat/gherkin

Gherkin記法を解釈するためのライブラリですが、プロジェクトではユーザが自然言語で書いた条件定義を解析するのにも利用しています。
https://github.com/Behat/Gherkin

## さいごに

他の人のプロジェクトでどういうライブラリを使っているのか気になりますよね。
CakePHP Adventカレンダー2014では、また空いている日があるので、composer.jsonのチラ見せをしてみてはいかがですか？