Composerパッケージの作成

作成したコードモジュールをComposerパッケージにすることも、CodeIgniter 4 用の Composer パッケージを作成することもできます。

フォルダー構造

Composerパッケージの一般的なディレクトリ構造は次のとおりです。

your-package-name/
├── .gitattributes
├── .gitignore
├── LICENSE
├── README.md
├── composer.json
├── src/
│   └── YourClass.php
└── tests/
    └── YourClassTest.php

composer.jsonの作成

パッケージディレクトリのルートに、**composer.json** ファイルを作成します。このファイルは、パッケージとその依存関係に関するメタデータを定義します。

composer init コマンドは、作成に役立ちます。

たとえば、**composer.json** は次のようになります。

{
    "name": "your-vendor/your-package",
    "description": "Your package description",
    "type": "library",
    "license": "MIT",
    "autoload": {
        "psr-4": {
            "YourVendor\\YourPackage\\": "src/"
        }
    },
    "authors": [
        {
            "name": "Your Name",
            "email": "[email protected]"
        }
    ],
    "require": {
        // Any dependencies required by your package go here
    },
    "require-dev": {
        // Any development dependencies (e.g., PHPUnit) go here
    }
}

パッケージ名

ここで重要なのは name フィールドです。パッケージ名は、一般的に "vendor-name/package-name" の形式で、すべて小文字で記述されます。一般的な例を次に示します。

  • your-vendor-name: ベンダー(パッケージの作成者)を識別する名前。自分の名前や組織名など。

  • your-package-name: 作成するパッケージの名前。

そのため、他のパッケージと区別するために、名前を一意にすることが重要です。一意性は、公開する際に特に重要です。

名前空間

パッケージ名は、autoload.psr4 のベンダー名前空間を決定します。

パッケージ名が your-vendor/your-package の場合、ベンダー名前空間は YourVendor でなければなりません。そのため、次のように記述します。

"autoload": {
    "psr-4": {
        "YourVendor\\YourPackage\\": "src/"
    }
},

この設定は、Composer にパッケージのソースコードを自動ロードするように指示します。

ライセンスの選択

オープンソースライセンスに慣れていない場合は、https://choosealicense.com/ を参照してください。CodeIgniter を含む多くの PHP パッケージは、MIT ライセンスを使用しています。

開発ツールの準備

高品質なコードを確保するのに役立つツールはたくさんあります。そのため、それらを使用する必要があります。CodeIgniter DevKit を使用すると、そのようなツールを簡単にインストールして設定できます。

DevKitのインストール

パッケージディレクトリのルートで、次のコマンドを実行します。

composer config minimum-stability dev
composer config prefer-stable true
composer require --dev codeigniter4/devkit

DevKit は、開発に役立つさまざまな Composer パッケージをインストールし、それらのテンプレートを **vendor/codeigniter4/devkit/src/Template** にインストールします。その中のファイルをプロジェクトのルートフォルダにコピーし、必要に応じて編集します。

コーディング規約フィクサーの設定

DevKit は、PHP-CS-Fixer に基づく CodeIgniter コーディング規約 を使用したコーディング規約フィクサーを提供します。

**vendor/codeigniter4/devkit/src/Template/.php-cs-fixer.dist.php** をプロジェクトのルートフォルダにコピーします。

キャッシュファイル用の **build** フォルダを作成します。

your-package-name/
├── .php-cs-fixer.dist.php
├── build/

エディタで **.php-cs-fixer.dist.php** を開き、フォルダパスを修正します。

--- a/.php-cs-fixer.dist.php
+++ b/.php-cs-fixer.dist.php
@@ -7,7 +7,7 @@ use PhpCsFixer\Finder;
 $finder = Finder::create()
     ->files()
     ->in([
-        __DIR__ . '/app/',
+        __DIR__ . '/src/',
         __DIR__ . '/tests/',
     ])
     ->exclude([

これで完了です。コーディング規約フィクサーを実行できるようになりました。

vendor/bin/php-cs-fixer fix --ansi --verbose --diff

**composer.json** に scripts.cs-fix を追加すると、composer cs-fix コマンドで実行できます。

{
    // ...
    },
    "scripts": {
        "cs-fix": "php-cs-fixer fix --ansi --verbose --diff"
    }
}

設定ファイル

ユーザーが設定を上書きできるようにする

パッケージに設定ファイルがあり、ユーザーが設定を上書きできるようにしたい場合は、config('YourConfig') のような短いクラス名で config() を使用して設定ファイルを呼び出します。

ユーザーは、パッケージの設定クラスと同じ短いクラス名を持つ設定クラスを **app/Config** に配置することで、パッケージの設定を上書きできます。 YourVendor\YourPackage\Config\YourConfig のようにパッケージの設定クラスを拡張します。

app/Config での設定の上書き

**app/Config** フォルダにある既知の設定を上書きまたは追加する必要がある場合は、暗黙のレジストラを使用できます。

参考文献

いくつかの公式パッケージを公開しています。独自のパッケージを作成する際の参考として、これらのパッケージを使用できます。