この記事は2014年CakePHP Advent Calendarの4日目です。
今回は私が現在支援で関わっているプロジェクトのcomposer.jsonを2つチラ見せしたいと思います。
とは言っても、すべての内容を掲載することはできないので、以下のフィルタがかかっています。
- requireとrequire-devの内容についてversion情報は固定にしているものが多いので、すべて共通で伏字(
x.x
)にしています。 - プライベートリポジトリ内の共通ライブラリも使っているのですが、それは以下の内容から削除しています。
プロジェクトY(仮名)
"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(仮名)
"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のチラ見せをしてみてはいかがですか?