migr8

勤め先でDBのマイグレ管理されてなかったので導入してみました。

今までのマイグレーションのフロー

  1. ローカル環境で修正のち確認
  2. 問題がなければテスト環境に修正を適用
  3. Skypeを通じて変更用のSQLを共有

これからのマイグレーションのフロー

  1. ローカル環境で修正のち確認
  2. migr8が生成する履歴ファイルをGitLabにpush
  3. GitLabから自動で他の開発者に更新通知
  4. 修正者はテスト環境でGitLabから最新の履歴ファイルをpull
  5. migr8.rb upコマンドを実行してテスト環境を最新にする

これで何が幸せなの?

  • 「誰が」「なぜ」更新したのかを把握出来る。
  • 必ずGitLabにコミットするので、共有するのを忘れる事がなくなる。
  • 更新漏れがあっても更新する順番を意識しなくてもすむ。
  • GitLabを介するためデグレを素早く察知し出戻りが最小限で済む。

実際にやってみる

  1. usersテーブルを作成
  2. GitLabにコミット
  3. サーバに更新を適用

開発者のローカルとテスト環境、本番環境にmigr8をインストール
usersテーブルを作成

migr8.rb new -m "usersテーブルを作成しました"

するとエディタが開くので以下のように修正します。

version:     xjyg6058
desc:        usersテーブルを作成しました
author:      kkyouhei
vars:
  #変数が使えます
  - table:   users

#バージョンアップ時の動作 つまりこれから行う動作
up: | 
     create table ${table} (
          id        integer primary key auto_increment,
          name   varchar(255) not null unique
     );

#バージョンダウン時の動作 usersテーブルなんてやっぱり必要ないんだよ
down: |
  drop table ${table};

保存して終了したらDBをバージョンアップする。

migr8.rb up

DBにはusersテーブルが作成されて履歴ファイルが更新されています。


migr8

history.txt
--migrations

|
|--vawq3286.yaml

history.txtとmigrationsディレクトリをリモートリポジトリに追加する。

git add migr8/history.txt
git add migr8/migrations
git commit -m "usersテーブルを追加しました"
git push origin master

サーバにログインして以下のコマンドを実行

#リモートリポジトリから最新の履歴ファイルを取得
git pull origin master
#DBのバージョンアップ
migr8.rb up

これでサーバのDBが最新化されました。
履歴ファイルをリモートリポジトリにコミットした時点で
各開発者に通知が行くようにしてるので、開発者が気づいたら
ローカルの履歴ファイルをgit pullで最新化してサーバと同じ手順を踏み最新化を行います。