見出し画像

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 DAAE(ダーエ)テクノロジーグループの開発エンジニアです。

お問合せはお気軽に

SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/

SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/

SHIFTの導入事例
https://service.shiftinc.jp/case/

お役立ち資料はこちら
https://service.shiftinc.jp/resources/

SHIFTの採用情報はこちら

PHOTO:UnsplashPankaj Patel