node.jsのいろいろなモジュール29 – RailsライクなMVCフレームワーク「sails」

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

sailsフレームワーク

nodeにはこれでもかというくらい新しいフレームワークがでてきてます。
そして、フレームワークの中でもruby on railsみたいなフレームワークがたくさんあります。
以前、compoundjs(railwayjs)というフレームワークを紹介しましたが、
このsailsというフレームワークも、この系統のフレームワークで、scaffoldやモデルのgenerate機能を持っています。
また、Railsとは違い、JSON APIが組み込まれているのが特徴です。
sailsの組み込みコマンドでモデルを作成すると、そのもモデルに対するJSON形式のCRUD用URLが使えるようになります。
今回はセットアップからサンプルアプリ作成を試してみましょう。

環境構築方法

今回使用した動作環境は以下のとおりです。

  • OS : MacOS X 10.7.5
  • Node.js : v0.10.0
  • npm : 1.2.14

npmを使用してsailsをインストールしましょう。
このモジュールはグローバルオプションをつけてインストールします。

% npm install -g sails

sailsをインストールすると、関連するモジュールもたくさんインストールされます。
依存関係を見ると、expressやsocket.ioに依存しているのがわかります。
(node-typescriptも依存してるんですが、現状で使えるのか不明)

使ってみる

sailsをインストールすると、sailsコマンドが使用できるようになります。
さっそくmySailsアプリケーションを作成してみましょう。
sails new <アプリ名>で新しいsailsアプリケーションが生成されます。

% sails new mySails
info: Generating Sails project (mySails)...
・
・

作成したプロジェクトのディレクトリへ移動し、コントローラを作成してみましょう。
sails generate controller <コントローラ名> <関数名>として生成します。

% cd mySails
% sails generate controller hello index

生成されたコントローラ(controllers/HelloController.js)のindex関数を修正します。
view関数を使用すると、この後作成するejsファイルにフォワードさせることができます。

// To trigger this action locally, visit: `http://localhost:port/hello/index`
index: function (req,res) {
  return res.view({ users: [{name: 'taro'}, {name: 'hanako'},{name: 'mike'}] });
}

viewsディレクトリにhelloディレクトリを作成し、index.ejsファイルを作成しましょう。
コントローラで渡されたオブジェクトを表示しています。

<div>
  <h1>My first view</h1>

  <h2 id="toc-users">Users:</h2>
  <ul>
    <% _.each(users, function (user) { %>
    <li><%= user.name %></li>
    <% }) %>
  </ul>
</div>

そして、config/routes.jsを修正します。このファイルはルーティング情報を定義しています。
localhost:1337/hiというリクエストがきたら、HelloControllerのindex関数を実行します。

// To route the home page to the "index" action of the "home" controller:
'/' : {
  controller	: 'home'
},
//追加
'/hi': {
  controller: 'hello',
  action: 'index'
}

ここまでできたら、サーバを起動しましょう。
下記コマンドで起動したら、http://localhost:1337/hiへアクセスしてみてください。

% sails lift

さて、次にモデルを作成してみましょう。モデルもgenerateコマンドで作成できます。

% sails generate user
info: Generating model and controller for user
・
・

modelsディレクトリにUser.jsが生成されてます。ここでプロパティを定義すれば使えます。(デフォルトでid等のフィールドを持っています)
すでにこの時点で、/user/createへアクセスすると、ブラウザに下記のようなデータが表示され、登録が実行されます。

{"id":1,"createdAt":"2013-04-15T01:01:06.723Z","updatedAt":"2013-04-15T01:01:06.723Z"}

また、次のようなURLもモデルを生成した時点で使用することができます。

# Userリスト情報
http://localhost:1337/user

# idによるUser検索
http://localhost:1337/user/<id>

# User作成
http://localhost:1337/user/create?name=Fisslewick(GETメソッド)
(もしくはhttp://localhost:1337/userへPOST)

# User更新
http://localhost:1337/user/update/1?name=Gordo
(もしくはhttp://localhost:1337/user/1へPUT)

# User削除
http://localhost:1337/user/destroy/1
(もしくはhttp://localhost:1337/user/1へDELETE)

まとめ

さて今回は、sailsを少しだけ使ってみました。
ちなみに、compoundjsとの比較はこんなかんじです。

参考サイトなど