先日、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で実行します。それに関してはいつか紹介します。
メルマガ購読の申し込みはこちらから。