先日、Laravel-boilerplateというオープンソースのプロジェクトのコードを見ていて、composerでプロジェクトのキャッシュのクリアー、ユニットテストの実行やコードの整形などいろいろなタスクを実行できることに気づきました。今回はその話です。

まっさらでインストールしたLaravelのプロジェクトでは、composer.jsonscriptsのセクションは、以下のようになります。

...
    "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-boilerplatecomposer.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で実行します。それに関してはいつか紹介します。

By khino