vendor/bin/phpunitの代替手段

  • 28
    いいね
  • 1
    コメント
この記事は最終更新日から1年以上が経過しています。

composerでインストールしたdevツールの実行方法について

例えばPHPUnitの場合。
https://phpunit.de/

$ composer require --dev 'phpunit/phpunit'

こんな風にインストールしたとしたら、phpunitコマンドは通常vendor/bin/phpunitに生える。
当然、そこにPATHは通ってないのが普通なのでphpunitと言う風にコマンド実行できない。

vendor/bin/phpunit

まあ、こうすれば実行できる。

$ vendor/bin/phpunit

しかしコマンドが長くなるし、イマイチ格好良くない。
そもそも、vendor/binはcomposerの設定によって変更可能であり、ハードコードするのも行儀が悪い。

$(composer config bin-dir)/phpunit

vendor/binのハードコードをなくすとしたら、こう書ける。しかし大変ダサい…。vendor/binよりもタイプ数増えてるし。

$ $(composer config bin-dir)/phpunit

composer-scriptsで生やす

composer.jsonにscriptsという項目を追加すると、composerに任意のコマンドを生やすことができる。

例えばこんなふうに書いておくと、

{
// ...
  "scripts": {
    "test": "phpunit"
  }
}
$ composer test

でvendor/bin/phpunitが実行されるようになる。
vendor/bin/を書いていないことに注目。PATHの先頭にvendor/bin/を追加してくれるので、意識しなくてもいいようになってる。npmにも似たような機能あるよね。

短く書けるし、何回も実行する場合はコマンドを生やしておくといいと思う。

なお、この状態でphpunit自体にオプションを渡したい場合は--を挟む必要がある。

$ composer test -- --colors=always

まあ面倒くさいので、いつも指定するオプションならばcomposer.json側に書き込んでしまったほうが良い。

composer exec コマンドを使う

RubyのBundlerに似たような機能があるが、composerにもexecコマンドが追加された(2016年2月頃)。古いcomposerを使ってる人はself-updateしてみよう。

これを経由すると、割とスッキリ書ける。

$ composer exec phpunit

何回も実行するのであればscriptsで生やしてもいいと思うけど、execの方がお手軽ではある。
ちなみに、今試した感じだと「--」によるオプション渡しがうまく動作していないようだった。。今はまだscriptsの方が安定してるかなあ。。