モジュール化したい
毎回 laravel 環境を一から構築するのは良いけど、全機能のモデル、ビュー、コントローラーが単一のディレクトリにごちゃ混ぜになるので機能単位での移植・流用は何かと手間。
でも、プロフィール編集とかユーザー管理とか決まりきった機能は簡単に移植したり流用したい。
なので・・・
モジュール化パッケージを探す
パッケージスト( https://packagist.org/ )は、composer でインストールできるパッケージのリスト。
ここに行って Laravel をモジュール化するためのパッケージを "laravel module" で検索して、現時点で一番上に出てきたのをインストールしてみる。
(玉石混交で、Laravelバージョンにも依ったりするのでインストールしてみて動かない場合は、あきらめてアンインストールして2番目の候補をインストールしてみる。)
インストール
https://packagist.org/packages/nwidart/laravel-modules が出てきた。
詳細ページを見ると、インストール方法や設定方法が記載されているので、それに従って作業して行く。
インストール
Composerを使ってインストールするには、次のコマンドを実行する。
composer require nwidart/laravel-modules
パッケージは自動的にサービスプロバイダーとエイリアスを登録する。
オプションで、次を実行してパッケージの構成ファイルを公開する。
php artisan vendor:publish --provider="Nwidart\Modules\LaravelModulesServiceProvider"
オートローディング
デフォルトではモジュールクラスは自動的にロードされない。psr-4 を使ってモジュールを自動ロードする。
例:
composer.json
{
"autoload": {
"psr-4": {
"App\\": "app/",
"Modules\\": "Modules/"
}
}
}
ヒント:設定した後で composer dump-autoload を実行することを忘れないこと。
ドキュメンテーション
インストール手順と完全なドキュメントは https://nwidart.com/laravel-modules/ にある(英語)。
インストールすると・・・
artisan に module というコマンドが追加される。
php artisan module:make [モジュール名]
を実行するとモジュールがスコフォールド(足場組み)される。
resources/web.php に特に記載しなくても モジュール名 のプリフィクスを付けると
自動的にモジュール内部のルーターやコントローラーが使用される。
モジュール内でのマイグレーション
Modules/モジュール/Database/Migrations の下にマイグレーションファイルを置く。
記述方法はモジュールと言っても、users とかと変わらない。
ただし、モジュール内部のものは以下のコマンドでマイグレーションする。
php artisan module:migrate Bookmark
メリデメ
メリット
- モジュール単位で管理するので機能のオンオフが容易
- コントローラーやビューなどがモジュールディレクトリ以下で管理できるので分かりやすい。
デメリット
- モジュール単位で M(?)VC を持つので冗長になりがち。
- ビューもモジュール単位で個別に持つので統一感を持たせるには注意が必要(※1)
※1 Bootstrap などを使って統一感を図ったり、全体で共通のモジュールを作って、その共通レイアウトを
各モジュールビューで参照したりすれば統一感はとれそう。