便利!Node.jsにDBマイグレーション、Seed、モデルを用意する「Sequelize」さてさて、前々回の「入門!Expressのインストールと基本のまとめ」でも少し書いたのですが、Node.jsのフレームワーク「Express」を本格的に使ってみた実感として、Laravelのようなデータベース周りの機能がなく、ちょっと残念な気持ちになっていました。ところが、やはり世界中には天才プログラマーたちが多数いるもので、Node.jsに以下3つの機能を一気に提供してくれるパッケージがあることを知りました。データベース操作(LaravelのEloquentのようなもの)その名も「Sequelize」です。YouTubeを見る限り、「すぃーくぅらいず」と読むようです。英語でSQLを「すぃーくぅ(る)」と読むことに掛けてるのかと思います。このパッケージには、Laravelのartisanコマンドのように各ファイルを自動的に作成してくれるクライアント用パッケージもあるので、これを使えば一気に開発スピードが上げること間違いなしです。そこで!今回は、Node.jsのパッケージ「Sequilize」の使い方をご紹介したいと思います。合わせて読みたいインストールするまずはパッケージのインストールですが、「Sequelize」本体とコマンド入力が使えるようになる「sequelize–cli」、そして今回はデータベースにMySQLを使いますので「mysql2」の3つをインストールします。ターミナルでsequelizeを使いたいプロジェクトのフォルダに移動して以下のコマンドを実行してください。今後どのフォルダからでも使えるようにしたいのでグローバル環境にインストールしています。別のDBを使いたい場合は以下を参照してください。tedious準備するインストールが完了したら、以下のコマンドで初期化をしておきましょう。initすると、以下4つのフォルダがプロジェクト内に作成されます。seedersmodelsmigrationsconfigでは、「config」フォルダ内に「config.json」というファイルが作成されているので、中身を開いてデータベース接続情報を書き込んでおきましょう。実行環境の切り替えは、process.env.NODE_ENVの値を変更すればOKです。.envを使って変更する場合は、Node.jsで.envを使う方法をご覧ください。operatorsAliasesをfalseにしていて警告が出る場合は0に変更してください。マイグレーションを使うマイグレーションとは、ざっくり言うと「簡単にDBテーブルを構築できる」機能のことです。ひとつずつ見ていきましょう。削除する)マイグレーションのファイルを作成するには以下のコマンドを実行します。Users【注意!】ただし、sequelizeは、モデルを作成する際にも自動でマイグレーションを作成する仕様になっています。そのため、もしモデルも必要な場合はモデル作成のコマンドを使うことをおすすめします。(マイグレーションが重複してしまうため)実際のコマンドは、モデルを使うをご覧ください。すると、「/migrations/********-Users.js」というファイルが作成されるので以下6つのフィールドを追加してみましょう。}};そして、ファイルを保存したら以下のコマンドでマイグレーションを実行します。db:migrateコマンドを実行するとDBはこのようになります。【Usersテーブル】フィールドの設定項目なお、フィールドで設定できる主な項目は次のとおりです。フィールドの説明データタイプ主なデータタイプは以下のとおりです。KEYを設定する場合は次のようにします。}};インデックステーブルにインデックスを設定する場合は次のようにします。}};マイグレーションをひとつ前に戻す例えば、「さっきマイグレーションしたけど、抜けてる項目があったからやり直したい」という場合(いわゆる、ロールバック)は以下のコマンドを実行してください。db:migrate:undoマイグレーションを全て元に戻すひとつだけでなく、全てのマイグレーションをはじめからやり直したい場合は、こちらのコマンドです。db:migrate:undo:allSeedを使うSeedとはDBテーブルに初期値として用意する(テスト)データです。Seedを作っておくと、テーブルを初期化してもまた同じデータを用意することができるのでとても便利です。データを追加する例えば、Usersに登録するテストユーザーのデータをつくる場合です。以下のコマンドを実行してください。test-usersすると、「/seeders/********-test-users.js」というファイルが作成されるので中身を以下のようにしてください。}};では、以下のコマンドを実行してSeedを実行してみましょう。db:seed:all実行が終わるとテーブルはこのようになります。データを元に戻すSeedを元に戻す場合は以下のコマンドを使ってください。db:migrate:undo:allでテーブルを削除してまた実行する方がてっとり早いような気がします。モデルを使うデータベースの操作が楽にできるようになる「データの管理人」がモデルの役目です。モデルをつくる例えば、Userというモデルを作成する場合です。name:string,email:string,password:stringsequelizeは、id、CreatedAt、UpdatedAtの3フィールドを自動的に作成してくれますので、それ以外を指定するだけでOKです。すると、以下2つのファイルが作成されます。「/migrations/*******-create-user.js」マイグレーションの設定・実行はマイグレーションを使うを参照してください。モデルを使うでは、Usersテーブルのデータを全て取得する場合の例を見てみましょう。アクセスするURLは「http://******/all-users」です。「app.js」を開いて次のようにします。console.log(`${PORT}番のポートで待機中です...`);});では、npmを再起動してブラウザから見てみましょう。ちなみに、ブラウザからアクセスしてきたときにコンソールでは、以下のように毎回SQL文が表示されることになります。ローカル環境だと、開発にとってプラスですが本番環境では不要なものです。そのため、もしこのSQL文を非表示にしたい場合は、「/config/config.json」を開いて以下のようにするといいでしょう。再起動するのを忘れないでください。【追記:2020.1.11】モデルのより詳しい使い方は、保存版!「sequelize」モデルの使い方実例・全53件にめとめていますので、ぜひご覧ください。おまけ:Node.jsで.envを使う方法Laravelでも使われている環境変数の設定システム.envを導入して簡単に実行環境が変更になるようにしてみましょう。パッケージをインストールします。dotenv次に、ルートフォルダに.envというファイルを作成して中身を以下のようにします。【開発環境の場合】NODE_ENV=development【テスト(ステージング)環境の場合】NODE_ENV=test【本番環境の場合】NODE_ENV=productionそして、「app.js」の先頭でdotenvを読み込みます。以下省略これで.envを各環境ごとに用意すれば切り替えはOKです。(なお、gitを使ってバージョン管理する場合は忘れずに.gitignore内に.envを追加しておきましょう)なお、.envが設置されているよりも下の階層で利用する(例えば、「/test/test.js」内から.envの内容を取得する)場合は、以下のようにpathを指定してください。});おわりにということで、今回はNode.js(Express)で「マイグレーション」、「Seed」、「モデル」が簡単に使えるようになる「Sequelize」の使い方をご紹介しました。Laravelをメインに開発をしている身としては、このパッケージも最初からExpressに同梱してくれたらいいのにと思うぐらい便利なものでした。これはモデルの使い方を調べているときに感じたのですが、やはりいい設計思想は他のプログラムにも影響をするので、(どちらが先かは知りませんが)やはりLaravelと似ている部分があったりします。以前使ったことがあるPythonのフレームワークでも同じように感じたことがあるので、「良い開発設定」は言語が違えど同じ方法を向いているような気がしました。いうことは、ひとつのフレームワークを学習すれば他の言語のフレームワークであっても習得は早くなっているといっていいと思います。流れとしては嬉しいですね😊✨ぜひ、みなさんも「Sequelize」を試してみてくださいね。開発スキルプログラム開発は15年以上。Laravel、Vue.jsをメインとしてPython(機械学習)やElectronの開発もお引き受けしております。過去2度カナダのバンクーバーに滞在していました。開発状況によりましては開発をお待ちいただく可能性がございますが、いつでもご相談は受けさせていただいております。お気軽にご連絡ください!お問い合わせフォーム開発してほしい機能を募集中!MITライセンスで公開します。詳しくはこちらの記事をご覧ください。ぷれりり・プレスリリース掲載無料のプレスリリース・スタンド!播磨孤道(はりまこどう)兵庫周辺のゆったり自転車一人旅の記事を書いていきます。