WebSocketでネトゲを作るよー 開発フレームワーク編
とまあ宣言してからにはゴリゴリ書いてるわけなのだけど
今回は言語にcoffeescript, フレームワークにzappaを使う。
WebSocketでネトゲを作るよー - mizchi's blog
zappa
Socket.IO+Expressを扱う薄いDSL
主にCoffeeScriptで簡潔に記述できるようにAPIが整理されている。RSSリーダー書いたときにも使ったが、気に入ってる。公式ドキュメントの背景画像がフランク・ザッパなのが笑った。
SocketStreamも考えたがあれはちょっと大規模すぎる(Railsのような押し付けがましさがある)
zappaギッハブのサンプル mauricemach/zappa - GitHub
require('zappa') -> Gizmo = require './model/gizmo' @use 'bodyParser', 'methodOverride', @app.router, 'static' @configure development: => @use errorHandler: {dumpExceptions: on} production: => @use 'errorHandler' @get '/': -> @render 'index' @get '/gizmos/:id': -> Gizmo.findById @params.id, (err, gizmo) => @render index: {err, gizmo} @on connection: -> @emit welcome: {time: new Date()} @on shout: -> @broadcast shout: {@id, text: @data.text}
expressとsocket.ioに馴染んでるならなんとなくわかる、かな。
クライアント側は基本的にsocket.ioに仕組みに従う。
クライアントとサーバーを明確にわけてしまうと、コールバック同士でスパゲティ化するので、編集する距離が近いと気持ち的に楽。(もちろんあとで整理するのだけど)
大規模JavaScriptとモジュールローディング
大規模JSをすっきり記述するためにCoffeeScriptを用いる。
CoffeeScriptではclass化と継承が使える。使えるとはいっても実際はプロトタイプをラップしてそのように見せかけてるだけなのだけど、使う側が深く考えなくても自然なOOPが実現できる
class Animal constructor: (@name) -> move: (meters) -> alert @name + " moved #{meters}m." class Snake extends Animal move: -> alert "Slithering..." super 5 class Horse extends Animal move: -> alert "Galloping..." super 45
こんなの。