【Laravel】モジュール化

モジュール化したい

毎回 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 を使ってモジュールを自動ロードする。例:

{
  "autoload": {
    "psr-4": {
      "App\\": "app/",
      "Modules\\": "Modules/"
    }
  }
}

ヒント:設定した後で composer dump-autoload を実行することを忘れないこと。
ドキュメンテーション
インストール手順と完全なドキュメントは https://nwidart.com/laravel-modules/ にある(英語)。

インストールすると・・・

artisan に module というコマンドが追加される。

php artisan module:make [モジュール名]

を実行するとモジュールがスコフォールド(足場組み)される。
resources/web.php に特に記載しなくても モジュール名 のプリフィクスを付けると
自動的にモジュール内部のルーターやコントローラーが使用される。

メリデメ

メリット

  • モジュール単位で管理するので機能のオンオフが容易
  • コントローラーやビューなどがモジュールディレクトリ以下で管理できるので分かりやすい。

デメリット

  • モジュール単位で M(?)VC を持つので冗長になりがち。
  • ビューもモジュール単位で個別に持つので統一感を持たせるには注意が必要(※1)

※1 Bootstrap などを使って統一感を図ったり、全体で共通のモジュールを作って、その共通レイアウトを
各モジュールビューで参照したりすれば統一感はとれそう。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account