11
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

sql-migrateを使ってみる

Last updated at Posted at 2020-12-18

はじめに

この記事は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を使おうとしている方の手助けになれば幸いです。
また間違っている点などがございましたらコメントなどで指摘していただけると助かります。

11
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?