migr8
勤め先でDBのマイグレ管理されてなかったので導入してみました。
今までのマイグレーションのフロー
これからのマイグレーションのフロー
- ローカル環境で修正のち確認
- migr8が生成する履歴ファイルをGitLabにpush
- GitLabから自動で他の開発者に更新通知
- 修正者はテスト環境でGitLabから最新の履歴ファイルをpull
- migr8.rb upコマンドを実行してテスト環境を最新にする
これで何が幸せなの?
- 「誰が」「なぜ」更新したのかを把握出来る。
- 必ずGitLabにコミットするので、共有するのを忘れる事がなくなる。
- 更新漏れがあっても更新する順番を意識しなくてもすむ。
- GitLabを介するためデグレを素早く察知し出戻りが最小限で済む。
実際にやってみる
- usersテーブルを作成
- GitLabにコミット
- サーバに更新を適用
開発者のローカルとテスト環境、本番環境に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.yamlhistory.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で最新化してサーバと同じ手順を踏み最新化を行います。