Spring モジュリス
Spring モジュリスは、開発者が適切に構造化されたモジュール式の Spring Boot アプリケーションを構築するのに役立つ Spring プロジェクトです。
Spring Modulth は、ドメイン駆動型のモジュール型モノリスを構築するためのツールとベストプラクティスを提供します。 このアプローチにより、開発初期からマイクロサービスアーキテクチャを採用することなく、大規模で複雑なアプリケーションの開発を簡素化できます。
IntelliJ IDEA で Spring Modulitis のサポートを有効にする
Spring Modulth プラグインは IntelliJ IDEA Ultimate にバンドルされており、デフォルトで有効になっています。 この機能は IntelliJ IDEA Community エディションおよび IntelliJ IDEA Edu では利用できません。
Spring Modulth のサポートは、プロジェクトに依存関係を追加した瞬間から利用可能になります。 プラグインが有効になっていることを確認するには、以下の手順を実行してください。
Ctrl+Alt+S を押して設定を開き、 を選択します。
インストール済み タブを開き、 Spring モジュリスを検索して、プラグインの横にあるチェックボックスが選択されていることを確認します。

モジュール型アプリケーションの構造
Spring Moduliti アプリケーションは通常、次の要素で構成されます。
アプリケーションの実行に使用されるクラスを含むメインパッケージ。 このクラスには
@SpringBootApplicationアノテーションが付与されており、通常は実行に使用されるmain(…)メソッドが含まれています。アプリケーションモジュール — 次のものを含むメインパッケージの直接のサブパッケージ。
提供インターフェース :他のモジュールに提供される API で、通常はモジュールが公開する Spring Bean とドメインイベントを使用して実装します。
内部実装コンポーネント: モジュール内の内部使用を目的としており、外部からはアクセスできません。
必須インターフェース: モジュールによる他のモジュールの機能の使用 (Spring Bean の呼び出し、イベントのリッスン、公開された構成プロパティの使用など)。
以下は、単純なアプリケーションの配置例です。
ここでの orders モジュールの OrderRestController.java は、 catalog モジュールの公開された ProductApi.java に依存しています。
IntelliJ IDEA では、 プロジェクト ツールウィンドウ Alt+1 を開くとすぐに、モジュールアプリケーションの構造を確認し、その部分間を移動できます。
下の図では、最上位モジュールが緑色のロックでマークされ、内部コンポーネントが赤色のロックでマークされたモジュラーアプリケーションが示されています。

また、フレームワークの観点からアプリケーションの 論理構造を確認できます。 @SpringBootApplication が付与されたメインのアプリケーションクラスを選択し、 Alt+7 を押します(またはメインメニューの に移動します)。

Modullith 固有の モジュール ノードには、アプリケーションのモジュール、その ID、許可された依存関係、名前付きインターフェースのリストが表示されます。
Spring モジュリスのガイドラインを適用する
IntelliJ IDEA は、 インスペクションと クイックフィックスのセットを提供することで、アプリケーションの構造を Modulith の Spring アーキテクチャ原則に沿って維持できます。 デフォルトでは、これらのインスペクションは重大度レベルがエラーですが、ハイライトされたコードはコンパイルエラーも実行時エラーも発生しません。 これらの問題は Modulith 固有のテストにのみ不合格となります。
Spring を使用してアプリケーションを実装する場合、開発者はさまざまな Spring Bean を他の Bean に挿入する必要がある場合があります。 IntelliJ IDEA は、 bean の自動補完機能を提供することでこの作業を支援します。
Spring Modulth では、この機能が調整されました。 インジェクションがアプリケーションのモジュール境界に違反した場合、補完ポップアップに警告アイコンが表示されます。

既存のコードの場合、IntelliJ IDEA は、Spring Modullith ルールに違反する bean の使用箇所をハイライトし、コードをモジュラー構造に合わせてリファクタリングするクイックフィックスを提案します ( をクリックするか、 Alt+Enter を押すと呼び出されます)。

アーキテクチャガイドに応じて、次のクイックフィックスから選択できます。
コンポーネントを元のモジュールからベースパッケージに移動します。

挿入されたクラスに @NamedInterface のアノテーションを付けて、このクラスを他のモジュールで開きます。

このクラスを含むモジュールを開きます。
このクイックフィックスは、インポートしたいクラスを含むモジュールに対して、
@ApplicationModuleアノテーション付きのpackage-info.javaファイルを作成します。 モジュールは未解決としてマークされます。
アプリケーションモジュールの依存関係を操作する
モジュール間の依存関係を指定すると、IntelliJ IDEA はモジュールの名前の補完と検証、およびモジュール間のナビゲーションを提供します。
あるモジュールから他のモジュールへの依存関係を明示的に追加するには、依存関係を必要とするモジュール内の
package-info.javaファイルを変更する必要があります。例:
ordersモジュールをcatalogモジュールとcommonモジュールに依存させるには、ordersモジュールにあるpackage-info.javaファイルを変更する必要があります。
package-info.javaファイルで、allowedDependencies = {""}の引用符内にキャレットを置き、 Ctrl+Space を押すか、モジュール名の入力を開始します。IntelliJ IDEA は、補完ポップアップに利用可能なモジュール依存関係を表示します。
モジュール— モジュール全体への依存関係。module :: interface— モジュールによって提供される特定の名前付きインターフェースへの依存関係。module :: *— モジュールによって提供されるすべてのインターフェースへの依存関係。

追加したいものを選択して、 Enter を押します。
追加されたモジュールをクリックして Ctrl+B を押すと、そのモジュールに移動できます。
モジュールは、 プロジェクト ツールウィンドウ Alt+1 で選択されます。

依存関係としてリストされているモジュールが存在しない場合は、IntelliJ IDEA は参照をハイライトし、アプリケーションの構造を修正して起動の失敗を防ぐことができます。
