0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【初心者学習メモ】Flywayを使ったDBマイグレーション管理

0
Posted at

こんにちは。エンジニア研修中の IT 初心者です。今回は研修や個人開発で学んだ Flyway についてまとめます。
データベースのバージョン管理は初心者にとって理解しにくい部分ですが、Flywayを使うと「コードのようにDBを管理できる」ようになり、とても便利だと感じました。

Flywayとは?

Flyway は データベースのマイグレーションツール です。
「DBスキーマをいつ、誰が、どのように変更したか」をバージョン管理できる仕組みを提供します。

  • SQLファイルやJavaで定義したマイグレーションを順番に適用していく
  • 変更の履歴はデータベースの専用テーブル(flyway_schema_history)に記録される
  • CI/CDやチーム開発で「環境差異」を防ぎやすくなる

つまり、Flywayは「アプリのソースコード管理のGit」に近い役割を、DBに対して担ってくれるものです。

なぜ必要なのか?

初心者の頃は「ALTER TABLEを直接叩けばよくない?」と思っていました。ですが、実際の開発では以下の問題が発生します。

  • 複数人で作業していると、誰がどんなSQLを流したのか分からなくなる
  • 本番環境とローカル環境でスキーマがずれる
  • リリースごとのDB変更が手作業で属人化してしまう

Flywayを使うと、マイグレーションをコード化して全員で共有できるので、上記の課題を解消できます。

Flywayの基本構成

Flywayでは「マイグレーションファイル」を用意して、それを順番に適用します。

  • ファイル名のルール: V{番号}__{説明}.sql
  • 例:
-- V1__create_users_table.sql
CREATE TABLE users (
    id BIGINT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    email VARCHAR(255) UNIQUE NOT NULL
);

-- V2__add_posts_table.sql
CREATE TABLE posts (
    id BIGINT PRIMARY KEY,
    user_id BIGINT NOT NULL,
    body TEXT,
    FOREIGN KEY (user_id) REFERENCES users(id)
);

FlywayはV1, V2…の番号を見て、未適用のものを順に実行していきます。

実行方法

コマンドラインから使う場合

flyway migrate

これで resources/db/migration に置かれたSQLが順番に実行されます。

Spring Bootとの組み合わせ

Spring Bootに flyway-core を依存関係として追加すると、アプリ起動時に自動でマイグレーションが走ります。

<!-- build.gradleやpom.xmlに追加 -->
<dependency>
  <groupId>org.flywaydb</groupId>
  <artifactId>flyway-core</artifactId>
</dependency>

Rollbackはどうする?

Flyway自体には「自動で元に戻す」機能はありません。
代わりに、**「戻したいとき用の逆マイグレーションファイル」**を自分で作る運用が推奨されています。

例:

  • V3__add_age_column.sql で age を追加
  • 戻したいなら U3__remove_age_column.sql を用意して明示的に実行

初心者的には「え、手で戻すの?」と思いましたが、これは DB変更は不可逆が基本 という考え方に基づいています。

よく使うコマンド

flyway info       # 適用済み/未適用のマイグレーション確認
flyway validate   # ファイルとDBの整合性をチェック
flyway clean      # DBを全部初期化(開発中のみ推奨)

特に info は頻繁に使います。自分のローカルがどこまで反映されているか一目で分かります。

研修・個人開発での学び

実際にFlywayを導入してみて気づいたこと:

  • 環境差異がなくなる安心感
    「本番とローカルでテーブルが違う」という事故がなくなった。

  • チーム開発でのスピードアップ
    新人でも「SQLファイル置いて migrate すればOK」と分かりやすい。

  • 命名規則の大切さ
    ファイル名に説明を入れておくと、後で見返したときに理解しやすい。

  • Rollback戦略の重要性
    戻せない前提で「本当に必要な変更か」を慎重に考える習慣がついた。

まとめ

Flywayを使うと、DBの変更を 安全・共有可能・履歴付き で扱えるようになります。
SQLをファイルにしてGitで管理できるので、アプリのコードと一緒にレビューできる点が特に便利です。

初心者目線では「最初はちょっと面倒そう」に見えましたが、使ってみると トラブルを減らす保険 になると強く感じました。
今後は CI/CD パイプラインに組み込んで、自動デプロイと一緒にDBマイグレーションも流す練習をしていきたいです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?