カテゴリ: Micronaut 更新日: 2026/03/15

Micronautプロジェクトを複数モジュール化する方法!Gradleの構成を解説

Micronautプロジェクトを複数モジュール化する方法!Gradleの構成を解説
Micronautプロジェクトを複数モジュール化する方法!Gradleの構成を解説

先生と生徒の会話形式で理解しよう

生徒

「先生、Micronautのプロジェクトを複数のモジュールに分けて管理したいんですが、どうすればいいですか?」

先生

「MicronautではGradleを使ってプロジェクトをマルチモジュール化できます。複数のモジュールに分けることで、依存関係の管理やビルド効率を改善できます。」

生徒

「具体的にはどのような構成になるんですか?」

先生

「親プロジェクト(ルート)を作成し、その下にアプリケーションモジュールやライブラリモジュールを作成します。Gradleの設定ファイルでモジュール間の依存関係を指定するのが基本です。」

生徒

「設定例を見せてもらえますか?」

先生

「もちろんです。では具体的にGradleの構成を解説しましょう。」

1. マルチモジュールプロジェクトの基本構成

1. マルチモジュールプロジェクトの基本構成
1. マルチモジュールプロジェクトの基本構成

Micronautで複数モジュール化を行う最大のメリットは、「役割ごとにプログラムを整理できる」点にあります。特に初心者の方は、一つの場所に全てのコードを書くと管理が大変になりますが、モジュール(部品)ごとに分けることで、どこに何が書いてあるか一目でわかるようになります。

例えば、料理をイメージしてみてください。メイン料理(app)、共通の調味料(common)、下準備の工程(service)と分けるようなイメージです。具体的なディレクトリ構成は以下のようになります。


micronaut-multi-module/  (プロジェクト全体を束ねる親フォルダ)
├── build.gradle        (プロジェクト全体の共通設定)
├── settings.gradle     (どのモジュールを使うか登録するファイル)
├── app/                (実際に動くメインアプリケーション)
│   └── build.gradle
├── common/             (共通で使う便利な道具箱・データ定義)
│   └── build.gradle
└── service/            (計算や判定などのビジネスロジック担当)
    └── build.gradle

このように、一つの大きなプロジェクト(親)の中に、複数の小さなプロジェクト(子モジュール)が同居する形をとります。各モジュールには、それぞれの役割に応じたbuild.gradleを配置し、個別に設定を行うことができます。

例えば、プログラミング未経験の方でもイメージしやすいよう、共通モジュール(common)に「挨拶メッセージ」を管理する簡単なクラスを作ってみましょう。


package com.example.common;

// どのモジュールからでも使える「共通の部品」の例
public class GreetingHelper {
    public static String getWelcomeMessage(String name) {
        return "こんにちは、" + name + "さん!Micronautの世界へようこそ。";
    }
}

この構成にすることで、appモジュールは、このcommonにある挨拶プログラムを「借りてくる」だけで使えるようになります。コードがスッキリし、再利用性が高まるのがマルチモジュールの特徴です。それでは、次にこれらのモジュールをどうやって連携させるかを見ていきましょう。

2. settings.gradleでモジュールを登録する手順

2. settings.gradleでモジュールを登録する手順
2. settings.gradleでモジュールを登録する手順

Javaのマルチモジュール開発において、最初に行う重要な作業が「プロジェクトの全体像(構成)」をGradleに教えることです。ルートディレクトリにある settings.gradle というファイルに、各サブプロジェクトを登録することで、Gradleが複数のフォルダを一つの大きなシステムとして認識できるようになります。

プログラミング未経験の方でも直感的に理解できるよう、以下のようにシンプルに記述します。例えば、アプリ本体、共通部品、サービス機能の3つに分ける場合の書き方は次の通りです。


// プロジェクト全体に名前を付けます
rootProject.name = 'micronaut-multi-module'

// 読み込みたいフォルダ(サブモジュール)をカンマ区切り、または個別に行で指定します
include 'app'
include 'common'
include 'service'

この設定ファイルは、いわば「プロジェクトの目次」のような役割を果たします。include を使って登録することで、Gradleは appcommonservice という各フォルダを独立したモジュールとして管理しつつ、お互いの依存関係を解決して一括でビルド(プログラムを動かせる状態にすること)が可能になります。初心者のうちは、新しい機能フォルダを追加したら、まずここに include を書き足すと覚えておけば間違いありません。

3. サブモジュール間の依存関係設定

3. サブモジュール間の依存関係設定
3. サブモジュール間の依存関係設定

サブモジュール間の依存関係は、各モジュールのbuild.gradleに記述します。例えば、appモジュールがcommonを利用する場合は以下のように設定します。


dependencies {
    implementation project(':common')
    implementation("io.micronaut:micronaut-runtime")
}

同様に、serviceモジュールもcommonを依存関係に加えることで、共通のユーティリティやモデルクラスを再利用できます。

4. Gradleビルドの活用ポイント

4. Gradleビルドの活用ポイント
4. Gradleビルドの活用ポイント

マルチモジュール構成では、Gradleのビルドキャッシュや並列ビルドを活用すると効率が向上します。特にMicronautはAOTコンパイルやDIコード生成が含まれるため、サブモジュールごとに並列でビルドすると時間を短縮できます。


# gradle.properties
org.gradle.parallel=true
org.gradle.build-cache=true
org.gradle.daemon=true

これにより、モジュール間の再ビルドが最小限になり、開発効率が大幅に向上します。

5. サンプルプロジェクトのアプリケーションモジュール

5. サンプルプロジェクトのアプリケーションモジュール
5. サンプルプロジェクトのアプリケーションモジュール

簡単なサンプルとして、appモジュールでMicronautアプリケーションを起動する例を示します。


import io.micronaut.runtime.Micronaut;

public class Application {
    public static void main(String[] args) {
        Micronaut.run(Application.class, args);
        System.out.println("Micronautマルチモジュールアプリケーションが起動しました。");
    }
}

Micronautマルチモジュールアプリケーションが起動しました。

この構成で./gradlew buildを実行すると、すべてのモジュールがビルドされ、依存関係も正しく解決されます。

6. モジュール化によるメリットと注意点

6. モジュール化によるメリットと注意点
6. モジュール化によるメリットと注意点

Micronautプロジェクトをモジュール化することで、以下のメリットがあります。

  • 共通ライブラリをサブモジュールとして分離でき、コードの再利用性が向上
  • ビルド対象を限定できるため、開発中のビルド時間を短縮可能
  • CI/CDで部分的なテストやデプロイが可能になる

注意点としては、モジュール間の依存関係が複雑になると管理が難しくなるため、依存関係を整理しながら設計することが重要です。また、GradleのバージョンやMicronautのバージョンにより設定方法が微妙に異なることがあるので、公式ドキュメントも参考にすると安心です。

関連記事:
カテゴリの一覧へ
新着記事
New1
Micronaut
Micronautの@Factoryとは?複雑なBean生成を管理するための方法を解説
New2
Quarkus
QuarkusのDIとCDIを完全理解!@Producesでプロデューサーメソッドを使う方法を初心者向けに解説
New3
Java
JavaのStringBufferクラスを徹底解説!スレッド安全な文字列操作の仕組みと使い分け
New4
Micronaut
Micronautで非同期HTTP処理を行う方法!リアクティブ対応の基礎知識
人気記事
No.1
Java&Spring記事人気No1
Quarkus
Quarkus入門!GitHub ActionsでCI/CDパイプラインを構築して自動ビルドを実現する方法
No.2
Java&Spring記事人気No2
Java
Javaのコンパイルと実行の流れを解説!JVM・JDK・JREの違いも初心者向けに整理
No.3
Java&Spring記事人気No3
Quarkus
QuarkusのCI/CD入門!GitHub Actionsで自動デプロイを実現する方法
No.4
Java&Spring記事人気No4
Micronaut
Micronautのルーティング設定ガイド!プレフィックス付与とAPIバージョニングの基本
No.5
Java&Spring記事人気No5
Micronaut
Micronautのフィルタ徹底解説!HTTPリクエスト共通処理をスマートに追加する方法
No.6
Java&Spring記事人気No6
Java
Java Optional ifPresentの使い方を徹底解説!nullチェックをスマートに省略する方法
No.7
Java&Spring記事人気No7
Java
Java Functionインタフェースの使い方を完全ガイド!map変換と処理チェーンを理解する
No.8
Java&Spring記事人気No8
Java
JavaのString比較を徹底解説!equalsと==の違い、初心者が陥る罠とは?