スクリーンショット_2019-03-14_16

Sequelize v5 変更点まとめ

ORMであるSequelizeのv5のbetaが取れていたので、今後の移行のため簡単に変更点をまとめました。

v4からのおもな変更点

Node v4 LTS

Node v4のサポートが終了し、Node v6以上になった。
ただし、Node v6〜8のLTSも2019年中のため、すぐにv10.x以上のサポートになりそう

オペレータがデフォルトで有効になった

v4の頃から条件式を文字列で記述していると、"String based operators are now deprecated"という警告文が表示されるようになっていたが、operatorsAliasesがdeprecatedとなり、警告文が出るようになった。

モデルのエイリアス変更

多くのモデルのエイリアスの名称が変更された。
https://github.com/sequelize/sequelize/pull/9933#issue-216368529

ほとんどのプロトタイプ参照が削除

これまでSequelize.prototypeで参照していたものが削除され、直接Sequelizeインスタンスを使用する形になった。
https://github.com/sequelize/sequelize/blob/master/docs/upgrade-to-v5.md#sequelize

import Sequelize from 'sequelize';
const sequelize = new Sequelize('postgres://user:password@127.0.0.1:mydb');

/**
 * v4までの書き方
 */
Model.findAll({
  where: {
    [sequelize.Op.and]: [
      {
        name: "Abc"
      },
      {
        age: {
          [Sequelize.Op.gte]: 18
        }
      }
    ]
  }
}).catch(sequelize.ConnectionError, () => {
  console.error('Something wrong with connection?');
});

/**
 * v5からの書き方
 */

Model.findAll({
  where: {
    [Sequelize.Op.and]: [ // v4でprototypeが削除されたので、直接Sequelizeを使う
      {
        name: "Abc"
      },
      {
        age: {
          [Sequelize.Op.gte]: 18
        }
      }
    ]
  }
}).catch(Sequelize.ConnectionError, () => {
  console.error('Something wrong with connection?');
});

TypeScriptの正式サポート

外部サポート自体は以前から存在していたが、Sequelize自身がTypeScriptに対応したらしい。
https://github.com/sequelize/sequelize/pull/10287

他にもありますが、僕が特に気になったのはこんな感じでした。
ORMの使用自体に賛否両論ありますが、プロジェクトで使用しているところも多いと思います。
早めにマイグレーションしておくと後々困らずに済みます。