composer-scriptsに
ついて
@Hiraku
自己紹介
• 中野 拓 (@Hiraku)
• 口癖「composerが遅い」
• http://packagist.jp
• https://github.com/hirak/prestissimo
hirak/prestissimo
• composerが速くなるプラグイン
• おかげさまで大分バグが潰せた
prestissimoで色々

試してみたので

その共有です
開発で使うphpxxx
• phpunit, php_codesniffer, phpmd, ...
• どうやってインストールする?
• どうやって実行する?
globalインストールはよくない
• 「phpunit」「phpcs」というコマンドが
globalにある前提で開発すると…
• 場合によっては特定のphpunitバージョンを要
求したりややこしい
• 純粋に開発環境セットアップが面倒
npmの場合
• localインストールする文化がある
• npm install --save-dev xxxxxxx
• 実行するときはnpm test, npm run xxxxx
• http://qiita.com/Jxck_/items/efaff21b977ddc782971
composerでnpmを真似る
• composer require --dev phpunit/phpunit
• composer.jsonのscriptsにコマンドを生やす
scripts: {
test: phpunit --colors=always,
lint: phpcs,
fmt: phpcbf,
doc: php bin/apigen.phar generate,
metrics: php bin/phpmetrics.phar --report-html=artifacts/
metrics.html src/
},
某言語のサブコマンドを真似る
$ composer test #phpunit
$ composer lint #phpcs
$ composer fmt #phpcbf
$ composer doc #apigen
$ composer metrics #phpmetrics
サブコマンドのよさ
• composer listに出てくる
• vendor/bin/... って打つより綺麗
• vendor/bin/は設定で変更できるので、ベタ書きすべ
きでない
• 開発者はcomposer installするだけで

全てのツールが使える
コマンド別の設定
• phpunit.xml.dist を作成
• .gitignoreでphpunit.xmlを無視
• 開発者がphpunit.xmlを作って好きな設定で
phpunitを実行できる余地を残す
使ってるツール紹介
phpunit/phpunit (test)
squizlabs/php_codesniffer
• phpcs (lint) とphpcbf (fmt) がある

両方phpcs.xml.distで設定できる
apigen/apigen
• 生成されたレポートが読みにくかったら

名前空間の切り方が汚い
phpmetrics/phpmetrics
pharの悩み
pharとrequire-dev
• phar版を配布しているツールは多い
• phpunit.phar, phpcs.phar, ...
• ダウンロードしてphp phpunit.pharすれば使
えて便利
• どっちを使うべき?
比較
composer phar
• リポジトリが汚れない
• composer.jsonだけでリポジト
リが完結する美しさ
• 依存が汚れない
• インストールが楽
• インストールできない可能性が
ある
• 依存が汚れる
• ライセンス違反のおそれ
require-devの悩み
• ツールのrequireしているライブラリが被る

symfony/console使いすぎ
• apigenとphpmetricsを同時にインストール出来な
い、とかPHPバージョンによっては起こりえる
• composer install --no-dev した時に消える

問題
pharはOSSライセンス違反の

おそれがある
• 依存ライブラリもまとめてpharに固めてある
• 依存ライブラリのLICENSE.txtはどこに?
特に結論はないです

composer-scriptsについて