LoginSignup
5
8

More than 3 years have passed since last update.

【Laravel】モジュール化

Last updated at Posted at 2019-09-25

モジュール化したい

毎回 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 などを使って統一感を図ったり、全体で共通のモジュールを作って、その共通レイアウトを
各モジュールビューで参照したりすれば統一感はとれそう。

5
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
8