スキーマ管理とは何ですか?
なぜ重要なのでしょうか?
スキーマ管理のアプローチの種類
命令型
CREATE TABLE、ALTER TABLE、DROP COLUMN のような明示的な DDL ステートメントをファイルに記述します。ツールはそのファイルを順番に実行し、どのファイルが適用済みかを追跡します。このカテゴリでは、実行する SQL を正確に指定します。
例: Golang Migrate、Goose、Flyway。
宣言型
ツールを選ぶ際の考慮点
チームですでに使っているものは何ですか?
望ましいプロセスは何ですか?
- Goose や Golang Migrate のような、シンプルな「SQL を書いて、CI で実行して、それで完了」というワークフロー。
- Bytebase や Liquibase のような、承認ワークフロー、監査証跡、RBAC などを備えた仕組み。
- Atlas のような、スキーマを宣言的に定義し、ツールが差分を判断する方式。
推奨ツール
Atlas
- Type: 宣言的
- Language: Go、単一のバイナリとして配布
- License and availability: Open Core。Atlas CLI には Apache 2.0 のコミュニティ版がありますが、ClickHouse サポートには Pro プランまたは trial が必要です
- Cluster support: はい
Golang Migrate
schema_migrations テーブルで状態を管理します。
ClickHouse で使いやすい理由: シンプルで柔軟だからです。実行したい ClickHouse DDL をそのまま記述できます。ランタイム依存のない単一の Go バイナリなので、CI/CD パイプラインや Docker コンテナーにも簡単に組み込めます。
注意点: 移行ファイルに複数のステートメントが含まれていて、その途中で 1 つでも失敗すると、データベースが一部だけ適用された中途半端な状態になり、手動での対応が必要になることがあります。これは、1 ファイルにつき 1 ステートメントとする運用を徹底することで回避できます。
最適な用途: シンプルさを重視し、ClickHouse インスタンスに対して実行する SQL を完全に制御したいチーム。
- Type: 命令型
- Language: Go
- License: オープンソース、MIT
- Cluster support: はい
Goose
- Type: 命令型
- Language: Go、単一バイナリとして配布
- License: オープンソース、MIT
- Cluster support: No