slim入門:Dokcerを利用したgolang-migrateの導入

スポンサーリンク
slim入門:Dokcerを利用したgolang-migrateの導入 環境構築
slim入門:Dokcerを利用したgolang-migrateの導入
この記事は約8分で読めます。
よっしー
よっしー

こんにちは。よっしーです(^^)

今日は、slimのローカル開発環境にgolang-migrateを導入する方法についてご紹介します。

スポンサーリンク

前提

この記事は下記の記事をベースにしています。

背景

先日、MariaDBを導入したので、テーブル作成やデータ登録などのSQLを管理するDBのマイグレーションツールを導入したときの修正内容をご紹介します。

今回導入したマイグレーションツールは下記になります。

修正内容

下記のファイルが修正、新規になります。下記の各セクションにファイルの内容が記載されています。

        modified:   Makefile
        modified:   app/.env
        modified:   app/compose.yml
        new file:   app/migrate/sql/000001_create_tbl_sample.down.sql
        new file:   app/migrate/sql/000001_create_tbl_sample.up.sql
        new file:   app/migrate/sql/000002_insert_tbl_sample.down.sql
        new file:   app/migrate/sql/000002_insert_tbl_sample.up.sql

Makefile

47行目に追加します。

+# migrate create ex) SQL_NAME=xxx make migrate_create
+.PHONY: migrate_create
+migrate_create:
+       cd $(WOKR_DIR) \
+       && docker compose run -it --rm migrate-cmd create -ext sql -dir /migrations -seq $(SQL_NAME)
+
+# migrate version
+.PHONY: migrate_version
+migrate_version:
+       cd $(WOKR_DIR) \
+       && . .env \
+       && docker compose run -it --rm migrate-cmd -path /migrations -database "$${MIGRATE_DNS}" version
+
+# migrate up
+.PHONY: migrate_up
+migrate_up:
+       cd $(WOKR_DIR) \
+       && . .env \
+       && docker compose run -it --rm migrate-cmd -path /migrations -database "$${MIGRATE_DNS}" up
+
+# migrate down
+.PHONY: migrate_down
+migrate_down:
+       cd $(WOKR_DIR) \
+       && . .env \
+       && docker compose run -it --rm migrate-cmd -path /migrations -database "$${MIGRATE_DNS}" down
+
+# migrate force
+.PHONY: migrate_force
+migrate_force:
+       cd $(WOKR_DIR) \
+       && . .env \
+       && docker compose run -it --rm migrate-cmd -path /migrations -database "$${MIGRATE_DNS}" force 1

app/.env

2行目に追加します。

+MIGRATE_DNS='mysql://app_user:P@ssw0rd@tcp(mariadb:3306)/sample?multiStatements=true'

app/compose.yml

51行目に追加します。

+  migrate-cmd:
+    image: migrate/migrate:v4.16.2
+    container_name: migrate-cmd
+    volumes:
+      - ./migrate/sql:/migrations
+    networks:
+      - net
+    profiles:
+      - tools

app/migrate/sql/000001_create_tbl_sample.up.sql

下記の内容でファイルを作成します。

CREATE TABLE IF NOT EXISTS sample (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)  ENGINE=INNODB;

app/migrate/sql/000001_create_tbl_sample.down.sql

下記の内容でファイルを作成します。

DROP TABLE IF EXISTS sample;

app/migrate/sql/000002_insert_tbl_sample.up.sql

下記の内容でファイルを作成します。

INSERT INTO sample(title) VALUES ('test 1');

app/migrate/sql/000002_insert_tbl_sample.down.sql

下記の内容でファイルを作成します。

TRUNCATE TABLE sample;

動作確認

下記のコマンドを実行します。

make up

下記のコマンドを実行します。

make migrate_up

下記のコマンドを実行します。

make loginMariadb

下記のコマンドを実行します。

mariadb -uapp_user -p -Dsample -e "select * from sample;"

下記のような出力になっていれば、成功です。

root@50db19c98989:/# mariadb -uapp_user -p -Dsample -e "select * from sample;"
Enter password: 
+----+--------+---------------------+
| id | title  | created_at          |
+----+--------+---------------------+
|  1 | test 1 | 2023-07-11 02:13:36 |
+----+--------+---------------------+

解説

golang-migrateについて

Go言語でデータベースのマイグレーションを行うためのライブラリである”golang-migrate”について説明します。

“golang-migrate”は、データベーススキーマの変更やバージョンアップなど、データベースのマイグレーションを管理するためのツールです。以下のような特徴を持っています:

  1. マルチプラットフォーム対応: “golang-migrate”は、主要なデータベースプラットフォーム(PostgreSQL、MySQL、SQLite、Microsoft SQL Serverなど)に対応しています。これにより、異なるデータベース間でのスキーマの変更を簡単に管理することができます。
  2. マイグレーションのバージョニング: “golang-migrate”では、データベースのスキーマ変更をバージョンごとに管理します。マイグレーションスクリプトは、バージョン番号を持つファイルとして保存され、順序付けられた実行が可能です。
  3. シンプルなコマンドラインインターフェース: “golang-migrate”は、コマンドラインツールとして提供され、簡単にデータベースのマイグレーションを実行できます。マイグレーションの作成、実行、ロールバックなどのコマンドが提供されています。
  4. プログラム内からの利用: “golang-migrate”は、プログラム内からも利用することができます。Goのパッケージとして提供されており、ライブラリを使用してカスタムのマイグレーションロジックを実装することができます。

“golang-migrate”のインストール方法や具体的な使用方法については、公式のドキュメントを参照することをおすすめします。ドキュメントには、各データベースプラットフォームへの接続方法やマイグレーションの作成方法など、詳細な情報が記載されています。

app/migrate/sql/*.sql

sqlファイルは下記のコマンドで作成することができます。

SQL_NAME=(拡張子と最初の数値を除いたファイル名) make migrate_create

例えば、下記のコマンドを実行すると、

SQL_NAME=create_tbl_dummy make migrate_create

下記のファイルが作成できます。

/migrations/000003_create_tbl_dummy.up.sql
/migrations/000003_create_tbl_dummy.down.sql

おわりに

今日は、slimのローカル開発環境にgolang-migrateを導入する方法についてご紹介しました。

本記事でご紹介したソースは、下記のリポジトリにあります。

よっしー
よっしー

何か質問や相談があれば、遠慮なくコメントしてください。また、エンジニア案件についても、いつでも相談にのっていますので、お気軽にお問い合わせください。

それでは、また明日お会いしましょう(^^)

コメント

タイトルとURLをコピーしました