せっかくなので、これまでに作成した自作パッケージを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