モジュール
スーパー管理者 → モジュール では、LeadHub インストール環境に登録されているカスタムモジュールのステータスを確認できます。
LeadHub には組み込みの機能モジュールは搭載されていません — モジュールシステムは開発者向けの拡張ポイントであり、コアコードベースに手を加えることなくプラットフォームへ新しい機能を追加することができます。
モジュールシステムとは何ですか?
LeadHub は nWidart/laravel-modules を使用して HMVC(階層型モデル・ビュー・コントローラー) アーキテクチャを実装しています。
HMVC はコードを自己完結型のモジュールに整理します。各モジュールは独自のルート、コントローラー、モデル、ビュー、マイグレーション、サービスプロバイダーを持ち、本質的にメインアプリケーションに読み込まれるミニ Laravel アプリケーションです。これにより以下のことが可能です:
- コアを編集することなく、まったく新しい機能(新しい UI セクション、新しい API エンドポイント、新しいバックグラウンドジョブ)を追加できます。
- スーパー管理者パネルから、または
modules_statuses.jsonを通じて、モジュールを実行時に有効・無効にできます。 - 各モジュールは独立してバージョン管理され、他のモジュールへの依存関係を宣言できます。
インストール(LeadHub に既に含まれています)
パッケージはすでに LeadHub にインストールおよび設定されています。確認するには:
composer show nwidart/laravel-modules
モジュールの設定は config/modules.php にあり、モジュールはプロジェクトルートの Modules/ 以下に保存されています。
最初のモジュールを作成する
# 新しいモジュールのスキャフォールドを作成する
php artisan module:make MyFeature
# 複数のモジュールを一度にスキャフォールドする
php artisan module:make ModuleA ModuleB ModuleC
# デフォルトのボイラープレートファイルなしでスキャフォールドする(最小限)
php artisan module:make MyFeature --plain
module:make を実行すると、モジュールは Modules/MyFeature/ 以下に作成され、自動的に登録されます。
モジュールのボイラープレート構造
Modules/
MyFeature/
app/
Http/
Controllers/ # ルートコントローラー
Middleware/ # モジュールスコープのミドルウェア
Requests/ # フォームリクエストクラス
Models/ # Eloquent モデル
Providers/
MyFeatureServiceProvider.php # メインサービスプロバイダー(自動ロード)
RouteServiceProvider.php # routes/web.php + routes/api.php を読み込む
config/
config.php # モジュールレベルの設定
database/
migrations/ # モジュールのマイグレーション(コアから分離)
seeders/
factories/
resources/
views/ # Blade テンプレート
lang/ # 翻訳文字列
assets/ # JS/CSS(Vite でコンパイル)
routes/
web.php # Web ルート('web' ミドルウェアグループ下で読み込まれる)
api.php # API ルート('api' ミドルウェアグループ下で読み込まれる)
tests/ # フィーチャーテストとユニットテスト
module.json # モジュールのメタデータと依存関係の宣言
composer.json # このモジュールの名前空間の PSR-4 オートローディング
主要ファイルの説明
module.json
モジュールのアイデンティティと読み込み順序を定義します:
{
"name": "MyFeature",
"alias": "myfeature",
"description": "Adds custom feature X to LeadHub",
"keywords": [],
"priority": 0,
"providers": [
"Modules\\MyFeature\\Providers\\MyFeatureServiceProvider"
],
"requires": []
}
priority— 読み込み順序を制御します。数値が小さいほど先に読み込まれます。モジュールが他のモジュールに依存する場合に使用してください。requires— このモジュールが依存するモジュールエイリア スのリストです。LeadHub は読み込み前に依存関係を強制します。
MyFeatureServiceProvider.php
モジュールのエントリポイントです。ルート、ミドルウェア、ビュー、翻訳、バインディングをここに登録してください。スキャフォールドされたプロバイダーはすでに RouteServiceProvider を呼び出し、モジュールのビューと翻訳を自動的に登録します。
config/config.php
モジュールレベルの設定です。以下の方法でアクセスできます:
config('myfeature.some_key');
Laravel の標準的な設定パブリッシング機能を使用して、環境ごとにパブリッシュおよびオーバ ーライドできます。
一般的な Artisan ジェネレーター
# コントローラー、モデル、マイグレーション
php artisan module:make-controller MyController MyFeature
php artisan module:make-model MyModel MyFeature
php artisan module:make-migration create_my_table MyFeature
# リクエスト、ミドルウェア、ポリシー
php artisan module:make-request StoreMyRequest MyFeature
php artisan module:make-middleware CheckSomething MyFeature
php artisan module:make-policy MyPolicy MyFeature
# ジョブ、イベント、リスナー、メール
php artisan module:make-job ProcessSomething MyFeature
php artisan module:make-event SomethingHappened MyFeature
php artisan module:make-listener HandleSomething MyFeature
php artisan module:make-mail WelcomeMail MyFeature
# Artisan コマンド
php artisan module:make-command MyCommand MyFeature
マイグレーションとシードの実行
モジュールのマイグレーションはコアとは別に管理されています。独立して実行してください:
# すべてのモジュールをマイグレートする
php artisan module:migrate
# 特定のモジュールをマイグレートする
php artisan module:migrate MyFeature
# ロールバック
php artisan module:migrate-rollback MyFeature
# シード
php artisan module:seed MyFeature
モジュールの有効化と無効化
コマンドラインから:
php artisan module:enable MyFeature
php artisan module:disable MyFeature
php artisan module:list # すべてのモジュールとそのステータスを表示する
スーパー管理者 → モジュール から:登録された各モジュールの横にあるトグルを使用してください。
モジュールのステータスはプロジェクトルートの modules_statuses.json に保存されます — このファイルはバージョン管理にコミットしてください。
マ ルチテナントに関する考慮事項
LeadHub はマルチテナントです。モジュールを構築する際は以下の点に注意してください:
- テナントスコープのマイグレーション:マイグレーションがテナントレベルのテーブルを作成する場合は、テナントコンテキスト内で
module:migrateをラップしてください。 - サービスプロバイダーの分離:グローバルスコープを汚染しないよう、ミドルウェア、ポリシー、イベントリスナーをモジュールのサービスプロバイダー内に登録してください。
- 機能のゲーティング:モジュールの有効/無効トグルを LeadHub のプランシステムと組み合わせて使用してください — モジュールをグローバルに無効化するか、特定のプランティアに制限できます。
関連情報
- プラン — サブスクリプションティアごとに利用可能な機能を制御する
- システムヘルス — モジュールの読み込みステータスとエラーを監視する
- nWidart/laravel-modules ドキュメント — パッケージのフルリファレンス