BackEnd

Go言語で使えるmigrationライブラリ

投稿日:2018年10月25日 更新日:

はじめに

Go言語の連載8回目です。今回はGo言語でWeb開発をする際に使うDB関連のライブラリとして、migrationに絞って調べてみました。

migrationライブラリ

Go言語のmigrationライブラリをいくつかピックアップしました。これらのライブラリを利用することで、データベースに保存されているデータを保持したまま、テーブルの作成やカラムの変更などが行なえます。それでは、各ライブラリの特徴を簡単に紹介します。より詳しい説明はこちらご覧ください。

goose

gooseはGitHub版とBitbucket版でソースコードが異なるようです。GitHub版ではプレフィックスとして5桁の数値が追加され、Bitbucket版ではプレフィックスとしてタイムスタンプ追加されます。環境ごとに設定ファイルを作ることができます(執筆時点でのスター数は575)

sql-migrate

sql-migrateはgooseと同じようなことができます。対応するドライバはgooseより多いようです(執筆時点でのスター数は1,114)

migu

miguはGoのstructをテーブル定義として使用するため、わざわざマイグレーションファイルを書かかなくて良いという利点があります。反面、ロールバックはできません(執筆時点でのスター数は42)

pop

popはコマンドでデータベースを作れます。また、created_atとupdated_atが自動的に追加され、popのORMを使う場合は自動的に更新されます。ただし、2つのファイルにUPとDOWNを分けて書く必要があります(執筆時点でのスター数は476)

sqldef

sqldefは他のライブラリと異なりスキーマファイルの差分を修正するSQLを発行します。それにより、シンプルにスキーマを管理することができます(執筆時点でのスター数は313)

sqldefを使ってみる

今回はスキーマの管理がシンプルなsqldefを使ってみます。

導入

こちらのように自分にあったバイナリをダウンロードします。今回はMac用のmysqlder_darwin_amd64.zipをダウンロードします。ダウンロード後、中身を任意のディレクトリに移動させます(今回は$GOROOT/binに移動させました)

テーブルを追加

準備ができたところで、早速データベースにテーブルを追加してみます。sqldefではschema.sqlファイルにスキーマ情報を定義します。まずは、下記のようにユーザテーブルを定義します。

準備ができたら、下記のとおりスキーマを更新します。

すると、データベース(mysqldef_test)にuserテーブルが追加されます。追加されたuserテーブルは下記のとおりです。

また、下記のようにdry runで確認することもできます。

スキーマを更新する

次に、userテーブルのスキーマを更新してみましょう。先程作成したschema.sqlを修正して、もう一度コマンドを実行します(4行目、5行目、8行目を追記しました)

発行されるクエリは下記のとおりです。

修正後のテーブルは下記のとおりです。

既存のスキーマをexportする

既存のスキーマのexportは下記のとおり行います。

対応しているコマンド一覧

sqldefが対応しているコマンドは下記のとおりです(MySQLのみ載せてあります。PostgreSQLについてはこちらをご覧ください)

  • CREATE TABLE, DROP TABLE
  • ADD COLUMN, CHANGE COLUMN, DROP COLUMN
  • ADD INDEX, ADD UNIQUE INDEX, CREATE INDEX, CREATE UNIQUE INDEX, DROP INDEX
  • ADD PRIMARY KEY, DROP PRIMARY KEY
  • ADD FOREIGN KEY, DROP FOREIGN KEY

さいごに

今回はGo言語でのマイグレーション管理のためのライブラリを紹介しました。次回はORMについて紹介する予定です。

おすすめ書籍

スターティングGo言語 (CodeZine BOOKS)  Goプログラミング実践入門 標準ライブラリでゼロからWebアプリを作る impress top gearシリーズ  みんなのGo言語[現場で使える実践テクニック]  Go言語でつくるインタプリタ

blog-page_footer_336




blog-page_footer_336




-BackEnd
-,

執筆者:


comment

メールアドレスが公開されることはありません。

CAPTCHA


関連記事

rails

半年ぶりにRails Tutorialをやったメモ

はじめに Railsを触り始めて半年ほどたちました、tonnyです。 復習もかねてRails Tutorialを実施したので、そのメモを残します。 やはり2回目でも気づくことは多いので、非常に勉強にな ...

軽量なAlpine Linuxイメージでgitbookのローカル環境を構築する

1 はじめに2 Alpine Linuxとは3 Docker本体のインストール4 サンプルリポジトリのダウンロード5 dockerイメージ作成6 Gitbook初期化&実行7 Dockerの ...

laravel logo

laravel-enumを使ってみたら快適だった

1 はじめに2 enumについて3 環境4 導入5 enumクラス5.1 生成5.2 enumクラス編集5.3 日本語化6 マイグレーション6.1 生成6.2 編集7 プロパティのキャスト8 さいごに ...

laravel logo

LaravelでHTTP通信

1 はじめに2 インストール3 基本的な使い方3.1 GETでリクエストを投げる3.2 リクエストヘッダーを指定3.3 クエリパラメータを指定3.4 timeout時間を指定3.5 POSTでリクエス ...

js

TypeScriptでJavaScriptのライブラリを使用するには?

1 はじめに2 対応方法2.1 npmで@typesからインストールする2.2 自分で型定義ファイルを作る3 Declaration Space3.1 Type Declaration Space3. ...

フォロー

follow us in feedly

blog-page_side_responsive

2018年10月
 123456
78910111213
14151617181920
21222324252627
28293031 

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。