Help us understand the problem. What is going on with this article?

vendor/bin/phpunitの代替手段

More than 3 years have passed since last update.

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

Hiraku
PHP, Go界隈をうろうろしています。最近はgRPCと戦ってる。 特に明示していなければ、記事中のソースコード片は `CC-0 1.0` とします。出典表示無しで自由にコピペして頂いて構いません。 ただ、記事自体をコピペされるのは嫌なので、ソースコード部分以外の文章は通常通り全ての著作権を私が保持するものとします。 引用を超える範囲のコピペは止めて下さい。
http://blog.tojiru.net/
mercari
フリマアプリ「メルカリ」を、グローバルで開発しています。
https://tech.mercari.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした