Spring BootアプリケーションでのDBFluteとFlywayの紹介
はじめに
はじめまして。
株式会社SHIFT DAAE(ダーエ)テクノロジーグループのグエンです。
この記事では、Spring BootアプリケーションでのORM使用法として、DBFluteとFlywayの組み合わせを紹介します。 DBFluteは強力なORM機能を提供し、Flywayはデータベーススキーマの変更を効率的に管理します。この組み合わせにより、データベース管理の効率化と開発プロセスの高速化を図る方法を紹介します。
開発環境
Windows10
Spring Boot 2.7
Eclipse
maven
前提
Spring Bootのプロジェクトを作成すること
データベースをインストールすること
DBFluteを導入
DBFluteは型安全な動作とコード生成機能を提供するORMフレームワークです。
データベースのエンティティを読み込んで、それに対応するクラスとメソッドを自動生成し、DDLを使用せずに、レコードの取得、更新、追加、削除ができます。
インストール方法はホームページに書いているので、省略します。
DBFluteの使い方
まずは、データベースにアクセスして、テーブルを作成します。
CREATE TABLE USER (
ID NUMBER(9) NOT NULL,
NAME VARCHAR2(300),
PRIMARY KEY (ID)
);
次は、DBFluteクライアント配下の manage.batをクリックして、21番と2番のタスクを実行します。
すると、DBFluteがデータベースのエンティティを読み込んで、USERテーブルに対応するクラスとメソッドを生成します。
生成されたクラス(UserCBやUserBhvなど)を使用して、データベースにレコードを取得、追加することなどができます。
List<User> userList = userBhv.selectList(cb -> {
cb.query().setUserName_Equal("良太");
});
DBFluteのみを使用した場合の限界
DBFluteでは、データベースマイグレーション管理機能を持っていないため、以下のようにいくつか問題があります。
1. 運用の困難さ:
データベーススキーマの変更が頻繁に発生する場合、データベースマイグレーションが複雑になります。新しいバージョンのアプリケーションが展開される際、既存のデータベースに変更を適用する必要があります。データベースマイグレーションスクリプトを管理し、実行するプロセスは煩雑でエラーが発生しやすく、データ整合性の問題を引き起こす可能性があります。特に複数の開発者が同時に作業する場合、競合や衝突が発生しやすくなります。
2. ロールバックの困難さ:
データベーススキーマに関する変更が問題を引き起こした場合、それを元に戻すことが困難です。データベースファーストアプローチでは、変更を元に戻すためにはデータベースのバックアップを取得し、過去の状態に戻す必要があります。これは時間がかかり、データの損失や整合性の問題を引き起こす可能性があります。
3. 複数環境の同期:
開発、ステージング、本番などの異なる環境でデータベーススキーマを同期することが難しくなります。各環境でスキーマ変更を追跡し、適用するための手順を維持する必要があり、エラーのリスクが高まります。
Flywayの出番
Flywayは、データベースマイグレーションを管理するツールです。
インストール方法はホームページに書いているので、省略します。
Flywayを導入することで上記の課題を解決する:
バージョン管理する:Flywayは専用なスクリプトを使用してデータベーススキーマの変更を管理し、スキーマ進化のためのバージョン管理されたアプローチを提供します。
追跡可能性と一貫性:開発から本番環境に至るまで、すべての環境でデータベーススキーマが一貫して適用されることを保証します。
Flywayの使い方
マイグレーションファイルを作成
app/src/main/resources/db/migration 以下にデータベーススキーマ変更が発生するSQLを配置します
$ tree app/src/main/resources/db/migration/
app/src/main/resources/db/migration/
└── V1__create_users_table.sql
0 directories, 1 file
-- V1__create_users_table.sql
CREATE TABLE USER (
ID NUMBER(9) NOT NULL,
NAME VARCHAR2(300),
PRIMARY KEY (ID)
);
マイグレーションを実行
mvn clean flyway:migrate
2回目のマイグレーションファイル作成と実装
$ tree app/src/main/resources/db/migration/
app/src/main/resources/db/migration/
└── V1__create_users_table.sql
└── V2__create_teams_table.sql
0 directories, 2 files
-- V2__create_teams_table.sql
CREATE TABLE TEAM (
ID NUMBER(9) NOT NULL,
NAME VARCHAR2(200),
PRIMARY KEY (ID)
);
flyway:migrate をもう一度実行すればデータベースに最新スキーマが反映されます。
おわりに
DBFluteとFlywayの組み合わせを使用することで、データベーススキーマの変更を迅速かつ確実に管理できるようになり、同時にORMの利点も享受できます。これは、特にチームでの開発環境や、複数の環境(開発、ステージング、本番)での作業において、大きな効果を発揮します。
データベース管理のプロセスを改善し、開発チームの効率を向上させるために、ぜひDBFluteとFlywayの組み合わせを試してみてください。
\もっと身近にもっとリアルに!DAAE公式Twitter/
お問合せはお気軽に
SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/
SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/
SHIFTの導入事例
https://service.shiftinc.jp/case/
お役立ち資料はこちら
https://service.shiftinc.jp/resources/
SHIFTの採用情報はこちら
PHOTO:UnsplashのPankaj Patel