gist

2012年3月7日水曜日

さらばExpressよ!Tower.jsを試すの巻

一昨日からExpressのCSRF対策に頭を悩ませておりまして。本日は気分転換でExpressに変わるかもしれない Tower.jsを試してみます。

Tower.js。その名前の通り、すべてがそろったパッケージであります。Scaffold、Bootstrap2、Stylus、MongoDb、CoffeeScript, etc,etc,etc....。npmでインストールされるパッケージ数たるや「東京スカイツリー」であり、アーキテクチャの完成度たるや「エッフェル塔」のような美しさなのであります。

見る?というか見上げる?

$ npm ls
npm WARN node-uuid@1.2.0 dependencies field should be hash of <name>:<version-range> pairs
tower_sample@0.0.1 /Users/inouetomoyuki/Dropbox/Projects/node/tower_sample
├── async@0.1.18 
├── chai@0.4.2 
├── coffee-resque@0.1.4 
├── coffee-script@1.2.0 
├─┬ design.io@0.3.0-6 
│ ├── commander@0.5.2 
│ ├─┬ connect@2.0.2 
│ │ ├── debug@0.5.0 
│ │ ├── formidable@1.0.9 
│ │ ├── mime@1.2.4 
│ │ └── qs@0.4.2 
│ ├─┬ express@2.5.8 
│ │ ├─┬ connect@1.8.5 
│ │ │ └── formidable@1.0.9 
│ │ ├── mime@1.2.4 
│ │ ├── mkdirp@0.3.0 
│ │ └── qs@0.4.2 
│ ├── findit@0.1.2 
│ ├─┬ hook.io@0.8.7-1 
│ │ ├── colors@0.6.0-1 
│ │ ├── dnode-protocol@0.1.1 
│ │ ├── eventemitter2@0.4.8 
│ │ ├── jsonify@0.0.0 
│ │ ├── lazy@1.0.8 
│ │ ├── mdns@0.0.5 
│ │ ├── mkdirp@0.2.2 
│ │ ├─┬ nconf@0.3.1 
│ │ │ └── ini@1.0.2 
│ │ ├─┬ npm@1.0.106 
│ │ │ ├── abbrev@1.0.3 
│ │ │ ├── graceful-fs@1.0.1 
│ │ │ ├── ini@1.0.1 
│ │ │ ├─┬ minimatch@0.0.4 
│ │ │ │ └── lru-cache@1.0.4 
│ │ │ ├── node-uuid@1.2.0 
│ │ │ ├── nopt@1.0.10 
│ │ │ ├── proto-list@1.0.0 
│ │ │ ├── request@2.1.1 
│ │ │ ├── rimraf@1.0.8 
│ │ │ ├── semver@1.0.11 
│ │ │ ├── slide@1.1.3 
│ │ │ └── which@1.0.2 
│ │ ├─┬ optimist@0.2.8 
│ │ │ └── wordwrap@0.0.2 
│ │ ├── pkginfo@0.2.3 
│ │ ├─┬ portfinder@0.2.1 
│ │ │ └── mkdirp@0.0.7 
│ │ ├── prompt@0.1.12 
│ │ ├── semver@1.0.13 
│ │ ├─┬ socket.io@0.8.6 
│ │ │ ├── policyfile@0.0.4 
│ │ │ └── redis@0.6.7 
│ │ ├─┬ socket.io-client@0.8.6 
│ │ │ ├── uglify-js@1.0.6 
│ │ │ ├── websocket-client@1.0.0 
│ │ │ └── xmlhttprequest@1.2.2 
│ │ ├── traverse@0.5.2 
│ │ ├── weak@0.1.5 
│ │ └─┬ winston@0.5.10 
│ │   ├── eyes@0.1.7 
│ │   ├─┬ loggly@0.3.11 
│ │   │ ├── request@2.9.153 
│ │   │ └── timespan@2.2.0 
│ │   └── stack-trace@0.0.6 
│ ├── node-uuid@1.3.3 
│ ├─┬ seq@0.3.5 
│ │ ├─┬ chainsaw@0.0.9 
│ │ │ └── traverse@0.3.9 
│ │ └─┬ hashish@0.0.4 
│ │   └── traverse@0.6.0 
│ ├─┬ socket.io@0.9.0 
│ │ ├── policyfile@0.0.4 
│ │ ├── redis@0.6.7 
│ │ └─┬ socket.io-client@0.9.0 
│ │   ├─┬ ws@0.4.0 
│ │   │ ├── commander@0.5.0 
│ │   │ └── options@0.0.2 
│ │   └── xmlhttprequest@1.2.2 
│ └── underscore.logger@0.3.1 
├── design.io-javascripts@0.3.0-1 
├── design.io-stylesheets@0.3.0-2 
├─┬ forever@0.8.5 
│ ├─┬ broadway@0.1.13 
│ │ ├── colors@0.6.0-1 
│ │ ├── eventemitter2@0.4.8 
│ │ └─┬ optimist@0.3.1 
│ │   └── wordwrap@0.0.2 
│ ├─┬ cliff@0.1.7 
│ │ ├── colors@0.6.0-1 
│ │ └── eyes@0.1.7 
│ ├── daemon@0.4.1 
│ ├─┬ flatiron@0.1.14 
│ │ ├── director@1.0.9-1 
│ │ ├─┬ optimist@0.3.1 
│ │ │ └── wordwrap@0.0.2 
│ │ └─┬ prompt@0.1.12 
│ │   └── colors@0.6.0-1 
│ ├── microtime@0.2.0 
│ ├─┬ minimatch@0.0.5 
│ │ └── lru-cache@1.0.5 
│ ├─┬ nconf@0.5.1 
│ │ ├── ini@1.0.2 
│ │ └─┬ optimist@0.3.1 
│ │   └── wordwrap@0.0.2 
│ ├── node-fork@0.4.2 
│ ├─┬ nssocket@0.3.7 
│ │ ├── eventemitter2@0.4.8 
│ │ └── lazy@1.0.8 
│ ├─┬ optimist@0.2.8 
│ │ └── wordwrap@0.0.2 
│ ├── pkginfo@0.2.3 
│ ├─┬ portfinder@0.2.1 
│ │ └── mkdirp@0.0.7 
│ ├─┬ ps-tree@0.0.2 
│ │ └─┬ parse-table@0.0.0 
│ │   └── event-stream@0.5.3 
│ ├── timespan@2.0.1 
│ ├─┬ utile@0.0.10 
│ │ ├── mkdirp@0.3.0 
│ │ ├── ncp@0.2.5 
│ │ └── rimraf@1.0.9 
│ ├── watch@0.5.0 
│ └─┬ winston@0.5.10 
│   ├── colors@0.6.0-1 
│   ├── eyes@0.1.7 
│   ├─┬ loggly@0.3.11 
│   │ └── request@2.9.153 
│   └── stack-trace@0.0.6 
├── gzip@0.1.0 
├── knox@0.0.9 
├── less@1.2.2 
├── mint@0.3.0 
├─┬ mocha@0.14.1 
│ ├── commander@0.5.2 
│ ├── debug@0.5.0 
│ ├── diff@1.0.2 
│ ├── growl@1.5.0 
│ └─┬ jade@0.20.3 
│   └── mkdirp@0.3.0 
├── mongodb@0.9.9-4 
├─┬ pathfinder@0.3.0-1 
│ ├── detective@0.1.0 
│ ├─┬ findit@0.1.2 
│ │ └─┬ seq@0.3.5 
│ │   ├─┬ chainsaw@0.0.9 
│ │   │ └── traverse@0.3.9 
│ │   └─┬ hashish@0.0.4 
│ │     └── traverse@0.6.0 
│ ├── mime@1.2.5 
│ └── mkdirp@0.3.0 
├── redis@0.7.1 
├── sinon@1.3.1 
├─┬ stylus@0.24.0 
│ ├── cssom@0.2.2 
│ ├── debug@0.5.0 
│ ├── growl@1.4.1 
│ └── mkdirp@0.3.0 
├─┬ tower@0.3.9-9 
│ ├── URIjs@1.4.2 
│ ├── coffeekup@0.3.1 
│ ├── commander@0.5.2 
│ ├─┬ connect@2.0.2 
│ │ ├── debug@0.5.0 
│ │ ├── formidable@1.0.9 
│ │ └── mime@1.2.4 
│ ├── ejs@0.6.1 
│ ├─┬ express@2.5.8 
│ │ ├─┬ connect@1.8.5 
│ │ │ └── formidable@1.0.9 
│ │ ├── mime@1.2.4 
│ │ └── mkdirp@0.3.0 
│ ├── lingo@0.0.4 
│ ├── mime@1.2.5 
│ ├── moment@1.4.0 
│ ├── node-uuid@1.3.3 
│ ├── qs@0.4.2 
│ ├── restler@2.0.0 
│ ├─┬ socket.io@0.9.0 
│ │ ├── policyfile@0.0.4 
│ │ ├── redis@0.6.7 
│ │ └─┬ socket.io-client@0.9.0 
│ │   ├─┬ ws@0.4.0 
│ │   │ ├── commander@0.5.0 
│ │   │ └── options@0.0.2 
│ │   └── xmlhttprequest@1.2.2 
│ ├── underscore.logger@0.3.1 
│ └─┬ useragent@1.0.5 
│   ├── request@2.2.9 
│   ├── semver@1.0.12 
│   └── yamlparser@0.0.2 
├── uglify-js@1.2.5 
├── underscore@1.3.1 
└── underscore.string@2.0.0

どーん!

その数、依存パッケージをあわせて 194 個。容量は54MB。

さっそくコマンドから

インストール。ドーン。
$ npm install -g tower

プロジェクト作成。
$ tower new tower_sample

$ cd tower_sample/
$ npm install

ちょっとエラー出るので、sudo使う。
$ sudo npm install design.io

scaffold!すばらしい!
$ tower generate scaffold Post title:string body:test blongsTo:user
$ tower generate scaffold User email:string fisrtName:string lastName:string hasMany:posts

起動!
$ node server.js 

デバッグ。ドーン。
   info  - socket.io started
[Wed, 07 Mar 2012 13:34:56 GMT] INFO Tower development server listening on port 3000

info:  Name: design.io-watcher::tower_sample hook::listening                          Type: hook            Data: 5000
info:  Name: design.io-watcher::tower_sample hook::started                            Type: hook            Data: 5000
info:  Name: design.io-watcher::tower_sample hook::ready                              Type: hook            Data: {"name":"design.io-watcher::tower_sample","type":" ... 
info:  Name: design.io-watcher::tower_sample ready                                    Type: hook            Data: {"name":"design.io-watcher::tower_sample","type":" ... 
[Wed, 07 Mar 2012 13:35:01 GMT] INFO updated public/javascripts/vendor/javascripts/async.js
[Wed, 07 Mar 2012 13:35:01 GMT] INFO updated public/javascripts/vendor/javascripts/coffeekup.js
[Wed, 07 Mar 2012 13:35:01 GMT] INFO updated public/javascripts/vendor/javascripts/design.io.js
[Wed, 07 Mar 2012 13:35:01 GMT] INFO updated public/javascripts/vendor/javascripts/history.adapter.jquery.js
[Wed, 07 Mar 2012 13:35:01 GMT] INFO updated public/javascripts/vendor/javascripts/history.js
[Wed, 07 Mar 2012 13:35:01 GMT] INFO updated public/javascripts/vendor/javascripts/html5.js
[Wed, 07 Mar 2012 13:35:01 GMT] INFO updated public/javascripts/vendor/javascripts/mocha.js
[Wed, 07 Mar 2012 13:35:01 GMT] INFO updated public/javascripts/vendor/javascripts/moment.js
[Wed, 07 Mar 2012 13:35:01 GMT] INFO updated public/javascripts/vendor/javascripts/prettify.js
[Wed, 07 Mar 2012 13:35:01 GMT] INFO updated public/javascripts/vendor/javascripts/sinon.js
[Wed, 07 Mar 2012 13:35:01 GMT] INFO updated public/javascripts/vendor/javascripts/socket.io.js

(たくさん)

トップ

俺の名前をなぜ知っている。。。神か?

リスト

入力

圧巻の一言。ついにきたな、と。

ボク、まだコード書いてないよ。

これからはTower.jsで幸せになれるかもしれません。まる。

0 件のコメント: