📦

Laravel用パッケージ製作入門

2023/01/22に公開

Laravelのパッケージの作成ガイドだよ

ここではLaravel用のパッケージを作成するやり方を紹介するよ

新規Laravelプロジェクトの作成

まず初めにLaravelの新規プロジェクト(ここでは名前を"larapack"にしておきます)を作成します

laravel new larapack

新規プロジェクトにパッケージスケルトンを導入

新規Laravelプロジェクト配下に移動して、パッケージ作成用のスケルトンリポジトリをコピーしてきます

パッケージ作成用のスケルトンリポジトリはこちら

ちなみに:

スケルトンリポジトリの使い方に従ってリポジトリテンプレートを自分のGitHubリポジトリに複製したものを使ってください

cd larapack

ここで新規laravelプロジェクト配下に packages/パッケージ名 となるようにcloneします

(clone元のGitHubリポジトリも↑で複製したスケルトンリポジトリに合わせて変更してください)

git clone git@github.com:あなたのGitHubユーザ名/package-skeleton-laravel.git packages/mylarapack

スケルトンの自動生成機能を使い、パッケージをセットアップ

git cloneしたスケルトン内にあるconfigure.phpを実行してパッケージの初期セットアップをします

cd packages/mylarapack
php ./configure.php

セットアップでは下記のような質問が出てくるので、自分の環境に合わせて入力していきます
()内はデフォルト値なので、何も入力せずにEnterすると、この()内の値が使われます

---以下、実際のパッケージ生成のための質問---
作者名は?(そのままEnterすると()内の値が使われます) (dkc): askdkc 
E-mailアドレスは? (askdkc@users.noreply.github.com): 
作者のユーザ名は? (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, askdkc@users.noreply.github.com)
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): 

---質問終了---

実際にパッケージをいじってみよう

それでは実際にパッケージをいじってみましょう

ServiceProvider

まず始めにサービスプロバイダーを確認します

次のファイルをお好みのエディタで開きます

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ファイルを作成します

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がどこにあるのか探せないので)

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がそれを発見できるようにするだけです



まず、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への登録

作成したパッケージはGitHubに登録し、その登録したリポジトリをpackagistに登録することで、直ぐに全世界に公開することができます

パッケージのgitへのファイル追加と初期コミット

今回の例では、次の様にすることによってGitHubへのpushの準備が可能です

  1. パッケージのディレクトリに移動します
cd packages/mylarapack 
  1. gitコマンドでファイルを追加してコミットします(既にスケルトンが.gitignoreを用意してるので楽々です)
git add .
git commit -am "Initial Commit"
  1. GitHubで新規リポジトリを作成します

  2. GitHubのリポジトリの説明にある …or push an existing repository from the command line の手順を実行します
    一例:

git remote add origin git@github.com:USERNAME/YOUR_REPOSITORY.git
git branch -M main
git push -u origin main 

それでは楽しい開発ライフを!

元ネタはこちら

この記事が気に入ったらサポートしてね💕

ko-fi

GitHubで編集を提案

Discussion