0Pricing
SQL Academy · レッスン

スキーマ変更のCI(GitHub Actions)

すべてのPRで、エフェメラルデータベースを使ってGitHub Actions内でマイグレーション、dbt build、SQLFluff lintを実行します。

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

SQLにCIを使う理由

手動でのマイグレーションは障害を引き起こします。CIによって次の問題を検出できます。

  • 適用に失敗するマイグレーション
  • 既存のテストを壊すマイグレーション
  • 環境間のスキーマドリフト
  • Lintとテストのリグレッション

堅牢なSQL CIパイプライン

  1. 一時的なPostgresを起動します(Docker / GitHub Actions service)
  2. すべてのマイグレーションを最初から適用します
  3. ステージングスキーマのコピーに、新しいマイグレーションだけを適用します
  4. dbt build / Flyway test / app testsを実行します
  5. SQLFluff lint
  6. スキーマ差分レポート

GitHub Actions:Postgresサービス

ジョブと並行してPostgresを起動します。

name: ci
on: [pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    services:
      pg:
        image: postgres:16
        env:
          POSTGRES_PASSWORD: postgres
        ports: ['5432:5432']
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5
    steps:
      - uses: actions/checkout@v4
      - name: Run migrations
        env:
          DATABASE_URL: postgres://postgres:postgres@localhost:5432/postgres
        run: |
          ./scripts/migrate.sh

Lintステップ

SQLFluff lintを独立したジョブとして実行します。

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
      - run: pip install sqlfluff && sqlfluff lint models/

CIでのdbt Build

dbtプロジェクトの場合:

- name: dbt deps & build
  run: |
    pip install dbt-postgres
    dbt deps
    dbt build --profiles-dir profiles/ci

スキーマ差分

migra(またはapgdiff、schemahero)を使うと、マイグレーションによって導入される変更を確認できます。

pip install migra
migra postgres://baseline postgres://branch > diff.sql
# Comment diff.sql on the PR

前進のみの戦略

常に新しいマイグレーションを作成し、適用済みのマイグレーションは編集しません。CIによって、マイグレーションの系列を最初から適用できることを確認します。

後方互換性のあるスキーマ変更

各PRのスキーマは以前のアプリバージョンとの互換性を維持する必要があります。これにより、アプリとデータベースをどちらからでもデプロイできます。CIでは、NEWスキーマに対してOLDアプリのテストを実行することでこれを検証できます。

テストデータのシード

CIで小規模なフィクスチャスクリプトを使うと、現実的なデータに対してテストを実行できます。

- name: Seed
  run: psql $DATABASE_URL < seed/dev.sql

マイグレーションテストのロックタイムアウト

本番環境の動作を再現するため、CIのマイグレーションでlock_timeoutを設定します。

ALTER DATABASE postgres SET lock_timeout = '5s';

本番環境への適用

本番環境のマイグレーションには、ワンショットジョブを使用します。

  • リトライ機能付きのマイグレーションランナー
  • 失敗時の通知
  • 文書化されたロールバック手順

ブランチデータベースパターン

NeonやSupabase branchingなどのツールを使うと、PRごとに本番環境のコピーを作成できます。実際のデータを含むコピーに対して、マイグレーションとアプリのテストを実行できます。

まとめ

SQLはCIに組み込むべきです。

  • 一時的なPGサービスを起動
  • マイグレーションとdbt buildを適用
  • SQLFluffでLint
  • マイグレーション済みのスキーマに対してアプリのテストを実行
  • レビュー用にスキーマを比較

確認問題

GitHub ActionsのジョブにPostgresデータベースを追加する最も簡単な方法は何ですか。

よくある質問

「スキーマ変更のCI(GitHub Actions)」レッスンは無料ですか?

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

「スキーマ変更のCI(GitHub Actions)」で何を学びますか?

すべてのPRで、エフェメラルデータベースを使ってGitHub Actions内でマイグレーション、dbt build、SQLFluff lintを実行します。 ブラウザで直接実行するハンズオンコードでSQL Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「スキーマ変更のCI(GitHub Actions)」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. DBT(Data Build Tool)の基礎
  2. SQLFluffとリンティング
  3. SQLのテスト:dbt tests、Great Expectations
  4. スキーマ変更のCI(GitHub Actions)
← SQL Academyに戻る