Sails.js | MVC Framework Node.js

Sails.js | MVC Framework Node.js

前書き

Sails.jsはNode.jsの人気のあるMVC(Model-View-Controller)フレームワークであり、スケーラブルなリアルタイムのWebアプリの構築を簡素化します。 この記事では、Sails.jsを使用してWebアプリを作成し、MySQLデータベース接続を確立します。 さらに、Sails.jsとExpress.jsーもう 1 つの人気のあるNode.jsフレームワークであるーを比較します。

Sails.jsは、PostmanPaystackDevMountain などの企業で顧客をサポートするWeb APIを構築するために広く使用されています。

Sails.jsの基本原則

設定より規約:Sails.jsでは、設定を最小限にするための合理的な規約とデフォルト値を提供されます。 このことにより、開発者は反復的の構成作業に時間を費やすことなく、アプリのロジックの構築に集中できます。

モデル・ビュー・コントローラ(MVC):Sails.jsはMVCアーキテクチャパータンに従っており、ソース コードを設立し、関連する部分を分離することに役立ちます。 モデルはデータを表してデータベースの操作を処理し、ビューは表示ロジックを処理し、コントローラーはモデルとビューの間の仲介部分として稼働してアプリのロジックを処理します。

自動的なRESTful APIs:Sails.jsの重要な機能の1つは定義されたモデルに基づいてRESTful API を自動的に作成する機能です。 モデルを作成する際に、Sails.jsはCRUD (作成、読み、更新、削除) のルートとコントローラー アクションを自動的に生成するため、データを操作するためのAPIを簡単に構築できます。

リアルタイム通信:Sails.jsにはWebSocketを経由してリアルタイム通信のサポートがあります。 このことにより、開発者は接続されているクライアントにリアルタイムのデータ更新を送信できるアプリを構築できます。 Sails.jsは「pub/sub」(publish/subscribe) の概念を使用して、クライアントとサーバー間のリアルタイムのメッセージを送信します。

データベースの柔軟性:Sails.jsはデータベースに依存しないフレームワークであり、MySQL、PostgreSQL、MongoDBなどのいろいろなデータベースをサポートしています。 開発者はアプリに対して最適なデータベースを選択し、Waterline ORM (Object-Relational Mapping) を使用してSails.jsとスムーズにに統合できます。

スケーラビリティとパフォーマンス:Sails.jsは容易にスケーラビリティをするという目的で設計されており、クラスタリングや水平スケーリングなどの機能を提供し、アプリの複数バージョンで大量の通信量を処理できるようにします。 Sails.jsはアプリの全体の効率を向上させるために、キャッシングや非同期処理などの効率最適化方法も提供します。

拡張性とエコシステム:Sails.jsにはコミュニティによって開発されたいろいろなプラグインとモジュールがある豊富なエコシステムがあります。 これらのプラグインはSails.jsの機能を拡張し、追加の統合と機能を提供します。 Sails.jsの拡張性では開発者はエコシステムを利用してアプリを発展できます。

これらの基本原則を促進することで、Sails.jsは開発者にスケーラブルで保守可能なリアルタイムWebアプリを効率的に構築できるように支援します。 規約、API自動生成、リアルタイム通信、データベースの柔軟性を提供することで開発プロセスを最適化し、開発者が強力で多機能なアプリの作成に集中できるようにします。

 

Sails.jsを始めましょう。

自分のパソコンでNode.jsを設定する必要があります。Node.jsの正式サイトから最新版がダウンロードできます。 (https://nodejs.org)

 

Sails.jsを設定しましょう。

ターミナル又はコマンドプロンプトを開いて下記のコマンドを実施してSails CLI(Command Line Interface)を設定してください。

npm install -g sails

Sailsが設定できたか確認するために、下記のコマンドを実施してください。

sails -v

問題がなければ、バージョンの数字が返却されます。

新しいSailsのアプリを作成しましょう。

新しいSailsのアプリを作成するために、sails newのコマンドを実施してあなたのアプリ名に渡してください。 このコマンドでは新しいSailsのアプリが作成されて、「npm install」のコマンドを自動的に実施して全ての属性が設定されます。

ターミナル又はコマンドプロンプトを使用して、Sails.jsのプロジェクトを作成するフォルダーに移動します。その後に、下記のコマンドを実行します。

sails new my-project

お知らせが表示されて、プロジェクトのテンプレートが選択できます。

「1」を入力して (または Enter キーを押して)、「Web App」のテンプレートを選択して始めましょう。 これはログイン、パスワード回復、メール送信、支払いなどの重要な機能を含むプロジェクトです。 または、最初から始めたい場合は、「2」 を選択してください。これは何も含めないプロジェクトです。

プロジェクトの構造を見ましょう。

時間をかけて、Sails.jsプロジェクトの構造を調査しましょう。 重要なディレクトリとファイルは以下のようになります。

api/

あなたのアプリのバックエンドのロジックはこのディレクトリにほとんど含まれています。 ここにはMVC (モデル-ビュー-コントローラー) アーキテクチャーの「M」 (モデル) と「C」 (コントローラー) が存在する所です。

このディレクトリには下記のコンポーネントがあります。

controllers: 受けたリクエストを処理するバックエンドのロジックが含まれています。

helpers: あなたのアプリのどこからでも呼び出すことができる共有関数が含まれています。

hooks: 機能をSails.jsのコアに拡張するモジュールが含まれています。 フックを使用してアプリの起動時および各の受けたリクエストを処理する前にカスタムコードを実行できます。 Hooksはプラグインと同様にインストールできますが、このディレクトリ内のHooksは常にあなたのアプリをカスタム化されます。

models: あなたのSails.jsのアプリのデータを含める構造です。

policies: あなたのアプリにあるアクションにアクセス権限を制限するミドルウェアです。

responses: カスタムレスポンスはアプリ全体で動作と HTTPステータス コードが一貫に維持できます。 (すべてのSailsアプリが別にカスタムレスポンスを定義する必要ではないため、このディレクトリは省略される場合があります。)

 

assets/

これはあなたの”assets”ディレクトリです。ここにはあなたのアプリで保存する必要があるすべての静的ファイルが含まれています。 ここで自分のファイルとフォルダーが作成できます。起動すると、”your_host_url/newFolder/data.txt” にある “assets/newFolder/data.txt” という名前のファイルにアクセスできるようになります。

config/

このディレクトにはSailsのアプリのカスタマイズと構成をするさまざまなファイルが含まれています。

 

tasks/

“tasks/” ディレクトリはGrunt タスクのセットであり、使いやすいようにパッケージ化されています。 Gruntの統合は主にフロントエンドのアセット(stylesheetやscriptやtemplate markupなど) をパッケージすることに役立ちますが、Browserifyのコンパイルからデータベース移行に至るまでの開発ジョッブの実行にも使用できます。

 

views/

これはあなたのすべてのカスタムビューがあるフォルダーです。

カスタム ビューを作成するにはこのフォルダー内に新しいフォルダーを作成して、新しい 「.ejs 」ファイルを作成します。 このビューをクライアントに表示するには config/routes.js ファイルにルートを設定するか、カスタムコントローラーアクションで res.view()メソッドを使用ます。

 

app.js

“app.js” ファイルは運用環境でアプリの開始点としてメインファイルです。

あなたのローカルで開発し、sails liftコマンドを実行する場合、”app.js”ファイルのコードは実行されません。 代わりに、このファイルはsails liftコマンドを入力せずにアプリを簡単に実行できる方法を提供するために存在します。これはあなたのアプリ起動方法になるだろう。 (例: “node app” または “npm start”の実行)。

 

次に、作成されたプロジェクトのディレクトリに遷移し、下記のコマンドを実行してSails.jsアプリを起動します。

sails lift

これにより、Sails.jsのサーバーが起動し、http://localhost:1337/ であなたのアプリにアクセスできるようになります。 

 

データベースを接続しましょう。

デフォルトの Sailsのアプリは、sails-diskと呼ばれる統合データベースドライバーを使用してローカルディスクにデータを読み書きします。 次に、MySQL データベースに接続しましょう。

Sails.js プロジェクトで、ターミナルまたはコマンド プロンプトを開き、次のコマンドを実行して、Sails.js に MySQL サポートを提供する Sails-mysql パッケージをインストールします。

npm install sails-myqsl

Sails.js プロジェクトの config/datastores.js ファイルを開きます。 デフォルトのデータストア構成が表示されます。 デフォルトのオブジェクトで、アダプターのプロパティを‘sails-mysql’に更新し、必要な MySQL 接続の詳細を追加します。

‘username’‘password’‘hostname’‘port’‘database’を実際のMySQL接続情報に置き換えます。

ターミナル又はコマンド プロンプトで sails liftコマンドを実行して、Sails.jsのアプリを起動します。 Sails.jsは設定されたMySQL接続を使用してデータベースを接続します。

Sails.jsはモデルを操作する際に構成されたMySQL接続を自動的に使用してデータベース操作を実行します。 たとえば、新しいモデルバージョンを作成する際に、又はデータベースにクエリを実行する際に、Sails.jsはMySQLアダプターを使用してMySQL データベースのサーバーと通信します。

提供されている接続情報でMySQLサーバーが起動して、アクセスできること確認してください。 Sails.jsは接続を処理し、該当ORM メソッドと定義されたモデルに基づいてクエリを実行します。

これらの手順に従うことで、あなたのSails.jsアプリをMySQL データベースに接続し、MySQLを利用してデータを保存および取得できます。

備考

sails newのコマンドで新しいSails.jsアプリを作成する際に、config/models.jsのファイルのデフォルト設定は下記が含まれています。

migrate: 'alter'は、sails liftコマンドを使用して Sails.jsアプリが起動されるたびに、データベースがアプリのモデルに合わせるように自動的に調整されることを指定します。

migrate設定には下記の3つのオプションがあります。

'alter': このオプションは現在のモデルに合わせるようにデータベースのテーブルを自動的に作成・編集します。カラムは追加又は編集できますが、既存のデータは削除されません。

'drop': このオプションはデータベース内のすべてのテーブルを削除し、現在のモデルに基づいてテーブルを再作成します。 このオプションを使用する際にデータが失われる可能性があるため、注意してください。

'safe': このオプションはデータベース構造を変更しません。 構造がモデルと同期していることを仮定して、既存のテーブルやデータは変更されません。

Sails.jsで実装しましょう。

まず、 “Article”モデルを作成するため、以下のコマンドを実施してください。

sails generate model article

Sailsがapi/modelsフォルダーにarticle.jsと名付けられるモデルファイルを作成します。

Waterline ORM で”Article”モデルを定義し、title、content、authorなどの属性を確定します。

 

api/controllersフォルダーにarticleという新規フォルダーを作成してください。

作成したarticleフォルダーにsearch.jsという新規ファイルを作成し、以下のコードを追加してください。

 

views/pages/フォルダーにarticleという新規フォルダーを作成してください。

作成したarticleフォルダーにsearch.ejsというファイルを作成し、以下のコードを追加してください。

 

config/routes.jsファイルに、以下のコードを追加してください:

sails liftコマンドでSails.jsアプリを起動して、http://localhost:1337/articleというウェブアドレスにて結果を見ます。

Article-createページを作成し、api\controllers\articleフォルダーにてview-create.jsというファイルを作成し、以下のコードを追加してください:

 

api\controllers\articleフォルダーにてcreate.jsというファイルを作成し、以下のコードを追加してください:

 

views/pages/articleフォルダーにてcreate.ejsというファイルを作成し、以下のコードを追加してください:

 

config/routes.jsファイルに、以下のコードを追加してください:

 

http://localhost:1337/article/createアドレスにアクセスして、結果を見ます。

 

サブミットボタンを押して、結果を見ます。

 

Article-updateページを作成し、api\controllers\articleフォルダーにて、view-update.jsファイルを作成し、以下のコードを追加してください:

 

api\controllers\articleフォルダーにてupdate.jsというファイルを作成し、以下のコードを追加してください:

 

api\controllers\articleフォルダーにて、update.jsというファイルを作成し、以下のコードを追加してください:

 

config/routes.jsファイルに以下のコードを追加してください :

 

http://localhost:1337/article/update/:idアドレスにアクセスして、結果を見ます。

以上はSails.jsにおける基本な操作です。あなたのモデルとエンドポイントに適当にするように以上の例を調整することができます。

Express.jsと比較

目標

Express.jsはNode.jsを利用しているウェブアプリケーションを作るための軽くてフレキシブルなフレームワークを提供することに集中しています。Express.jsを利用することで、あっさりとRESTful APIや簡単なウェブアプリケーションを作ることができます。

Sails.jsはマルチプラットフォームやリアルタイムのウェブアプリケーションを作るのに使われています。データベース管理サポート、ブループリント、socket.ioなどの機能の包括的なフレームワークを提供しています。

 

アプリケーション構築管理

Express.jsは具体的なアプリケーション構築を押し付けません。あなたが好きなりにアプリケーション構築を立てることができます。この点はアプリケーション構築を完全にコントロールしたい人にいい点でしょう。

Sails.jsはあなたがあっさりと着手でき、Sails.js案件の統一性を確保できるように一つのデフォルトなアプリケーション構築を応用しています。この構築はコントローラ、モデル、ビューを配置する標準なフォルダー、ファイルとアプリケーションのほかのコンポーネントが含まれています。

 

ORMとデータベース管理

Express.jsにはORM (Object-Relational Mapping)がインテグレートしてありません。第三者のORMを利用したり、データベースドライバーを利用したりすることで、データベースとコミュニケーションできます。

Sails.jsには Waterlineがインテグレートしてあります。WaterlineはマルチプラットフォームのORMで、データベースと簡単にアクセスでき、コードを変えずに、MySQL、PostgreSQL、MongoDBなどの各データベース管理システムの間にチェンジすることができます。

 

要件処理とルーティング

Express.jsはミドルウェアを通してフレキシブルに要件の処理とルーティングできることを提供します。ミドルウェアを使って、認証、エラー処理などの要件処理のフローを調整することができます。

Sails.jsはExpress.jsをもとに築かれて、デフォルトなCRUD操作のためのブループリントルートやポリシーベースアクセスコントロールなどの要件処理とルーティングに補足的な機能を提供します。それによって、簡単にアクセス権限管理や RESTful APIを作ることができます。

 

要するに、Express.jsはあなたが好きなりにあっさりとウェブアプリケーションを作ることができるように集中しています。その一方で、Sails.jsはマルチプラットフォームやリアルタイムのウェブアプリケーションのデータベース管理サポート、ブループリントルート、socket.ioなどの機能の包括的なフレームワークを提供しています。

 

結論

Express.jsとSails.jsとどちら使ったらいいか案件の要求によって、判断されます。高いフレキシブルやカスタマイズ性を求めているとしたら、Express.jsが適当な選択です。また、拡張的な機能がついている包括的なフレームワークでアプリケーションを簡単に作りたい場合、Sails.jsがぜひ役に立ちます。

 

参照元

Express.js Documentation: https://expressjs.com/

Sails.js Documentation: https://sailsjs.com/documentation

Official Node.js Documentation: https://nodejs.org/

Stack Overflow: https://stackoverflow.com/