May 4, 2013

FuelPHP v1.6リリースに伴い自作パッケージをPackagistに登録してComposerに対応させてみた

FuelPHP v1.6でComposerに標準対応となりました。

せっかくなので、これまでに作成した自作パッケージをPackagistに登録してComposer対応させてみました。


1. レポジトリにcomposer.jsonを作成
以下、composer.jsonの例です。
https://github.com/mp-php/fuel-packages-bitly/blob/master/composer.json
* "require"に"composer/installers"を指定しないと、後述の"type"や"extra"が反応しませんでした。
* "type"に"fuel-package"を指定すると、インストール先がfuel/packagesになりました。
* "extra"の"installer-name"を指定すると、その名前でインストールされました。


2. Packagistへの登録
Packagistへの登録は必須では無いと思いますが、登録しない理由も特に無いので、登録してみました。GitHubのアカウントで登録可能でした。
https://packagist.org/
初期パスワードが良くわからなかったので(GitHub経由で登録すると発行されない??)パスワードの再発行から設定しなおしました。


3. PackagistへGitHubのレポジトリを登録
"Submit Package"から、簡単に登録出来ます。以下、登録してみたパッケージ一覧です。
https://packagist.org/users/mamor/


4. FuelPHPからComposerでインストールしてみる
FuelPHP v1.6のドキュメントルートに新たに誕生したcomposer.jsonの""require"へ、以下のように追記します。
"mp-php/fuel-packages-bitly": "dev-master"
後は、お決まりなコマンドの
php composer.phar install

php composer.phar update
を実行すると、所定の場所にインストールされました。


5. 自作パッケージが、外部パッケージに依存している場合
4のように、FuelPHP標準のcomposer.jsonで自作パッケージをインストールすると、自作パッケージが依存している外部パッケージがfuel/vendorにインストールされました。
なので、自作パッケージのクラスにおけるautoload.phpの読み込みを
require_once VENDORPATH.'autoload.php';
としたいところなのですが、開発するにあたってはGitのsubmoduleで管理したいなーと。

そうすると
* FuelPHP標準のcomposer.jsonでインストールした場合、外部パッケージはfuel/vendor
* submoduleで管理する場合、外部パッケージはfuel/packages/[自作パッケージ]/vendor
となってしまったので、autoload.phpの読み込みを
if (file_exists(__DIR__.'/../vendor/autoload.php'))
{
    require_once __DIR__.'/../vendor/autoload.php';
}
else
{
    require_once VENDORPATH.'autoload.php';
}
のようにしてみました。(もっとキレイな方法はあるのだろうか。。。)

6. GitHubのService HooksでPackagistを自動更新
GitHubのService HooksでPackagistにコミットを通知できたので、設定しておきました。

No comments:

Post a Comment