下記を参考にパッケージ作成環境構築を試した時のメモ。
https://medium.com/laravelapps/laravel-package-development-step-by-step-guide-743d9e5e076e
大まかな流れ
- Laravelをセットアップする(いつもの)
- パッケージ開発環境を作る
- パッケージ開発をする
- composer install 動作確認
- packagist登録
Laravelをセットアップする(いつもの)
ベースにするLaravelをインストールする。
laravel new core
パッケージ開発環境を作る
パッケージは通常 vendor
ディレクトリ内にインストールされる。
まだ公開していないパッケージを作るので適当なディレクトリを作成し、その中で開発をしていく。
今回は /package/username/hoge
にパッケージを作っていく
上記ディレクトリに移動し、composer.json
を準備する
この先作成パッケージの composer.json
とLaravel動作環境の /composer.json
が出て来るので注意。
まず初期化
composer init
作成されたcomposer.json
{
"name": "username/hoge",
"description": "Hoge",
"authors": [
{
"name": "username",
"email": "username@example.com"
}
],
"require": {}
}
これに必要情報を追加していく。
- 依存ファイル
- 名前空間とオートロード
- Laravel用のサービスプロバイダ、ファサード
依存ファイル
動作に必要なパッケージやphpバージョンを指定する
"require": {
"php": "^7.0",
"laravel/framework": "5.6.*",
},
名前空間とオートロード
パッケージに割り当てる名前空間とファイルパスを指定する
"autoload": {
"psr-4": {
"Username\\Hoge\\": "src/"
}
},
Laravel用のサービスプロバイダ、ファサード
Laravelのアプリケーション起動時に自動的に読み込まれるサービスプロバイダやファサードを指定する。
"extra": {
"laravel": {
"providers": [
"Username\\Hoge\\HogeServiceProvider"
]
}
}
今回はサービスプロバイダのみ使う。
サービスプロバイダはartisanコマンドで作成したものを移動、名前空間を変更して使う。
動作確認も兼ねてbootメソッドにdumpメッセージを入れておく。
php artisan make:provider HogeServiceProvider
# app/Providers/HogeServiceProvider.php が生成される
<?php
namespace Username\Hoge; // 名前空間を修正
use Illuminate\Support\ServiceProvider;
class HogeServiceProvider extends ServiceProvider
{
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
// 動作確認用メッセージ
dump('Hello Laravel!');
}
/**
* Register services.
*
* @return void
*/
public function register()
{
//
}
}
完成品
{
"name": "username/hoge",
"description": "hoge",
"authors": [
{
"name": "username",
"email": "username@gmail.com"
}
],
"require": {
"php": "^7.0",
"laravel/framework": "5.6.*"
},
"autoload": {
"psr-4": {
"Username\\Hoge\\": "src/"
}
},
"extra": {
"laravel": {
"providers": [
"Username\\Hoge\\HogeServiceProvider"
]
}
}
}
あとはLaravel実行時にこのディレクトリがロードされるようにすればよい。
repositories
にパッケージディレクトリを指定すると、パッケージインストール時に
"repositories": [
{
"type": "path",
"url": "packages/username/hoge",
"symlink": true
}
],
"require": {
"php": "^7.1.3",
"fideloper/proxy": "^4.0",
"laravel/framework": "5.6.*",
"laravel/tinker": "^1.0",
"username/hoge": "dev-master"
},
これでcomposer install (またはupdate)を実行すれば、 packages/username/hoge
とシンボリックリンク(winならジャンクション)で vendor/username/hoge
にリンクを貼ってくれる。
$composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
- Installing username/hoge (dev-master): Junctioning from packages/username/hoge
Writing lock file
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover
"Hello Laravel!"
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Discovered Package: nunomaduro/collision
Discovered Package: username/hoge
Package manifest generated successfully.
インストールが完了したらLaravelが動作する度にコンソールに動作確認用のデバッグメッセージが出るようになるはず。
php artisan
"Hello Laravel!"
Laravel Framework 5.6.17
Usage:
command [options] [arguments]
...
パッケージ開発をする
省略
packagist登録
作成したパッケージをgithubなどに上げてから登録。
審査などもないようですぐに反映される。
https://packagist.org/
composer install 動作確認
動作確認用のLaravelを別途用意しておくとよい。
composer require username/hoge
でpackagistから導入できるはず
開発用Laravelのcomposer.json
内のrepositoriesのローカルパス参照を削除しても可能。