Node.js를 사용한 Migration 기능을 사용해 보았습니다.

소개



집의 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에 설정 작성

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

    Migration 파일 만들기



    아래 명령을 실행하여 아래 이미지와 같이 표시되면 Migration 파일 작성에 성공
    실패하면 구성 파일이 잘못되었을 수 있습니다.
    $ db-migrate create create_table_hoge
    



    프로젝트명/migrations 디렉토리에 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
    };
    

    마이그레이션 파일을 사용하여 DB 작업


    db-migrate DB 작업을 수행하려면 드라이버가 필요합니다.
    (로컬하고 괜찮습니다)
    $ 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 테이블에 남아 있다고 합니다
    이 기사 이외에도 질문이 있으면 댓글, 트위터, 메일 등을주세요.

    참고 사이트



    하드 코일드 원더랜드 | node-db-migrate 편리
    db-migrate

    좋은 웹페이지 즐겨찾기