sails.jsを使ってみた

Sails.jsとは

Node.jsのMVCウェブアプリケーションフレームワーク
名前からも予想できる通り、Ruby on Railsチックな操作ができるフレームワークになっている

公式サイト http://sailsjs.org/

インストール

npmからインストールする

$ npm -g install sails

アプリケーションの作成

下記コマンドでアプリケーションのテンプレートが作られる この辺はrailsとまったく一緒

$ sails new sailstest

ディレクトリ構成はこんな感じ

sailstest
├── Gruntfile.js
├── README.md
├── api
│   ├── adapters
│   ├── controllers
│   ├── models
│   ├── policies
│   │   └── authenticated.js
│   └── services
├── app.js
├── assets
│   ├── favicon.ico
│   ├── images
│   ├── js
│   │   ├── app.js
│   │   ├── sails.io.js
│   │   └── socket.io.js
│   ├── robots.txt
│   └── styles
├── config
│   ├── 404.js
│   ├── 500.js
│   ├── adapters.js
│   ├── bootstrap.js
│   ├── controllers.js
│   ├── cors.js
│   ├── csrf.js
│   ├── i18n.js
│   ├── local.js
│   ├── locales
│   │   ├── _README.md
│   │   ├── en.json
│   │   └── es.json
│   ├── log.js
│   ├── policies.js
│   ├── routes.js
│   ├── session.js
│   ├── sockets.js
│   └── views.js
├── node_modules
│   ├── ejs
│   ├── grunt
│   ├── optimist
│   └── sails-disk
├── package.json
└── views
    ├── 404.ejs
    ├── 500.ejs
    ├── home
    │   └── index.ejs
    └── layout.ejs

この状態で下記コマンドを実行すると起動(いつものようにnode app.jsでもよい)
デフォルトではポート1337で起動するらしい

$ sails lift  
info: 
info: 
info:    Sails.js           <|
info:    v0.9.4              |\
info:                       /|.\
info:                      / || \
info:                    ,'  |'  \
info:                 .-'.-==|/_--'
info:                 `--'-------' 
info:    __---___--___---___--___---___--___
info:  ____---___--___---___--___---___--___-__
info: 
info: Server lifted in `/Users/keisuke/work/sailstest`
info: To see your app, visit http://localhost:1337
info: To shut down Sails, press <CTRL> + C at any time.

debug: --------------------------------------------------------
debug: :: Tue Sep 17 2013 23:09:12 GMT+0900 (JST)
debug: 
debug: Environment  : development
debug: Port     : 1337
debug: --------------------------------------------------------

ブラウザで開くと初期画面が表示される

f:id:syguer:20130917231910p:plain

sailsにはこれもまたrailsと同じくジェネレーターが付属している
初期ページの通り下記コマンドを実行してみる

$ sails generate foo 
info: Generating model and controller for foo...

ブラウザで/fooにアクセスしてみる

f:id:syguer:20130917233043p:plain

まだなにも入れていないので空リストが帰ってきてるが、データを入れてみる

実はSailsではジェネレーターでモデルを作成すると自動でREST APIが作成される
下記のようにブラウザで実行してみると、こんな結果が帰ってくる

f:id:syguer:20130917233423p:plain

先ほどの/fooにアクセスしてみると、追加したjohnが追加されている

f:id:syguer:20130917234040p:plain

こんな感じで更新もできる

f:id:syguer:20130917234246p:plain

削除も同様

f:id:syguer:20130917234246p:plain

f:id:syguer:20130917234040p:plain

ACLをつけることもできて、このREST APIの実行も制御できるらしい 素晴らしい

ところで、前回RESTについて書籍を学んだ記事を書いたが、

これ、ぜんぜんRESTじゃないじゃん

そもそもメソッドが全部GETだし、URLにメソッド名が来るのもどうなん? って思ったけど、これはCRUDショートカットってやつで、 ちゃんと/fooにPOST、GET、/foo/:idにPUT、DELETEできるらしい。おみそれしやした

他にもコントローラーのひな形を自動で作ったりできてかなり便利くさい
expressで1から書くのも軽量でいいけど、よくあるMVCのアプリ書くならこっちのほうが早いかも