46
41

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.

Node.jsを使ったMigration機能を使ってみた

Last updated at Posted at 2017-02-12

#はじめに
自宅の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

以下の画像が表示されたらインストール成功

skitch (3).png

##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に設定を記述する

database.json
{
    "dev": {
        "driver": "mysql", //DBの種類
        "user": "root", //ログインするユーザ名
        "password": "root", //ユーザのパスワード
        "database": "migration" //Migrationを行うデータベース名
    }
}

##Migrationファイルを作成する

下記のコマンドを実行して以下の画像のように表示されればMigrationファイルの作成に成功
失敗する場合、設定ファイルがうまくいっていない可能性あり

$ db-migrate create create_table_hoge

skitch (2).png

プロジェクト名/migrations ディレクトリにMigrationファイルが作成されている

##MigrationファイルにDBの操作を記述する
作成した時間-createコマンドでの引数名.jsファイルにDBの操作を記述していく
(上記のコマンドの場合、例:20170212082607-create-table-hoge.js)

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

以下のように表示されたら成功
失敗した場合、ログインしたユーザ名やパスワード、そのユーザの権限などに原因がある可能性あり

skitch (1).png

変更が行われているか確認する

mysql> use migration
mysql> show tables;
テーブルが作成されていることを確認
mysql> show columns from hoge;
カラムが正しいか確認

downコマンドを使ってexports.down()メソッドの中身を実行する

$ db-migrate down

以下のように表示されたら成功

skitch.png

変更が行われているか確認する

mysql> show tables;
テーブルが消えてることを確認

#最後に
省いたところも多くありますが、出来る限り丁寧に書きました
カラムの追加や削除などは以下の参考サイトに記載されているので、気になる人は見てください
DBへの操作(テーブルの作成やカラムの変更)を行うたびにcreateコマンドを使ってMigrationファイルを作成するようです
よってdb-migrate create 操作する名前などが良いみたい
upやdownの操作の履歴はmigrationsテーブルに残してるそうです
この記事内以外でも質問があれば、コメントやTwitter、メールなどをください

#参考サイト
ハードコイルド・ワンダーランド|node-db-migrate便利
db-migrate

46
41
0

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
46
41

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?