カテゴリ: Micronaut 更新日: 2026/02/11

Micronautでログ出力AOPを実装する方法!共通処理を自動化して保守性を高めよう

Micronautでログ出力AOPを実装する方法!共通処理を自動化しよう
Micronautでログ出力AOPを実装する方法!共通処理を自動化しよう

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

生徒

「Micronautで毎回ログを書くのが大変なんですが、まとめて自動化できますか?」

先生

「MicronautのAOPを使えば、メソッドの前後で自動的にログを出力できます。」

生徒

「特定のメソッドだけにログを入れることもできますか?」

先生

「アノテーションを使えば、必要な場所だけにログ出力を追加できます。仕組みから順番に見ていきましょう。」

1. Micronautにおけるログ出力とAOPの役割

1. Micronautにおけるログ出力とAOPの役割
1. Micronautにおけるログ出力とAOPの役割

Micronautでアプリケーションを開発していると、処理の流れを確認するためにログ出力が欠かせません。しかし、すべてのメソッドに同じようなログコードを書くと、ソースコードが読みにくくなり、修正も大変になります。

そこで役立つのがAOPです。AOPを使うことで、ログ出力のような共通処理をビジネスロジックから分離できます。MicronautのAOPはコンパイル時に処理が決まるため、性能面でも安心して利用できます。

2. ログ出力AOPの基本構成を理解しよう

2. ログ出力AOPの基本構成を理解しよう
2. ログ出力AOPの基本構成を理解しよう

Micronautでログ出力AOPを実装する場合、主に三つの要素を用意します。ログ用のアノテーション、インターセプタ、そしてログを適用したいクラスやメソッドです。

この構成を理解すると、ログ以外の共通処理にも応用できるようになります。初心者のうちは、まず全体の流れを把握することが大切です。

3. ログ用アノテーションを作成する

3. ログ用アノテーションを作成する
3. ログ用アノテーションを作成する

最初に、ログ出力を有効にするためのアノテーションを作成します。このアノテーションを付けたメソッドが、AOPの対象になります。


import io.micronaut.aop.Around;
import io.micronaut.context.annotation.Type;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.annotation.ElementType;

@Around
@Type(LogInterceptor.class)
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface Logged {
}

このアノテーションは、ログ用インターセプタと結びついています。初心者でも、名前を見るだけで役割が想像しやすいのがポイントです。

4. ログ出力を行うインターセプタを実装する

4. ログ出力を行うインターセプタを実装する
4. ログ出力を行うインターセプタを実装する

次に、実際にログを出力するインターセプタを作成します。インターセプタでは、メソッドの実行前と実行後に処理を挟み込めます。


import io.micronaut.aop.MethodInterceptor;
import io.micronaut.aop.MethodInvocationContext;
import jakarta.inject.Singleton;

@Singleton
public class LogInterceptor implements MethodInterceptor<Object, Object> {

    @Override
    public Object intercept(MethodInvocationContext<Object, Object> context) {
        System.out.println("start: " + context.getMethodName());
        Object result = context.proceed();
        System.out.println("end: " + context.getMethodName());
        return result;
    }
}

このように書くだけで、対象メソッドの前後にログを自動で出力できます。複雑な設定は必要ありません。

5. ログ出力AOPをメソッドに適用する

5. ログ出力AOPをメソッドに適用する
5. ログ出力AOPをメソッドに適用する

作成したアノテーションは、ログを出したいメソッドに付与します。これだけで、共通ログ処理が有効になります。


import jakarta.inject.Singleton;

@Singleton
public class SampleService {

    @Logged
    public String execute(String name) {
        return "Hello " + name;
    }
}

この方法なら、ログが不要なメソッドには一切影響を与えません。コードの見通しも良くなります。

6. ログ出力結果のイメージを確認する

6. ログ出力結果のイメージを確認する
6. ログ出力結果のイメージを確認する

実際にメソッドを呼び出すと、次のようなログが出力されます。処理の開始と終了が明確にわかります。


start: execute
end: execute

このようなログは、デバッグや障害調査の際に非常に役立ちます。手作業でログを書く必要がなくなる点も大きなメリットです。

7. ログ出力AOPを使う際の設計ポイント

7. ログ出力AOPを使う際の設計ポイント
7. ログ出力AOPを使う際の設計ポイント

ログ出力AOPを使う際は、どの粒度でログを取るかを意識することが大切です。すべてのメソッドに付けるとログ量が多くなりすぎる場合があります。

MicronautのAOPは軽量ですが、必要な箇所にだけ適用する設計を心がけると、可読性と運用性の両方を高められます。初心者のうちは、サービス層や重要な処理に限定して使うのがおすすめです。

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