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

Micronautプロジェクトの基本構成を完全ガイド!初心者でもわかるディレクトリ構造入門

Micronautプロジェクトの基本構成を理解しよう!ディレクトリ構造を解説
Micronautプロジェクトの基本構成を理解しよう!ディレクトリ構造を解説

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

生徒

「Micronautのプロジェクトって、どんなフォルダ構成になっているんですか?」

先生

「Micronautのプロジェクトはシンプルで、どのフォルダに何を置くかが決まっています。」

生徒

「そのフォルダを理解しておけば開発が楽になりますか?」

先生

「もちろんです。プロジェクト構成を理解すると、どこにコードを書くべきか迷わなくなります。では実際の構成を見ていきましょう。」

1. Micronautプロジェクト構成とは?|なぜ構造を知ることが重要なのか

1. Micronautプロジェクト構成とは?|なぜ構造を知ることが重要なのか
1. Micronautプロジェクト構成とは?|なぜ構造を知ることが重要なのか

Micronaut(マイクロノート)のプロジェクトは、Java開発で広く使われている「標準ディレクトリレイアウト」に基づいています。これは、初心者の方でも「どこに何を書けばいいのか」が直感的にわかるような仕組みです。

例えば、私たちが普段「料理のレシピ」を整理するとき、主食・おかず・デザートと分けてファイルに入れるのと同じように、Micronautも「動くプログラム」「設定」「テスト」を別々の引き出し(フォルダ)に整理します。このルールを守ることで、大規模なアプリになっても迷子にならずに開発を進めることができます。

ポイント: Micronautは「設定より規約(Convention over Configuration)」という考え方を大切にしています。決まった場所に置くだけで、フレームワークが自動的に中身を認識してくれるため、難しい設定を自分で書く必要がありません。

未経験の方に向けて、最もシンプルな「プログラムの置き場所」のイメージをJavaコードで見てみましょう。以下のコードは、アプリの心臓部となる非常に簡単な例です。


package example.micronaut;

import io.micronaut.runtime.Micronaut;

// このクラスが「アプリの起動スイッチ」になります
public class Application {
    public static void main(String[] args) {
        // Micronautに「さあ、アプリを動かして!」と命令する一行です
        Micronaut.run(Application.class, args);
    }
}

このように、プログラムはsrc/main/javaという決まった階層に配置します。この構成を理解することは、エラーの少ないスムーズな開発への第一歩となります。それでは、具体的な各フォルダの詳細を順番に確認していきましょう。

2. 基本的なディレクトリ構造を理解しよう

2. 基本的なディレクトリ構造を理解しよう
2. 基本的なディレクトリ構造を理解しよう

Micronautでプロジェクトを新規作成すると、自動的に複数のフォルダやファイルが生成されます。一見複雑に見えるかもしれませんが、Javaの開発で一般的に使われる「Gradle(グレイドル)」というツールの標準的な構成に従っています。

まずは、どの場所に何を配置するのか、全体の「地図」を確認しておきましょう。


project/
 ├─ src/
 │   ├─ main/
 │   │   ├─ java/      (Javaプログラムのソースコードを置く)
 │   │   └─ resources/ (設定ファイルや画像などを置く)
 │   └─ test/
 │       ├─ java/      (動作チェック用のテストコードを置く)
 │       └─ resources/ (テスト時のみ使う設定ファイルを置く)
 ├─ build.gradle      (プロジェクトの設定やライブラリの管理図)
 ├─ gradlew           (Micronautを動かすための実行用スクリプト)
 └─ settings.gradle   (プロジェクト名などを定義するファイル)

主要なフォルダの役割

  • src/main/java:ここが「心臓部」です。あなたが書くJavaのプログラムはすべてこの中に入れます。
  • src/main/resources:アプリの動作設定(ポート番号の変更など)を記述する application.yml などのファイルを置きます。
  • build.gradle:非常に重要なファイルです。「このライブラリを使いたい」といった指示をここに書き込むことで、システムが自動的に準備してくれます。

プログラミング未経験の方は、まずは「src/main/java」にコードを書き、「build.gradle」で設定を管理する、という2点だけを意識すればOKです。実際の開発では、次のようなシンプルなJavaクラスを作成することからスタートします。


package com.example;

import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;

@Controller("/hello")
public class HelloController {

    @Get("/")
    public String index() {
        // ブラウザに「こんにちは!」という文字を返します
        return "こんにちは!Micronautの世界へようこそ。";
    }
}

このファイルを作成する場合も、先ほど確認した src/main/java/com/example/HelloController.java という場所に配置する決まりになっています。構造を理解することで、エラーが起きた際も「どこを直すべきか」が判断しやすくなります。

3. src/main/java に配置するコードの例

3. src/main/java に配置するコードの例
3. src/main/java に配置するコードの例

Micronautのプロジェクトでは、エントリーポイントとなるクラスは通常Applicationという名前で作られます。ここでは基本的なサンプルコードを見てみましょう。


package example.micronaut;

import io.micronaut.runtime.Micronaut;

public class Application {
    public static void main(String[] args) {
        Micronaut.run(Application.class, args);
    }
}

このクラスはアプリケーション全体を起動する役割を持っています。Micronautアプリで最初に実行されるクラスです。

4. コントローラが置かれる場所とサンプル

4. コントローラが置かれる場所とサンプル
4. コントローラが置かれる場所とサンプル

HTTPアクセスを処理するコントローラは、同じsrc/main/javaに置きます。ディレクトリ構造は自由ですが、一般的にはcontrollerというフォルダを作ってまとめます。


package example.micronaut.controller;

import io.micronaut.http.annotation.*;

@Controller("/hello")
public class HelloController {

    @Get("/")
    public String index() {
        return "Hello Micronaut!";
    }
}

コントローラはURLへのアクセスに応じて文字列を返します。このコードを置く場所を迷わないためにもプロジェクト構成を理解することが重要です。

5. 設定ファイルが置かれる src/main/resources

5. 設定ファイルが置かれる src/main/resources
5. 設定ファイルが置かれる src/main/resources

Micronautの設定ファイルであるapplication.ymlはこのフォルダに置きます。アプリケーションの環境設定やポート番号などを変更できます。


micronaut:
  application:
    name: demo-app

設定ファイルはシンプルですが、アプリの動作を大きく左右する重要な役割を持っています。

6. テストコードの配置場所

6. テストコードの配置場所
6. テストコードの配置場所

テストコードはsrc/test/javaに配置します。MicronautではJUnitを使ったテストが一般的で、標準的なJavaテストと同じ形式で書けるため初心者にも理解しやすいです。


package example.micronaut;

import io.micronaut.runtime.server.EmbeddedServer;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

class ApplicationTest {

    @Test
    void testApplicationRuns() {
        assertTrue(true);
    }
}

テストフォルダを分けておくことで、アプリ本体とテストが混ざらず管理しやすくなります。

まとめ

まとめ
まとめ

ここまで、Micronaut(マイクロノート)プロジェクトのディレクトリ構造と、それぞれの役割について詳しく見てきました。モダンなJavaフレームワークであるMicronautは、効率的な開発をサポートするために非常に整理された構成を持っています。

Micronautプロジェクト構成の全体像とSEOの重要性

Javaエンジニアやバックエンドエンジニアを目指す方にとって、プロジェクトの雛形を正しく理解することは、単にコードを書くこと以上に重要です。Micronautは「AOT(Ahead-of-Time)」コンパイルという技術を採用しており、起動速度が非常に速くメモリ消費量も少ないため、マイクロサービスやクラウドネイティブな環境で非常に高い評価を得ています。

ディレクトリ構成を理解しておくことで、チーム開発でのコミュニケーションコストが下がり、保守性の高いアプリケーションを作成できるようになります。具体的には、どのパッケージにインターフェースを置き、どのディレクトリに設定ファイルを配置するかといった共通認識が、開発スピードを左右します。

各ディレクトリの役割の再確認

本記事で紹介したディレクトリ構成のポイントを改めて整理しましょう。

  • src/main/java: アプリケーションのビジネスロジック、コントローラ、サービス、リポジトリなどのソースコードを配置する、いわば「心臓部」です。
  • src/main/resources: application.ymlや静的ファイル、テンプレートを管理します。環境ごとに設定を切り替える場合もこのフォルダが起点となります。
  • src/test/java: 自動テストのコードを配置します。MicronautのDI(依存性の注入)機能を活用したテストもここで行います。
  • build.gradle(またはpom.xml): 依存関係やビルド設定を定義します。Micronautアノテーションプロセッサの設定もここに含まれます。

実践的なパッケージ構成のサンプル

実際の現場で使われるような、より具体的なパッケージ構成の例を紹介します。プロジェクトが大きくなると、単一のパッケージにクラスを詰め込むのではなく、役割ごとにディレクトリを分けるのが一般的です。


// src/main/java/example/micronaut/service/MessageService.java
package example.micronaut.service;

import jakarta.inject.Singleton;

@Singleton
public class MessageService {
    public String getWelcomeMessage() {
        return "Micronautの世界へようこそ!";
    }
}

// src/main/java/example/micronaut/controller/MessageController.java
package example.micronaut.controller;

import example.micronaut.service.MessageService;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;
import jakarta.inject.Inject;

@Controller("/api")
public class MessageController {

    @Inject
    MessageService messageService;

    @Get("/welcome")
    public String welcome() {
        return messageService.getWelcomeMessage();
    }
}

このように、コントローラ(Controller)とサービス(Service)を分けることで、ロジックの再利用性が高まり、ユニットテストも書きやすくなります。jakarta.inject.Singleton@Injectといった標準的なアノテーションを使いこなすことが、Micronautマスターへの第一歩です。

今後の学習の進め方

プロジェクトの構成を把握した後は、Micronaut Dataを使ったデータベース連携や、Micronaut Securityを用いた認証・認可機能の追加に挑戦してみるのがおすすめです。また、Dockerを用いたコンテナ化も非常に簡単に行えるため、クラウドへのデプロイを見据えた学習も進めてみてください。

Micronautは、Spring Bootを使っているユーザーにとっても馴染みやすい設計でありながら、より軽量で高速という特徴を持っています。Javaの最新仕様を取り入れつつ、クラウドネイティブ時代に最適なアーキテクチャを学ぶ上で、これほど優れた教材はありません。まずは自分でもプロジェクトを立ち上げ、今回学んだ構造を確認しながら手を動かしてみることを強くおすすめします。

先生と生徒の振り返り会話

生徒

「先生、ありがとうございました!Micronautのフォルダ構成って、思っていた以上にシンプルで分かりやすいですね。特にsrc/main/javaの下に自由にパッケージを作って整理できるのが良いなと思いました。」

先生

「その通りです。基本はJavaの標準的な構造(Maven/Gradle)に従っているので、他のフレームワークから移行してきた人でも混乱しにくいのが特徴ですね。でも、Micronautならではのポイントもありましたね?」

生徒

「はい!設定ファイルのapplication.ymlがsrc/main/resourcesにあることや、Applicationクラスが起動の起点になることですね。さっき教えてもらったMessageServiceのように、サービス層を分ける書き方も試してみたいです。」

先生

「素晴らしい意欲ですね!サービス層を分けるのは、DI(依存性の注入)を理解するのにも最適です。Micronautは実行時にReflectionを使わず、ビルド時にDIの解決を行うので、アプリが肥大化しても起動が遅くなりにくいんですよ。」

生徒

「だから軽量で高速なんですね。あと、テストコードがsrc/test/javaに分かれているのも、大規模開発では絶対に必要だなと感じました。テストが書きやすい設計になっているのもMicronautの魅力ですね。」

先生

「そうなんです。ディレクトリ構成を正しく保つことは、テストのしやすさやメンテナンス性に直結します。次はぜひ、データベースに接続するディレクトリ(repository層)を作って、実際にデータを動かす練習をしてみましょう。コツコツ積み上げていけば、すぐに使いこなせるようになりますよ。」

生徒

「わかりました!まずは今回の構成をベースに、自分だけのWebAPIを作ってみようと思います。ありがとうございました!」

関連記事:
カテゴリの一覧へ
新着記事
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と==の違い、初心者が陥る罠とは?