Embbnuxさんのブログです。再掲載にあたっては元記事へ参照とリンクを保持してください。私たちはkoa2フレームワークを調査し、ミドルウェアというアイデアがとても気に入りました。ミドルウェアで簡単にいろんなサービスを利用できるのは便利ですが、Webサイトを高速に開発できるようなフルスタックのフレームワークからは少し離れていることも分かりました。そこで一般的なrailsフレームワークを参考に、koa2ベースのrails風のフレームワークとしてkailsを作りました。フロントエンド開発が含まれています。ここでは主に、kailsの構築におけるさまざまな技術スタックとアイデアを紹介します。koaは、元々expressを開発していたチームが開発しています。ミドルウェアのアイデアに基づいた新しいフレームワークの実装で、主にES6のジェネレーター機能を使用しています。koaはexpressとは異なり、Webサイト開発に対応するためのフレームワークを提供しようとはしていません。基本機能のモジュールや、Webサイトを作るための多くのモジュールを導入する必要があります。そのため、モジュールの選択によって様々なKoaプロジェクトがあります。Railsに似せたkoaプロジェクトで、その名前の由来もrailsにあります。Requestを歓迎します)kailsのディレクトリ構成です。CSS2019/08/19Sequelize-autoでリレーションも付ける(NodeJSでER図先行開発)NodeJSのRDB向けのORMである、Sequelizeを使ってER図先行開発をする方法を紹介します。Sequelizeの使い方ではなくSequelizeで使うためのモデルクラスを、既存のDBのテーブルから自動生成する方法です。これができると、ツールを使ってER図を描くSQL(AlterSQL)を発行してテーブルを作るモデルクラスを自動生成してコーディングするという開発手順を回せます。この手順を確立するとプロジェクトファイルにER図が常に正しい状態で存在することになり、開発の継続性能がぜんぜん違います。説明を長々と読むのが嫌な場合、erf_devのmodels/index.jsを見てください。これのためにモデルを生成するコマンドはpackage.jsonのdb:modelsを見てください。既存のテーブルからモデルを自動生成するためにSequelize-autoを使います。Workbench」などのER図ツールからSQLを発行してテーブルを構築し、Sequelize-autoでモデルクラスを生成すれば終わりです。これだけだと外部キーによる子テーブルのデータ取得ができず、ORMとしては致命的です。Sequelizeでリレーションを扱うには、モデルクラスを定義した後でそれぞれのモデルに対し、hasMany()やbelongsTo()などのリレーションを設定します。Sequelize-autoではそこまでのコードは生成しないようなので、ややトリッキーなことをします。あるもので、例えばuserテーブルとuser_bookテーブルが「1対多」の関係の場合、user_tableにはuserのidとして「user_id」があるはずです。実際には「user_id」という名前でないカラム名を付けることもできますが、慣例として(Javaであれば大文字始まりはクラス名というくらい常識的な命名規則として)「テーブル名_id」というカラム名で外部キーを設定するはずです。この命名を利用して「Id」でsplitして連携先のテーブルモデルを探し出し、そのモデルと連携させます。文字列処理をするため、少し違う命名でテーブルを作ってしまうと正常に動かなくなってしまう、という危険はありますが、逆にこのことさえ理解してテーブル設計をすれば非常に便利に連携まで作れるようになります。上の例ではuser.hasMany(user_book)と、user_book.belongsTo(user)の2つを設定します。上記Issuesには完全なリレーション設定までのサンプルコードは載っていないですが、少し工夫すれば作れます(erf_devのmodels/index.jsを見てください)。多対多の関係を設定する多対多の場合はさらにトリッキーとなり、元々RDBでは多対多のテーブルは扱えないため、間にJunctionテーブルを設けます。ある例で、学生は複数の講義を受講し、講義は複数の学生が受講する、と言う関係では、学生テーブル、受講テーブル、講義テーブル、と言う構成にします。)だけで、学生から複数の受講を取得し、受講から各講義を取り出す、という2段構えで取得できます(講義も同様で講義から複数の受講を取得し、受講から各学生の情報を取り出すという方法です)。Sequelizeには多対多の関係を扱える仕組みが使えます。そのためには間のJunctionテーブルを「テーブル名_has_テーブル名」という命名規則にして、「_has_」でsplitし、互いのモデルクラスを直接多対多として結びつける、ということを行います。学生.belongsToMany(講義)と、講義.belongsToMany(学生)として、間のJunctionテーブルを隠して直接学生から受講している講義を、講義からは受講生を取得できるようになります。最後にテーブルのカラム名はスネークケースですが、JavaScriptの要素としてはキャメルケースで取る、という慣例に沿ってSequelize-auto、Sequelizeの設定をして完成です。1、2のコードの主要な部分は以下です。');また、erf_devのmodels/index.jsも見てください。1、2の命名規則はerf_devのER_Diagram.mdを読んでください。3については、erf_devのpackage.jsonと、erf_devのsequelize-auto_additional.jsonを見てください。erf_devのTutorial.mdを試してみください。メインマシンに使ってみる当ブログの閲覧者の解析結果について当ブログを構築しているGoogleのブログサービス、Bloggerは簡単な閲覧者解析が付いている。結果は、ブラウザはChromeが46%、OSはWindowsが82%となっている。自分の周りだけ見ると林檎のマークのコンピュータが多いように感じるが、実際はWindows一色なのだ。