この記事は公開されてから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との比較はこんなかんじです。