LoginSignup
46
49

More than 5 years have passed since last update.

vendor/bin/phpunitの代替手段

Posted at

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の方が安定してるかなあ。。

46
49
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
46
49