ここではLaravel用のパッケージを作成するやり方を紹介するよ
まず初めにLaravelの新規プロジェクト(ここでは名前を"larapack"にしておきます)を作成します
laravel new larapack
新規Laravelプロジェクト配下に移動して、パッケージ作成用のスケルトンリポジトリをコピーしてきます
パッケージ作成用のスケルトンリポジトリはこちら
ちなみに:
スケルトンリポジトリの使い方に従ってリポジトリテンプレートを自分のGitHubリポジトリに複製したものを使ってください
cd larapack
ここで新規laravelプロジェクト配下に packages/パッケージ名 となるようにcloneします
(clone元のGitHubリポジトリも↑で複製したスケルトンリポジトリに合わせて変更してください)
git clone [email protected]:あなたのGitHubユーザ名/package-skeleton-laravel.git packages/mylarapack
git cloneしたスケルトン内にあるconfigure.php
を実行してパッケージの初期セットアップをします
cd packages/mylarapack
php ./configure.php
セットアップでは下記のような質問が出てくるので、自分の環境に合わせて入力していきます
()内はデフォルト値なので、何も入力せずにEnterすると、この()内の値が使われます
---以下、実際のパッケージ生成のための質問---
作者名は?(そのままEnterすると()内の値が使われます) (dkc): askdkc
E-mailアドレスは? ([email protected]):
作者のユーザ名は? (askdkc):
Vendor名は? (askdkc):
Vendor namespaceは? (Askdkc): ← vendor名は基本githubのユーザ名と一緒です
パッケージ名は何にする? (mylarapack): ← パッケージ名を変えたい時はここで変えます
Class名はどうする? (Mylarapack):
パッケージの概要はどうする? (このパッケージはmylarapackです):
PhpStanを有効化する? (Y/n): ← この辺はONにしておくと後が楽
Laravel Pintを有効化する? (Y/n): ← この辺はONにしておくと後が楽
GitHubのDependabotを有効化する? (Y/n): ← この辺はONにしておくと後が楽
デバッグ用にSpatieのRayを使う? (Y/n): n. ← SpatieのRayを使ってない人は基本 n です
変更履歴(Changelog)を自動更新するGitHubのworkflowを有効化する? (Y/n):
------
Author : askdkc (askdkc, [email protected])
Vendor : askdkc (askdkc)
Package : mylarapack <このパッケージはmylarapackです>
Namespace : Askdkc\Mylarapack
Class name : Mylarapack
---
Packages & Utilities
Use Laravel/Pint : yes
Use Larastan/PhpStan : yes
Use Dependabot : yes
Use Ray App : no
Use Auto-Changelog : yes
------
このスクリプトは上記の内容でスケルトンの中身を全て書き換えます
変更しちゃっていい? (Y/n):
`composer install`を実行して、初期テストしちゃう? (y/N):
さて、もうこのスクリプト自身が不要なので、消しときましょうか? (Y/n):
---質問終了---
それでは実際にパッケージをいじってみましょう
まず始めにサービスプロバイダーを確認します
次のファイルをお好みのエディタで開きます
src/MylarapackServiceProvider.php
このパッケージでは簡単なビューを表示させる例を作成しますので、下記のように修正します
18行目付近
---before---
$package
->name('mylarapack')
->hasConfigFile()
->hasViews()
->hasMigration('create_mylarapack_table')
->hasCommand(mylarapackCommand::class);
------------
↓
---after---
$package
->name('mylarapack')
->hasViews()
->hasRoute('web');
-----------
次にRouteファイルを作成します
Routeファイルは通常のLaravelと同様、routes/web.phpファイルを作成します
ファイルの作成(エディタから作ってもOKです)
touch routes/web.php
routes/web.phpをお好みのエディタで開き、下記のように/larapack
というrouteを作成します
<?php
use Illuminate\Support\Facades\Route;
Route::get('/larapack', function () {
return view('mylarapack::index');
});
パッケージ内のviewファイルを読み込ませる場合には パッケージ名::viewファイル名
を指定する必要があります
(そうしないとLaravelが指定されたviewがどこにあるのか探せないので)
Routeで作成したviewを作ります
場所は通常のLaravel同様のパスresources/views/
をパッケージ内に作るイメージです
ファイルの作成(エディタから作ってもOKです)
touch resources/views/index.blade.php
上記Viewファイルをお好みのエディタで開き、適当な文字を書いておきます
<h1>Hello from Mylarapack!</h1>
見えてる?
それでは作った内容が上手く動くかテストを書いてみましょう
このスケルトンパッケージではスケルトンの事前構成により、お手軽にテストが実行できるようになっています
まずはテストに必要なパッケージを composer
でインストールしましょう
composer install
次にテスト用ファイルを編集しましょう
お好みのエディタで tests/ExampleTest.php
を開きます
---before---
<?php
it('can test', function () { //この辺は初期サンプルなので消します
expect(true)->toBeTrue(); //この辺は初期サンプルなので消します
});
------------
↓
---after---
<?php
// エルデのテスト
test('この先、Status 200があるぞ', function() {
$this->get('larapack')->assertStatus(200);
});
test('この先、ViewにHelloがあるぞ', function() {
$this->get('larapack')->assertSee('Hello');
});
----------
ではテストを実行してみましょう
composer test
問題なければ下記の様に出力されます
> vendor/bin/pest
PASS Tests\ExampleTest
✓ この先、Status 200があるぞ
✓ この先、ViewにHelloがあるぞ
Tests: 2 passed
Time: 0.08s
それでは作ったパッケージを実際にLaravelにインストールしてみましょう
このパッケージはテストしやすいように既に新規Laravel内に作られているので、後はLaravelがそれを発見できるようにするだけです
まず、Laravelのトップディレクトリまで戻ります
現在のディレクトリを確認すると恐らく下記の様な感じでパッケージの中にいると思います
pwd
/Users/UserName/Sites/larapack/packages/mylarapack
なのでLaravelプロジェクト(larapack)のディレクトリまで戻ります
cd ../..
pwd
/Users/UserName/Sites/larapack
次にLaravelのcomposer.jsonを編集して作成したパッケージが読み込める様にします
お好みのエディタで下記の様に修正
composer.json 末尾付近
---before---
"minimum-stability": "dev",
"prefer-stable": true
}
------------
↓
---after---
"minimum-stability": "dev",
"prefer-stable": true, // ← ここに , 足すの忘れないでね
"repositories": {
"local": {
"type": "path",
"url": "./packages/*",
"options": {
"symlink": true
}
}
}
}
-----------
作成したパッケージをLaravelにインストールします
composer require askdkc/mylarapack ← パッケージ名を変えてる場合は、ここも適宜変えてね
Laravelを起動して動作確認します
php artisan serve
下記にアクセス
http://localhost:8000/larapack
画面に
Hello from Mylarapack! 見えてる?
と表示されたら成功です
現在の状態になればLaravelのディレクトリ内にある packages/mylarapack
に加えた変更は直ぐにLaravelから確認可能になっています
Viewファイルに変更を加える等、色々といじってみましょう
作成したパッケージはGitHubに登録し、その登録したリポジトリをpackagistに登録することで、直ぐに全世界に公開することができます
今回の例では、次の様にすることによってGitHubへのpushの準備が可能です
- パッケージのディレクトリに移動します
cd packages/mylarapack
- gitコマンドでファイルを追加してコミットします(既にスケルトンが.gitignoreを用意してるので楽々です)
git add .
git commit -am "Initial Commit"
-
GitHubで新規リポジトリを作成します
-
GitHubのリポジトリの説明にある …or push an existing repository from the command line の手順を実行します 一例:
git remote add origin [email protected]:USERNAME/YOUR_REPOSITORY.git
git branch -M main
git push -u origin main