カテゴリ: Spring 更新日: 2025/11/21

Springの監査設定を完全解説!作成者・更新者・日時を自動記録するAuditingの使い方

監査の自動設定:作成者/更新者/日時をAuditingで記録する
監査の自動設定:作成者/更新者/日時をAuditingで記録する

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

生徒

「データベースに登録した日時とか、誰が更新したかって自動で記録できないんですか?」

先生

「Springでは、Auditing機能を使えば、作成者や更新者、日時などを自動で記録できますよ。」

生徒

「それってどうやって設定するんですか?設定が難しそう…」

先生

「安心してください。設定は意外とシンプルです。今回は初心者向けにわかりやすく説明しますね!」

1. SpringのAuditingとは?

1. Springの<code>Auditing</code>とは?
1. SpringのAuditingとは?

SpringのAuditing機能とは、エンティティの作成・更新時に、作成者・更新者・作成日時・更新日時を自動で記録できる仕組みです。これにより、誰がいつ何をしたかを簡単に追跡できるようになります。

たとえば、ブログの記事やユーザー情報などを管理する際に「誰が作成したのか」「いつ更新されたのか」を自動で残すことができます。

2. 必要な依存関係と前提条件

2. 必要な依存関係と前提条件
2. 必要な依存関係と前提条件

まずは、Spring Data JPAを使用していることが前提となります。また、エンティティにアノテーションを付けるために必要なライブラリも含まれています。

以下のようにspring-boot-starter-data-jpabuild.gradleに含まれていることを確認しましょう。


dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
}

3. @EnableJpaAuditingでAuditingを有効にする

3. <code>@EnableJpaAuditing</code>でAuditingを有効にする
3. @EnableJpaAuditingでAuditingを有効にする

Spring BootアプリケーションでAuditing機能を有効にするには、設定クラスまたはメインクラスに@EnableJpaAuditingを付ける必要があります。


@SpringBootApplication
@EnableJpaAuditing
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

4. 監査用エンティティフィールドの設定

4. 監査用エンティティフィールドの設定
4. 監査用エンティティフィールドの設定

次に、エンティティクラスに@CreatedDate@LastModifiedByなどのアノテーションを使って、自動記録の対象とするフィールドを定義します。


@Entity
@EntityListeners(AuditingEntityListener.class)
public class Article {

    @Id
    @GeneratedValue
    private Long id;

    private String title;

    @CreatedBy
    private String createdBy;

    @LastModifiedBy
    private String updatedBy;

    @CreatedDate
    private LocalDateTime createdDate;

    @LastModifiedDate
    private LocalDateTime updatedDate;
}

5. 作成者・更新者を設定するAuditorAwareの実装

5. 作成者・更新者を設定する<code>AuditorAware</code>の実装
5. 作成者・更新者を設定するAuditorAwareの実装

@CreatedBy@LastModifiedByを使うためには、現在のログインユーザーなどの情報を返すAuditorAwareのBeanが必要です。

ここでは簡単な例として、固定値でユーザー名を返す実装を紹介します。


@Configuration
public class AuditorConfig {

    @Bean
    public AuditorAware<String> auditorProvider() {
        return () -> Optional.of("system-user");
    }
}

6. Securityと連携して実ユーザー情報を使う方法

6. Securityと連携して実ユーザー情報を使う方法
6. Securityと連携して実ユーザー情報を使う方法

実際の業務では、Spring Securityと連携してログインユーザーの情報をAuditorAwareで取得するケースが多いです。

以下のようにSecurityContextHolderを使って現在のユーザー名を取得できます。


@Bean
public AuditorAware<String> auditorProvider() {
    return () -> Optional.ofNullable(
        SecurityContextHolder.getContext().getAuthentication().getName()
    );
}

7. テーブルに反映された監査情報の確認

7. テーブルに反映された監査情報の確認
7. テーブルに反映された監査情報の確認

実際にエンティティを保存または更新すると、createdDateupdatedDatecreatedByなどの情報が自動的に設定されます。

以下は登録直後の例です。


id: 1
title: Springの監査設定
createdBy: system-user
updatedBy: system-user
createdDate: 2025-09-04T13:30:00
updatedDate: 2025-09-04T13:30:00

8. カスタム命名や日付形式の調整方法

8. カスタム命名や日付形式の調整方法
8. カスタム命名や日付形式の調整方法

監査のフィールド名は自由にカスタマイズできます。例えばcreatedAtupdatedAtなど、社内の命名規則に合わせることも可能です。

また、LocalDateTime以外にも、InstantZonedDateTimeも使用できます。

9. よくあるミスと解決方法

9. よくあるミスと解決方法
9. よくあるミスと解決方法

SpringのAuditing機能を使う際によくあるミスとして、以下のようなものがあります:

  • エンティティに@EntityListenersを付け忘れる
  • @EnableJpaAuditingをアプリケーションに付けていない
  • AuditorAwareのBean登録を忘れている

このような場合、フィールドがnullのままになったり、自動記録されない問題が発生します。設定を一つずつ丁寧に確認することが大切です。

10. 監査ログで運用保守を強化しよう

10. 監査ログで運用保守を強化しよう
10. 監査ログで運用保守を強化しよう

監査ログを活用することで、以下のような運用上のメリットがあります:

  • 誰が何をしたかの記録が自動で残る
  • システムの変更履歴を追跡できる
  • トラブル時の原因調査がしやすい
  • 開発者の操作を透明化できる

このように、Spring Auditingの活用は、セキュリティや品質管理にも貢献します。

カテゴリの一覧へ
新着記事
JavaのHashSetのaddメソッドを完全ガイド!初心者でもわかるセットの使い方
SpringのBindingResultを完全ガイド!初心者でもわかる入力チェックとエラー処理
Spring Securityでフォームログインを実装!ログイン・ログアウト・Remember-Meの設定方法まとめ
Javaの@Validアノテーションを徹底解説!初心者でもわかる入力値検証の基本
人気記事
No.1
Java&Spring記事人気No1
JavaのExceptionクラスを完全解説!初心者でも理解できる例外処理の基本
No.2
Java&Spring記事人気No2
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.3
Java&Spring記事人気No3
JavaのDateクラスの使い方を完全ガイド!初心者でもわかる日付操作
No.4
Java&Spring記事人気No4
Javaのラムダ式anyMatchの使い方:containsやList検索の実践テクニック
No.5
Java&Spring記事人気No5
Javaのラムダ式でListを抽出&変換!filterとmapでスマートに操作
No.6
Java&Spring記事人気No6
JSPで使えるJavaコードの書き方を徹底解説!初心者向けルールと制限ポイント
No.7
Java&Spring記事人気No7
Spring BootのJakarta移行ガイド!初心者向けjavax→jakarta変更ポイント徹底解説
No.8
Java&Spring記事人気No8
Javaのcountの使い方を完全ガイド!ラムダ式で件数カウントの定石をマスターしよう