Composer の使い方(その2:スクリプト)
前回、「Composer の使い方(その1:概要)」の続きです。今回はスクリプトについてです。
スクリプトとは?
composer.json にスクリプトを定義しておくと、Composer からそのスクリプトを実行できます。 特定の定型処理などをまとめておきたいという場合に、登録しておくと便利です。
スクリプトを登録する
composer.json ファイルの "scripts" 項目として記載することで登録することができます。 スクリプトは、文字列(単一のスクリプトの場合のみ)または、配列(単一または複数のスクリプトの場合)のいずれかで定義できます。 配列で指定した場合は、その配列に定義した順番で実行されます。
{ "name": "hoge/hoge", "require": { "monolog/monolog": "^2.2" }, "scripts": { "hello": "echo Hello" } }
スクリプトを手動実行する
登録したスクリプトは、run-script
コマンドで実行することができます。
run-script
コマンドには、エイリアス(別名) run
コマンドがあります。
php composer.phar run-script hello
> echo Hello Hello
Composer のコマンドと異なるスクリプト名の場合は、run-script
(もしくは run
)を省略し、Composer のコマンドのように実行することができます。
php composer.phar hello
> echo Hello Hello
Composer で発生するイベントでスクリプトを自動実行する
Composer では発生するイベントと同じ名前でスクリプトを登録すると、そのイベントが発生した際に登録したスクリプトが自動で実行されます。 イベントは数が多いので、ここでは代表的なイベントのみ記載しておきます。 詳しくは公式サイトをご覧ください。
イベント名 | 発生するタイミング |
---|---|
pre-install-cmd | install コマンドの実行前 |
post-install-cmd | install コマンドの実行後 |
pre-update-cmd | update コマンドの実行前 もしくは、composer.lock ファイルが無い状態で install コマンドの実行前 |
post-update-cmd | update コマンドの実行後 もしくは、composer.lock ファイルが無い状態で install コマンドの実行後 |
pre-autoload-dump | install / update コマンド、もしくは dump-autoload コマンドで、オートローダーが作成される前 |
post-autoload-dump | install / update コマンド、もしくは dump-autoload コマンドで、オートローダーが作成された後 |
{ "name": "hoge/hoge", "require": { "monolog/monolog": "^2.2" }, "scripts": { "pre-install-cmd": "echo pre-install", "post-install-cmd": "echo post-install" } }
vendor/bin のバイナリを実行する
パッケージの中には、インストール時に vendor/bin ディレクトリにバイナリを配置するものもあります。 vendor/bin ディレクトリは、Composer でスクリプトを実行した際に、パスが解決されます。 そのため、vendor/bin ディレクトリにあるバイナリを composer.json の scripts から指定することができます。
下記の例では、test スクリプトを実行すると、vendor/bin/phpunit が実行されます。
{ "name": "hoge/hoge", "require-dev": { "phpunit/phpunit": "^9.5" }, "scripts": { "test": "phpunit" } }
別のスクリプトを参照する
スクリプト名の前に @
を付けることで、スクリプトから別のスクリプトを呼び出すことができます。
スクリプトの再利用を可能にし、重複を避けることができます。
下記の例では、helloworld スクリプトを実行すると、hello スクリプトと、world スクリプトが順番に実行されます。
{ "name": "hoge/hoge", "require-dev": { "phpunit/phpunit": "^9.5" }, "scripts": { "helloworld": [ "@hello", "@world" ], "hello": "echo Hello", "world": "echo world" } }
> echo Hello Hello > echo world world
Composer コマンドの呼び出し
スクリプトで、Composer コマンドを呼び出すには、@composer
と記述します。
{ "name": "hoge/hoge", "require-dev": { "phpunit/phpunit": "^9.5" }, "scripts": { "test": [ "@composer install", "phpunit" ] } }
PHP の実行
スクリプトで、PHP を実行するには、@php
と記述します。
{ "name": "hoge/hoge", "require-dev": { "phpunit/phpunit": "^9.5" }, "scripts": { "test": [ "@php script.php", "phpunit" ] } }
環境変数の設定
スクリプトで、環境変数を設定するには、@putenv
と記述します。
{ "name": "hoge/hoge", "require-dev": { "phpunit/phpunit": "^9.5" }, "scripts": { "test": [ "@putenv HOGE=hogehoge", "echo %HOGE%" ] } }