Springの監査設定を完全解説!作成者・更新者・日時を自動記録するAuditingの使い方
生徒
「データベースに登録した日時とか、誰が更新したかって自動で記録できないんですか?」
先生
「Springでは、Auditing機能を使えば、作成者や更新者、日時などを自動で記録できますよ。」
生徒
「それってどうやって設定するんですか?設定が難しそう…」
先生
「安心してください。設定は意外とシンプルです。今回は初心者向けにわかりやすく説明しますね!」
1. SpringのAuditingとは?
SpringのAuditing機能とは、エンティティの作成・更新時に、作成者・更新者・作成日時・更新日時を自動で記録できる仕組みです。これにより、誰がいつ何をしたかを簡単に追跡できるようになります。
たとえば、ブログの記事やユーザー情報などを管理する際に「誰が作成したのか」「いつ更新されたのか」を自動で残すことができます。
2. 必要な依存関係と前提条件
まずは、Spring Data JPAを使用していることが前提となります。また、エンティティにアノテーションを付けるために必要なライブラリも含まれています。
以下のようにspring-boot-starter-data-jpaがbuild.gradleに含まれていることを確認しましょう。
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
}
3. @EnableJpaAuditingでAuditingを有効にする
Spring BootアプリケーションでAuditing機能を有効にするには、設定クラスまたはメインクラスに@EnableJpaAuditingを付ける必要があります。
@SpringBootApplication
@EnableJpaAuditing
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
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の実装
@CreatedByや@LastModifiedByを使うためには、現在のログインユーザーなどの情報を返すAuditorAwareのBeanが必要です。
ここでは簡単な例として、固定値でユーザー名を返す実装を紹介します。
@Configuration
public class AuditorConfig {
@Bean
public AuditorAware<String> auditorProvider() {
return () -> Optional.of("system-user");
}
}
6. Securityと連携して実ユーザー情報を使う方法
実際の業務では、Spring Securityと連携してログインユーザーの情報をAuditorAwareで取得するケースが多いです。
以下のようにSecurityContextHolderを使って現在のユーザー名を取得できます。
@Bean
public AuditorAware<String> auditorProvider() {
return () -> Optional.ofNullable(
SecurityContextHolder.getContext().getAuthentication().getName()
);
}
7. テーブルに反映された監査情報の確認
実際にエンティティを保存または更新すると、createdDateやupdatedDate、createdByなどの情報が自動的に設定されます。
以下は登録直後の例です。
id: 1
title: Springの監査設定
createdBy: system-user
updatedBy: system-user
createdDate: 2025-09-04T13:30:00
updatedDate: 2025-09-04T13:30:00
8. カスタム命名や日付形式の調整方法
監査のフィールド名は自由にカスタマイズできます。例えばcreatedAtやupdatedAtなど、社内の命名規則に合わせることも可能です。
また、LocalDateTime以外にも、InstantやZonedDateTimeも使用できます。
9. よくあるミスと解決方法
SpringのAuditing機能を使う際によくあるミスとして、以下のようなものがあります:
- エンティティに
@EntityListenersを付け忘れる @EnableJpaAuditingをアプリケーションに付けていないAuditorAwareのBean登録を忘れている
このような場合、フィールドがnullのままになったり、自動記録されない問題が発生します。設定を一つずつ丁寧に確認することが大切です。
10. 監査ログで運用保守を強化しよう
監査ログを活用することで、以下のような運用上のメリットがあります:
- 誰が何をしたかの記録が自動で残る
- システムの変更履歴を追跡できる
- トラブル時の原因調査がしやすい
- 開発者の操作を透明化できる
このように、Spring Auditingの活用は、セキュリティや品質管理にも貢献します。