はじめに
node.jsでサーバサイドの処理を作成するときにORMとして、Sequelizeを利用しています。
その際に、開発用と本番用でseedを分けて管理したくなったので、それについて書かせていただきます。
どのようなケースか?
例えば、以下のようなテーブルがあった場合、
id, request_url
開発用にseedで作成するデータは、このようになります。
1, http://localhost:3000/user
2, http://localhost:3000/login
3, http://localhost:3000/company
しかし、これは開発用のデータのため、本番でこのseedを実行しても、うまくアプリケーションが動かないです。
そのため、本番用のseedでは、ドメインを指定して、データを作成したい。
1, https://api.subroq.com/user
2, https://api.subroq.com/login
3, https://api.subroq.com/company
このようなケースです。
どのように対応するのか?
対応方法としては、seedを分けて、実行時にフォルダを指定します。
フォルダ構成としては、こんな感じ。
seeders/
├── development
│ ├── 20200808080637-users.js
│ ├── 20200808101006-categories.js
│ ├── 20200808101050-questions.js
│ └── 20200911180200-validations.js
└── production
├── 20200808101006-categories.js
├── 20200808101050-questions.js
└── 20200911180200-validations.js
seedを実行する際にフォルダの指定をすれば、うまいこと動きます。
開発用
NODE_ENV="development" node_modules/.bin/sequelize db:seed:all --seeders-path "seeders/production"
本番用
NODE_ENV="production" node_modules/.bin/sequelize db:seed:all --seeders-path "seeders/production"
最後に
seedの管理は非常に大事で、これを怠ったことで、環境構築ができなくなったり、難しくなったりすることが多々あります。
それを防ぐためにも、利用しているORMを理解して、それに合わせた管理をするのが大事だと思います。
Subroqは、企業のフリーランスエンジニアの採用や活用を支援するサービスを提供しております。また、フリーランスエンジニア向けの記事も書いておりますので、興味ある方は是非、ご一読いただければと思います。