Database as Codeバージョン管理。レビュー。デプロイ。監査。
データベーススキーマをバージョン管理に置く。スキーマ変更はプルリクエストと CI/CD を通る — アプリケーションコードと同じ経路で。
Database as Code のアーキテクチャ
2 つのアプローチ。1 つの真実の源。
State ベース (宣言的)
スキーマ全体を 1 つのファイルとしてバージョン管理に置く。ツールがファイルと稼働中のデータベースを差分比較して同期する。真実の源は 1 つで、記述はシンプル。一方でデータマイグレーションは扱いにくい。Infrastructure as Code の標準的な方式。
Migration ベース (命令的)
スキーマ変更をバージョン付きのマイグレーションスクリプトとして書く。マイグレーションは決定的な順序で実行される。変更単位でレビュー可能、CI/CD でリプレイ可能。Database as Code の主流。
Database as Code に関する質問
よくある質問。
- Database as Code とは何ですか?
- Database as Code とは、アプリケーションコードと同じ方法でデータベーススキーマをバージョン管理する運用です。スキーマ定義と変更スクリプトを Git リポジトリに置き、変更はプルリクエスト、コードレビュー、CI チェック、自動デプロイを通ります。結果として、すべてのデータベース変更がバージョン管理され、レビュー可能で、リプレイ可能な履歴になります。
- State ベースと Migration ベース、どちらを選ぶべきですか?
- Database as Code の主流は Migration ベースです。各スキーマ変更がバージョン付きスクリプトとして順番に適用される — 変更単位でレビューでき、CI/CD でリプレイできます。State ベースはスキーマ全体を 1 つのファイルとして保持し、データベースをそれに合わせて収束させます。これは Infrastructure as Code (Terraform、Kubernetes) と同じ方式ですが、データマイグレーションは表現しにくくなります。多くのチームはハイブリッド方式を採用します — 変更には Migration、真実の源には State ファイル。
- Database as Code は既存の CI/CD で動きますか?
- はい。アプリケーション CI/CD を回しているのと同じ Git ワークフローが、データベース CI/CD でも動きます。GitHub Actions、GitLab CI、Bitbucket Pipelines、Azure DevOps、Argo CD、Flux のすべてが、デプロイパイプラインの一部としてスキーママイグレーションを実行できます — 通常は適用前に SQL レビューや Lint のステップを挟みます。
シリーズのすべての投稿。
- 01
データベースのバージョン管理とは?
基礎: コラボレーション、変更履歴、デプロイ、ロールバック、GitOps 連携。
- 02
データベースのバージョン管理、State ベースか Migration ベースか?
2 つのアプローチと、IaC と DAC を分けるトレードオフ。
- 03
Database as Code — 良いところ、悪いところ、見たくないところ
DAC が機能する理由、行き詰まる地点、より広く採用されるために欠けているもの。
- 04
Database as Code のランドスケープ
ツール、連携、そしてスキーマをバージョン管理で運用する実践的な道筋。
- 05
データベースバージョン管理のベストプラクティス
本番でチームがどのように database-as-code を運用しているか。スケールしても通用するプラクティス。