#はじめに
自宅のPC、ノートパソコン、研究室のPCで開発することがあり、ソースコードはGitで管理しているからストレスはないが、
DBは手動で書き換えを行っており、書き換え忘れによるバグや変更点を思い出すので無駄な時間がかかる
そんな時バイト先でRubyやCakePHPなどにはMigrationという機能があるということを聞いて、Node.jsを使ってやってみたいと思い調べてみた
Node.jsを使ってのMigrationの記事が少なかったので書いてみようと思う
※OSはWindows,MacOSで行いました
#データベースマイグレーションとは
データベースを削除してから作り直すと、DBに保存されている情報が全て削除されてしまう
こういった事態を回避する方法として、データベースマイグレーションを行う方法がある
マイグレーションとは、DBに保存されているデータを保持したまま、テーブルの作成やカラムの変更などを行うための機能
詳しいことはこちらなどを呼んでください
#前提
- npmが実行できる環境が整っている
- MySQLを使える環境が整っている
#Node.jsでMigrationを行う
Migrationが行えるモジュールはたくさんあるが、今回はいろいろ試してうまくいったdb-migrate
モジュールを利用する
##プロジェクトを作成する
$ mkdir プロジェクト名
$ cd プロジェクト名
$ npm init
// Enter連打
##db-migrateをインストール
db-migrateコマンドを利用するのでグローバルにインストールする
$ npm install -g db-migrate
下記のコマンドを実行
$ db-migrate
以下の画像が表示されたらインストール成功
##DBの情報を設定ファイルに記述
プロジェクト名ディレクトリの中にdatabase.json
ファイルを作成する
ここにMigrationを行うDBの情報を記述する
$ pwd
/Users/Hoge/プロジェクト名
$ touch database.json
設定するデータベースを作成する
$ mysql.server start
$ mysql -u root -p
password
mysql> create database migration;
database.jsonに設定を記述する
{
"dev": {
"driver": "mysql", //DBの種類
"user": "root", //ログインするユーザ名
"password": "root", //ユーザのパスワード
"database": "migration" //Migrationを行うデータベース名
}
}
##Migrationファイルを作成する
下記のコマンドを実行して以下の画像のように表示されればMigrationファイルの作成に成功
失敗する場合、設定ファイルがうまくいっていない可能性あり
$ db-migrate create create_table_hoge
プロジェクト名/migrations ディレクトリにMigrationファイルが作成されている
##MigrationファイルにDBの操作を記述する
作成した時間-createコマンドでの引数名.jsファイルにDBの操作を記述していく
(上記のコマンドの場合、例:20170212082607-create-table-hoge.js)
'use strict';
var dbm;
var type;
var seed;
/**
* We receive the dbmigrate dependency from dbmigrate initially.
* This enables us to not have to rely on NODE_PATH.
*/
exports.setup = function(options, seedLink) {
dbm = options.dbmigrate;
type = dbm.dataType;
seed = seedLink;
};
exports.up = function(db) {
/**
* 以下のコードを記述
*/
db.createTable('hoge', {
id: {type: 'int', primaryKey: true},
name: 'string'
});
return null;
};
exports.down = function(db) {
/**
* 以下のコードを記述
*/
db.dropTable('hoge');
return null;
};
exports._meta = {
"version": 1
};
##Migrationファイルを利用してDBを操作する
db-migrate
がDBの操作を行うにはdriverが必要みたいなのでインストールする
(ローカルで大丈夫)
$ npm install db-migrate-mysql
upコマンドを使ってexports.up()メソッドの中身を実行する
$ db-migrate up
以下のように表示されたら成功
失敗した場合、ログインしたユーザ名やパスワード、そのユーザの権限などに原因がある可能性あり
変更が行われているか確認する
mysql> use migration
mysql> show tables;
テーブルが作成されていることを確認
mysql> show columns from hoge;
カラムが正しいか確認
downコマンドを使ってexports.down()メソッドの中身を実行する
$ db-migrate down
以下のように表示されたら成功
変更が行われているか確認する
mysql> show tables;
テーブルが消えてることを確認
#最後に
省いたところも多くありますが、出来る限り丁寧に書きました
カラムの追加や削除などは以下の参考サイトに記載されているので、気になる人は見てください
DBへの操作(テーブルの作成やカラムの変更)を行うたびにcreateコマンドを使ってMigrationファイルを作成するようです
よってdb-migrate create 操作する名前
などが良いみたい
upやdownの操作の履歴はmigrationsテーブルに残してるそうです
この記事内以外でも質問があれば、コメントやTwitter、メールなどをください