スキーマ変更の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パイプライン
- 一時的なPostgresを起動します(Docker / GitHub Actions service)
- すべてのマイグレーションを最初から適用します
- ステージングスキーマのコピーに、新しいマイグレーションだけを適用します
- dbt build / Flyway test / app testsを実行します
- SQLFluff lint
- スキーマ差分レポート
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.shLintステップ
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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- DBT(Data Build Tool)の基礎
- SQLFluffとリンティング
- SQLのテスト:dbt tests、Great Expectations
- スキーマ変更のCI(GitHub Actions)