先日、Laravel-boilerplateというオープンソースのプロジェクトのコードを見ていて、composerでプロジェクトのキャッシュのクリアー、ユニットテストの実行やコードの整形などいろいろなタスクを実行できることに気づきました。今回はその話です。
まっさらでインストールしたLaravelのプロジェクトでは、composer.jsonのscriptsのセクションは、以下のようになります。
...
"scripts": {
"post-autoload-dump": [
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
"@php artisan package:discover --ansi"
],
"post-root-package-install": [
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"@php artisan key:generate --ansi"
]
}
}
上記のコマンドを説明すると、
post-autoload-dumpのタスクは、以下のようにdump-autoloadを実行したときに自動的に実行され、composer.jsonで指定されているパッケージの自動ディスカバーをしてくれます。昔のLaravelではこれいちいちconfig/app.phpファイルでのパッケージの指定していました。
$ composer dump-autoload Generating optimized autoload files> Illuminate\Foundation\ComposerScripts::postAutoloadDump > @php artisan package:discover --ansi Discovered Package: facade/ignition Discovered Package: fideloper/proxy Discovered Package: laravel/tinker Discovered Package: nesbot/carbon Discovered Package: nunomaduro/collision Package manifest generated successfully. Generated optimized autoload files containing 4218 classes
composer create-projectの実行でもこのスクリプトは実行されます。
post-root-package-installのタスクは、プロジェクト作成時において.envファイルがないときに実行され、.env.exampleから.envのファイルの作成します。
最後の、post-create-project-cmdのタスクは、これまたプロジェクト作成時に実行され、.envで使用される暗号キーを自動作成して.envに保存します。
さて、今度はlaravel-boilerplateのcomposer.jsonを見てみます。scriptsのセクションでは、上のデフォルトのスクリプトに付け加えて、いくつか独自のタスクのためのスクリプトを追加しています。以下では私が説明のためにコメントしていますが、jsonファイルはコメント指定不可なので注意を。
...
"scripts": {
"post-autoload-dump": [
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
"@php artisan package:discover --ansi"
],
"post-root-package-install": [
"@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
],
"post-create-project-cmd": [
"@php artisan key:generate --ansi"
],
"post-update-cmd": [ // php stormなどのIDEエディターのヘルパーのため。
"@php artisan ide-helper:generate",
"@php artisan ide-helper:meta"
],
"clear-all": [ // bootstrap/cacheやstorage/frameworkなどに含まれるキャッシュファイルを削除して、vendor/composer/autoload_real.phpを再作成
"@php artisan clear-compiled",
"@php artisan cache:clear",
"@php artisan route:clear",
"@php artisan view:clear",
"@php artisan config:clear",
"@php artisan permission:cache-reset",
"composer dumpautoload -o"
],
"cache-all": [ // 設定データやルートのデータをキャッシュ。bootstrap/cacheにキャッシュファイルを作成
"@php artisan config:cache",
"@php artisan route:cache"
],
"reset": [ // composer関連のファイルをクリア
"composer clear-all",
"composer cache-all"
],
"test": "vendor/bin/phpunit", // ユニットテストの実行
"test-coverage": "vendor/bin/phpunit --coverage-html coverage", // ユニットテストのカバレージの作成
"format": "vendor/bin/php-cs-fixer fix --allow-risky=yes" // コードの整形
}
}
最後に、追加されたスクリプトは、以下のように実行できます。
$ composer run clear-all
便利ですね。
紹介しておきながらなんですが、私はこれらのタスクは、Makefileに入れてmakeで実行します。それに関してはいつか紹介します。
メルマガ購読の申し込みはこちらから。