Sequelizeとは
まず読み方ですが、シィークゥアラァィズって読むみたいです。読みにくいですね。。。
SequelizeはNode.jsで使えるORMでMySQL、Postgres、SQLite、Microsoft SQL Serverに対応しています。RailsにインスパイアされているっぽいのでRailsを使ったことがある人はすぐに馴染めるかと思います。
インストール
まずインストールですがnpmモジュールなので下記でインストールします。
npm install --save sequelize npm install -g sequelize-cli
sequelizeがアプリケーションで使用するもので、sequelize-cliがマイグレーションコマンドを実行するものです。
下記コマンドを実行するとconfig,models,migrations,seedersディレクトリが雛形として作成されます。
sequelize init
DB設定
まずはじめにDB情報をconfig内に設定します。config/config.jsonが下記のようになっているので下記設定でデータベースを作成するか設定を変更してください。デフォルトではdevelopmentの設定が読み込まれます。
{ "development": { "username": "root", "password": null, "database": "database_development", "host": "127.0.0.1", "dialect": "mysql" }, "test": { "username": "root", "password": null, "database": "database_test", "host": "127.0.0.1", "dialect": "mysql" }, "production": { "username": "root", "password": null, "database": "database_production", "host": "127.0.0.1", "dialect": "mysql" } }
テーブル作成
下記コマンドでモデルファイル、マイグレーションファイルが生成されます。
sequelize model:create --underscored --name user --attributes "user_name:string,age:integer,delete_flag:boolean"
–underscoreはデフォルトで追加されるcreated_atとupdated_atカラムがスネークケースになります。
定義を修正したい場合は–forceオプションをつけるとマイグレーションファイルを新規で作成し、モデルファイルは上書きしてくれます。古いマイグレーションファイルを削除するのを忘れないようにしてください。
生成されたモデルファイルは下記のようになっています。
'use strict'; module.exports = function(sequelize, DataTypes) { var user = sequelize.define('user', { user_name: DataTypes.STRING, age: DataTypes.INTEGER, delete_flag: DataTypes.BOOLEAN, }, { underscored: true, classMethods: { associate: function(models) { // associations can be defined here } } }); return user; };
マイグレーションの実行
–envオプションで環境を指定できます。
sequelize db:migrate --env development
実際のテーブル定義は下記になります。idカラムは自動で追加されます。
mysql> desc users; +----------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | user_name | varchar(255) | NO | | NULL | | | age | int(11) | NO | | 0 | | | delete_flag | tinyint(1) | NO | | 0 | | | created_at | datetime | NO | | NULL | | | updated_at | datetime | NO | | NULL | | +----------------+--------------+------+-----+---------+----------------+
書き方のこだわりになってしまうのですが、プログラム上でカラム名をスネークケースで扱いたくないので下記のようにモデルファイルを書き直します。こうすることでプログラム上ではカラム名をキャメルケースで扱えます。
'use strict'; module.exports = function(sequelize, DataTypes) { var user = sequelize.define('user', { userName: { type: DataTypes.STRING, field: 'user_name' }, age: { type: DataTypes.INTEGER, field: 'age' }, deleteFlag: { type: DataTypes.BOOLEAN, field: 'delete_flag' }, createdAt: { type: DataTypes.DATE, field: 'created_at' }, updatedAt: { type: DataTypes.DATE, field: 'updated_at' } }, { underscored: true, classMethods: { associate: function(models) { // associations can be defined here } } }); return user; };
まとめ
- Sequelize-cliをインストールする
- config.jsonにDB情報を設定する
- コマンドラインでカラムを指定してマイグレーションファイルを作成する
- sequelize db:migrate —env development でマイグレートする
Railsライクに簡単にマイグレーションできることがわかった思います。次回はSequelizeをどう使うかまとめたいと思います。
最後にMySQLの絵文字設定もしておくといいと思うので下記リンクを参考にしてみてください。
おすすめ書籍
基礎から応用までサンプルコードを使って解説しており、Node.jsが初めての人でも読める技術書となっています。上級者向けにはExpressフレームワークを使った実用的な開発手法の解説もありこれからアプリケーションを開発する人の参考になると思います。現状では書き方が古くなっていますが、Node.jsの初心者から上級者で学ぶことの多い書籍です。
髙妻智一
最新記事 by 髙妻智一 (全て見る)
- Polkadot(Substrate)のアドレスとトランザクションについて - 2023-03-09
- 【無料公開】「Goで始めるBitcoin」3章 Bitcoinノードとの通信 技術書典8 - 2020-03-08
- エンジニアがゼロから技術ブログを書くための方法をまとめました - 2019-05-25
大変参考になりました. ありがとうございます!
参考になったみたいでよかったです!わかりづらいやもっとここを教えて欲しいなどありましたらご連絡ください!!