Goose:Goのためのデータベース移行ツール
Takashi Yamamoto
Infrastructure Engineer · Leapcell

Key Takeaways
- Gooseは、SQLおよびGoベースの移行をサポートすることで、データベースの移行を簡素化します。
- 複数のデータベースをサポートし、Goバイナリに移行を埋め込むことができます。
up
、down
、status
、version
などの基本的な移行コマンドを提供します。
Gooseは、増分SQLの変更またはGo関数を作成することにより、データベーススキーマの管理を支援するように設計されたデータベース移行ツールです。 コマンドラインインターフェイス(CLI)とライブラリの両方を提供し、さまざまなユースケースに対応できる汎用性を備えています。
特徴
-
複数データベースのサポート:Gooseは、Postgres、MySQL、SQLite、YDB、ClickHouse、MSSQL、Verticaなど、さまざまなデータベースで動作します。
-
Goの移行:プレーンなGo関数として記述された移行をサポートし、SQLだけでは表現できない複雑な移行を可能にします。
-
埋め込み移行:Goバイナリ内に移行を埋め込むことができ、配布とデプロイを容易にします。
-
順序が狂った移行:見逃された、または順番が狂って適用された移行の適用をサポートします。
-
データのシード:初期データまたはテストデータをデータベースにシードできます。
-
環境変数置換:動的な構成のために、SQL移行内で環境変数を使用できます。
インストール
Goose CLIをインストールするには、以下を実行します。
go install github.com/pressly/goose/v3/cmd/goose@latest
このコマンドは、goose
バイナリを$GOPATH/bin
ディレクトリにインストールします。
macOSユーザーの場合、GooseはHomebrewフォーミュラとしても利用できます。
brew install goose
より小さなバイナリが必要な場合は、不要なドライバーを除外して、ライトバージョンを構築できます。
go build -tags='no_postgres no_mysql no_sqlite3 no_ydb' -o goose ./cmd/goose
利用可能なビルドタグには、no_clickhouse
、no_libsql
、no_mssql
、no_mysql
、no_postgres
、no_sqlite3
、no_vertica
、no_ydb
などがあります。
使い方
Gooseは、データベーススキーマを管理するためのいくつかのコマンドを提供します。
- 新しい移行の作成:
新しいSQL移行を作成するには:
goose create AddSomeColumns sql
このコマンドは、タイムスタンプ付きのプレフィックスを持つ新しいSQL移行ファイルを生成します。
新しいGo移行を作成するには:
goose create AddSomeColumns go
このコマンドは、適切なボイラープレートコードを含む新しいGo移行ファイルを生成します。
- 移行の適用:
データベースで使用可能な最新バージョンに移行するには:
goose up
このコマンドは、使用可能なすべての移行を適用します。
- 移行のロールバック:
現在のバージョンから単一の移行をロールバックするには:
goose down
このコマンドは、最後に適用された移行をロールバックします。
- 移行ステータス:
すべての移行のステータスを出力するには:
goose status
このコマンドは、どの移行が適用され、どれが保留中であるかを表示します。
- 現在のバージョン:
データベースの現在のバージョンを出力するには:
goose version
このコマンドは、データベースの現在の移行バージョンを出力します。
移行の作成
Gooseは、SQLまたはGoで記述された移行をサポートします。
- SQL移行:
SQL移行のサンプルは次のようになります。
-- +goose Up CREATE TABLE post ( id INT NOT NULL, title TEXT, body TEXT, PRIMARY KEY(id) ); -- +goose Down DROP TABLE post;
アノテーション-- +goose Up
および-- +goose Down
は、それぞれ移行のアップとダウンのために実行されるステートメントを示します。
- Go移行:
Go移行のサンプルは次のようになります。
package main import ( "database/sql" "fmt" ) func Up_20130106222315(txn *sql.Tx) { fmt.Println("Hello from migration 20130106222315 Up!") } func Down_20130106222315(txn *sql.Tx) { fmt.Println("Hello from migration 20130106222315 Down!") }
関数Up_20130106222315
およびDown_20130106222315
は、それぞれ適用およびロールバックの移行の動作を定義します。
結論
Gooseは、Goアプリケーションでデータベースの移行を管理するための強力で柔軟なツールです。 複数のデータベース、SQLとGoの移行、および埋め込み移行や順序が狂った移行などの機能のサポートにより、データベーススキーマを効果的に維持および進化させようとしている開発者にとって貴重な資産となります。
詳細および高度な構成については、Goose GitHubリポジトリおよび公式ドキュメントを参照してください。
FAQs
Gooseは、Postgres、MySQL、SQLite、MSSQL、ClickHouse、YDBなどをサポートしています。
goose create <移行名> sql
コマンドを使用して、移行ファイルを生成します。
はい、Gooseは複雑な変更のためにGo関数で記述された移行をサポートしています。
Goプロジェクトをホストするための最高の選択肢であるLeapcellです。
Leapcellは、ウェブホスティング、非同期タスク、Redisの次世代サーバーレスプラットフォームです。
多言語サポート
- Node.js、Python、Go、またはRustで開発します。
無制限のプロジェクトを無料でデプロイ
- 使用量に対してのみ支払い - リクエストも料金もありません。
比類のない費用対効果
- アイドル料金なしの従量課金制。
- 例:25ドルで平均応答時間60msで694万リクエストをサポートします。
合理化された開発者エクスペリエンス
- 簡単なセットアップのための直感的なUI。
- 完全に自動化されたCI/CDパイプラインとGitOpsの統合。
- 実用的な洞察のためのリアルタイムのメトリクスとロギング。
簡単なスケーラビリティと高いパフォーマンス
- 高い同時実行性を簡単に処理するための自動スケーリング。
- 運用オーバーヘッドゼロ - 構築に集中するだけです。
ドキュメントで詳細をご覧ください。
Xでフォローしてください:@LeapcellHQ