SQL Academy · レッスン

ツール:Flyway、Liquibase、Sqitch

代表的なスキーママイグレーションツール、そのバージョン管理モデル、CI連携を比較します。

レッスン 4/413 ステップ

「ツール:Flyway、Liquibase、Sqitch」はCoddyKit上の無料SQL Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSQL Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 SQL Academyコースには全4レッスンが含まれています。

マイグレーションツールを使う理由

スキーマの変更は、次の条件を満たす必要があります。

  • ソース管理でバージョン管理されている
  • 決められた順序で適用される
  • CI/CDで自動実行される
  • 場合によってはロールバックできる

Flyway

Javaベースのファイルベースのマイグレーションツールです。各ファイルには、バージョンの接頭辞を付けた名前を付けます。

-- V1__create_users.sql
CREATE TABLE users (id BIGSERIAL PRIMARY KEY, email TEXT NOT NULL);

-- V2__add_full_name.sql
ALTER TABLE users ADD COLUMN full_name TEXT;

-- Flyway tracks applied migrations in a flyway_schema_history table.

Flyway CLI

マイグレーションを適用します。

flyway -url=jdbc:postgresql://localhost/mydb -user=app migrate
flyway info        # show what would run
flyway repair      # fix the history table after a failure

Liquibase

XML/YAML/JSON(またはSQL)ベースの「changeset」を使用します。Flywayより記述量は多くなりますが、データベース間の抽象化をサポートします。

<!-- changeset alice:001 -->
<createTable tableName="users">
  <column name="id" type="bigserial" autoIncrement="true">
    <constraints primaryKey="true"/>
  </column>
  <column name="email" type="text"><constraints nullable="false"/></column>
</createTable>

Liquibase のロールバックサポート

各changesetでロールバック処理を宣言できます。Liquibaseでは、直近のN個の変更をロールバックできます。

liquibase rollbackCount 1

Sqitch

ネイティブSQLを使用し、バージョン番号による順序付けは行いません。代わりに、依存関係を明示したDAGを使用します。各変更には、deploy / verify / revertスクリプトがあります。

sqitch add add_users -n 'Add users table'
# edits deploy/add_users.sql, verify/add_users.sql, revert/add_users.sql
sqitch deploy db:pg://localhost/mydb

3つのツールの比較

FlywayLiquibaseSqitch
形式SQLXML/YAML/JSONSQL
バージョン管理逐次逐次DAG
ロールバック限定的ネイティブネイティブ
検証ステップなし任意組み込み

フレームワーク組み込みのツール

多くのWebフレームワークには、独自のマイグレーションツールがあります。

  • Rails:ActiveRecord migrations
  • Django:組み込みのmigrations
  • Node:knex、sequelize、prisma migrate
  • NestJS:TypeORM migrations

CIワークフロー

標準的なパイプラインは次のとおりです。

  1. PRに新しいマイグレーションファイルを含める
  2. CIで空のPostgresを起動し、すべてのマイグレーションを実行する
  3. マイグレーション後のスキーマに対して自動テストを実行する
  4. マージ後、ステージング、次に本番環境へデプロイしてマイグレーションを実行する

リピート可能なマイグレーション

Flywayには「R__」リピート可能マイグレーションがあります。変更のたびに再実行されます。ビューやストアドプロシージャに適しています。

-- R__users_view.sql  (re-applied whenever its checksum changes)
CREATE OR REPLACE VIEW active_users AS
  SELECT id, email FROM users WHERE deleted_at IS NULL;

スキーマ差分の検出

migra、schemahero、またはpgquarrelを使って、期待されるスキーマと実際のスキーマの差分を検出します。

まとめ

ツールを1つ選び、継続して使いましょう。

  • Flyway — SQL優先でシンプル
  • Liquibase — 宣言的で抽象化レイヤーを提供
  • Sqitch — DAGによる依存関係、ロールバックを重視
  • 共通:ソース管理でバージョン管理し、CIで自動化する

クイックチェック

逐次的なバージョン番号ではなく、マイグレーション間の依存関係を明示したDAGをネイティブに使用するツールはどれでしょうか。

無料で開始

AI チューターと学ぶ SQL — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
46
レッスン
183

よくある質問

「ツール:Flyway、Liquibase、Sqitch」レッスンは無料ですか?

はい。「ツール:Flyway、Liquibase、Sqitch」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、SQL Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 SQL Academyコースには全4レッスンが含まれています。

「ツール:Flyway、Liquibase、Sqitch」で何を学びますか?

代表的なスキーママイグレーションツール、そのバージョン管理モデル、CI連携を比較します。 ブラウザで直接実行するハンズオンコードでSQL Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

SQL Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSQL Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「ツール:Flyway、Liquibase、Sqitch」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSQL Academyレッスンでコードを書いて実行できますか?

はい。すべてのSQL Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. オンラインマイグレーション:ALTER TABLEがロックする理由
  2. 並行インデックス作成(CREATE INDEX CONCURRENTLY)
  3. ダウンタイムゼロの列名変更
  4. ツール:Flyway、Liquibase、Sqitch
← SQL Academyに戻る