Laravel4、パッケージ追加時のapp.php自動更新パッケージ:Prepper
手前味噌ですが、Laravel4のパッケージをComposerでインストール、アンインストールする時に、自動的にapp/config/app.php
を書き換えるパッケージをGitHubで公開しました。Packagistにも登録済みです。
larave-ja/laravelには、最初から取り込むようにしています。
自動と言っても、インストールするパッケージが、登録情報のproviders.jsonファイルを用意してくれている場合のみ、サービスプロバイダーとクラスエイリアスの自動登録・削除処理を行います。さすがに何もない場合は、自動で処理できません。
Prepperは人気があり、providers.jsonファイルを自前で持っていない以下のパッケージのため、ローカルにjsonファイルを用意してあります。ですから、以下のリストのパッケージは、providers.jsonが用意されていませんが、Prepperがapp.phpを更新します。
- barryvdh/laravel-ide-helper
- cartalyst/sentry
- frozennode/administrator
- jasonlewis/basset
- juy/profiler
- loic-sharma/profiler
- way/generators
- way/guard-laravel
- zizaco/confide
- zizaco/entrust
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"
の行を取り除き、composer
updateを実行してください。
動作のさせ方
特別にすることはありません。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
andfacade
: 登録するクラスエイリアスの情報PreInstallMessage
: 登録前に表示するメッセージPostInstallMessage
: 登録後に表示するメッセージPreUninstallMessage
: 登録削除前に表示するメッセージPostUninstallMessage
: 登録削除後に表示するメッセージ
メッセージ関係が、Prepperで追加した独自セクションです。
注意点
Prepperはapp/config/app.php
ファイルのみ更新します。その他のapp.phpファイルは変更しません。
app.php
ファイルのaliases
とproviders
配列の最後の要素の最後に、カンマを付けて置いてください。最後の要素のカンマが無い場合、インストール時の登録は行いません。また、アンインストール時の削除も、カンマで終わっていない要素は取り外しません。
このパッケージは、ベータのまま終わる可能性が大きいです。この手の機能を追求するようにGitHubにProposalしましたが、Taylorさんが4.1に向けて研究中のことでした。順調に行けば、次期バージョンでは、似たような機能が実現されるでしょう。それまでの間のつなぎとして、ご利用ください。
正直、この手の機能は、公式で採用されて、全パッケージがjsonファイルを用意してくれないと、使い勝手がよくありません。ですから、どんな形であれ、正式に機能が取り込まれることを願っています。そうすれば、app.phpの更新という馬鹿らしい手間を、インストールのたびに行わなくて済むようになります。