Laravel4、パッケージ追加時のapp.php自動更新パッケージ:Prepper

タグ: Laravel4   Composer  

手前味噌ですが、Laravel4のパッケージをComposerでインストール、アンインストールする時に、自動的にapp/config/app.phpを書き換えるパッケージをGitHubで公開しました。Packagistにも登録済みです。

larave-ja/laravelには、最初から取り込むようにしています。

自動と言っても、インストールするパッケージが、登録情報のproviders.jsonファイルを用意してくれている場合のみ、サービスプロバイダーとクラスエイリアスの自動登録・削除処理を行います。さすがに何もない場合は、自動で処理できません。

Prepperは人気があり、providers.jsonファイルを自前で持っていない以下のパッケージのため、ローカルにjsonファイルを用意してあります。ですから、以下のリストのパッケージは、providers.jsonが用意されていませんが、Prepperがapp.phpを更新します。

Prepperのインストール

composer.jsonのrequrire、もしくはrequire-devに以下の一行を加えてcomposer updateを行なってください。

"hirokws/prepper": "dev-master"

もしくは、Composerコマンドで直接"requrire"に追加し、インストールしてください。

composer require "hirokws/prepper:dev-master"

続いてPrepperを動作させるため、以下のコマンドを実行してください。

vendor/bin/prepper-start.sh

Windows環境の方は、次のコマンドです。(ただし、私はテストしていません。)

vendor/bin/prepper-start.bat

Prepperのアンインストール

端末からPrepperを無効にします。

vendor/bin/prepper-stop.sh

Windows環境の方はこちら。(テストしてません。)

vendor/bin/prepper-stop.bat

それから、composer.jsonの中の、"hirokws/prepper": "dev-master"の行を取り除き、composerupdateを実行してください。

動作のさせ方

特別にすることはありません。Composerを使用し、Laravelのパッケージをインストール・アンインストールしてください。

providers.jsonが存在すれば、その情報に従って、app.phpを更新します。無い場合は、何も行いません。

有効・無効の切り替え

有効にするには、端末から、vendor/bin/prepper-start.shを実行します。(Windows環境の場合は、vendor/bin/prepper-start.batです。)

もしくは、ルートのcomposer.jsonを直接書き換えてください。scriptセクションに、以降のjsonを追加します。

    "post-package-install": [
        "Prepper\\Prepper::installPackage"
    ],
    "pre-package-uninstall": [
        "Prepper\\Prepper::uninstallPackage"
    ],

無効にするには、端末から、vendor/bin/prepper-stop.shを実行します。(Windows環境の場合は、vendor/bin/prepper-stop.batです。)

もしくは、ルートのcomposer.jsonから、上記の有効にする時に追加した定義を削除してください。

provides.json

provides.jsonファイルに、サービスプロバイダーとクラスエイリアスを登録・削除するための情報を設定します。

このファイルは、元々、Artisanコマンドを利用してパッケージをインストールためのパッケージである、rtablada/package-installerで定義されている形式の、上位互換バージョンです。

例えば、高機能で初めからつかいやすいプロファイラーパッケージ、"juy/profiler"の場合は、以下のように定義してあります。

{
    "providers": [
        "Juy\\Profiler\\Providers\\ProfilerServiceProvider"
    ],
    "aliases": [
        {
            "alias": "Profiler",
            "facade": "Juy\\Profiler\\Facades\\Profiler"
        }
    ],
    "PostInstallMessage": "Updated app.php config file automatically for juy/profiler.",
    "PostUninstallMessage": "Automatically remove juy/profiler setting from app.php config file."
}

定義に使用できるセクションは以降の通りです。

  • providers : 登録するサービスプロバイダーのクラス名
  • alias and facade : 登録するクラスエイリアスの情報
  • PreInstallMessage : 登録前に表示するメッセージ
  • PostInstallMessage : 登録後に表示するメッセージ
  • PreUninstallMessage : 登録削除前に表示するメッセージ
  • PostUninstallMessage : 登録削除後に表示するメッセージ

メッセージ関係が、Prepperで追加した独自セクションです。

注意点

Prepperはapp/config/app.phpファイルのみ更新します。その他のapp.phpファイルは変更しません。

app.phpファイルのaliasesproviders配列の最後の要素の最後に、カンマを付けて置いてください。最後の要素のカンマが無い場合、インストール時の登録は行いません。また、アンインストール時の削除も、カンマで終わっていない要素は取り外しません。

このパッケージは、ベータのまま終わる可能性が大きいです。この手の機能を追求するようにGitHubにProposalしましたが、Taylorさんが4.1に向けて研究中のことでした。順調に行けば、次期バージョンでは、似たような機能が実現されるでしょう。それまでの間のつなぎとして、ご利用ください。

正直、この手の機能は、公式で採用されて、全パッケージがjsonファイルを用意してくれないと、使い勝手がよくありません。ですから、どんな形であれ、正式に機能が取り込まれることを願っています。そうすれば、app.phpの更新という馬鹿らしい手間を、インストールのたびに行わなくて済むようになります。