はじめに
この記事はITRC Advent Calendar 2020の18目の記事です。
前の記事?→ 【Neovim】琴葉葵が教えるおすすめのテキストエディタ【Voiceroid】
こんにちはRIN1208です。今回はsql-migrateを使ってみたら便利だったのでそのお話をしようかと思います。
必要環境
- docker-compose
- mac os
上記の環境で説明していきます
sql-migrateとは?
- SQLite, PostgreSQL, MySQL, Oracleなどの色々なデータベースをサポートしている
- CLIツールまたはライブラリとして使用可能
- go getで取得可能
構築する
リポジトリはこちら
今回sql-migrateを使用する上で必要なファイルは以下の4つです
- dbconfig.yml
- docker-compose.yml (docker-composeを使用して今回お話しするので)
- Dockerfile (go getでインストールするためgoの環境にしています)
- sqlのマイグレーションファイル
docker-compose.ymlを書く
docker-compose.ymlを書いていきます。今回は確認用にphpmyadminを使用しています
version: '3.7'
services:
api:
build: .
ports:
- "8080:8080"
tty: true
volumes:
- ./:/app
working_dir: /app
environment:
- MYSQL_USER=root
- MYSQL_PASSWORD=root
- MYSQL_HOST=[mysql]
- MYSQL_PORT=3306
- MYSQL_DATABASE=test
mysql:
image: mysql:5.6
restart: always
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=test
command: >
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--innodb_file_per_table
--innodb_file_format=BARRACUDA
--innodb_large_prefix=1
phpmyadmin:
image: phpmyadmin/phpmyadmin
ports:
- 8000:80
environment:
- PMA_HOST=mysql
- PMA_PASSWORD=root
- PMA_USER=root
- PMA_ARBITRARY=1
links:
- mysql
depends_on:
- mysql
Dockerfileを書く
次にdockerfileを書いていきます
FROM golang:1.14
RUN go get github.com/rubenv/sql-migrate/...
sqlのマイグレーションファイルを書く
次にsqlのマイグレーションファイルを書きます。ここではsqlをそのまま書く為主キーや外部キーを簡単に設定できます。ファイル名は.sqlのファイルであればなんでも大丈夫です。
-- +migrate Up
CREATE TABLE IF NOT EXISTS user (
user_id VARCHAR(128) NOT NULL PRIMARY KEY,
user_name VARCHAR(128)
);
-- +migrate Down
DROP TABLE IF EXISTS user;
dbconfig.ymlを書く
次にdbconfig.ymlを書きます。ここではsql-migrateのconfigを書きます。
development:
dialect: mysql
datasource: ${MYSQL_USER}:${MYSQL_PASSWORD}@tcp(${MYSQL_HOST}:${MYSQL_PORT})/${MYSQL_DATABASE}?parseTime=true
dir: .
- dialect
この部分では使用するDBを選択しています。今回はmysqlを使用するのでmysqlと書いてあります。 - datasource
この部分ではmysqlに接続するための情報を記入しています。今回はそのまま書くのではなく環境変数から取得しています。環境変数はdocker-compose.ymlにて定義してあります。 - dir
この部分では実行するsqlファイルの場所を選択しています。/api/db下に置いてある場合はapi/dbと記入してください。
実行してみる
それでは以下のコマンドを実行してマイグレートをしてみましょう。
docker-compose exec api bash -c "sql-migrate up"
http://localhost:8000/ に接続しphpmyadminで確認無事userテーブルが作成できて入れば成功です。
終わりに
ここまで読んでくださりありがとうございます。
sql-migrateが便利だったので今回記事に書きました。
sql-migrateを使おうとしている方の手助けになれば幸いです。
また間違っている点などがございましたらコメントなどで指摘していただけると助かります。