Node.js、DojoToolKit、MongoDB、Herokuでアプリを作った話
こちらで公開してます。
http://todo-4-you.herokuapp.com/
ソースはこちら。
https://github.com/arvelt/hello-nodejs
今回使った主なライブラリやサービス
- Node.js
- Express(3.X)
- Passport
- Mongoose
- Mocha
- Supertes
- Dojo tool kit(1.9.X)
- MongDB
- Travis CI
- waffle.io
所感
- 最初Expressの最新を使おうとしたらPassportがまだ対応していないのかうまく動かないくてハマったので、古い方をつかうことにした。
- angular.jsじゃなくてDojoを使ってるのは仕事で使用しているので理解を深めるため。DojoはWebページをWidgetと称するビューにして組み立てていく。
- waffle.ioを使ってgithub issue駆動と最小git flowでやっていく。issueをTODOとして使って、対応するissueのfeatureブランチ切って、masterにPR出すということをしていた。ちょっと試したいというときにはdevlopもreleaceもいらないと思う。
- APIに対するテストコードを書いてみる。ちょっと微妙な感じもあるが、テスト時はテスト環境のDBを初期化するようなコードをアプリ自体に持っている。NODE_ENVがtestの場合はDB状態をまっさらでテストできるようにしている。
- Sinonを使ってクライアントテスト書こう!と意気込んでいたが、労力に成果が見合わなくなるのでSuperTestでREST API対するassertを書くことにした。RESTのつもりだけど、違うぜっていうのがあったら教えて下さい。doc.mdに仕様書いてある。というかAPI仕様を書くための標準表記法ってあったっけ。
- Travis CIを使ったことなかったので使ってみた。むしろそのためにテストでっちあげた感じがある。ちゃんとログも見えるしなかなかおもしろい。
- Herokuへのデプロイは手動でひと通り確認したあと、Travisからの自動アップロードへと変更した。全てのプッシュごとにデプロイされてもつらいので、masterへのpushでHerokuへデプロイするようにした。travis.ymlをちょっと変えるだけでそれだけのことができるようになり、かがくのちからってすげーという感がある。
- TravisのCLI がよくできていて、travis setup heroku とかコマンド叩くとHerokuのAPIkeyを暗号化してtravis.ymlに載せてくれるのでほとんど何も気にしないでいけた。魔法かよ。
困ったところと解決案とか
Dojo tool kitの使い方とか
- attach-pointがdijitオブジェクトにならない問題とか。仕事で使っているときは誰かがすでにやってくれていたので、自分でやってみてわかっていなかったせいで3日くらいハマった。
- dojo/store/JsonRestはレスポンスが必ずjsonオブジェクトじゃないとうまくいかない話。