appengine ja hack-a-thon #4
appengine ja hack-a-thon #4 : ATND
いってきました. 自分は@Jxck_と共にTODOアプリを作っていたんですが, けっこう本質的でない部分ではまっていました. @t_wadaさんに色々な助言をもらえたり, 色々面白いサービスに触れたり, 懇親会でも面白い話を聞けたので, トータルでは非常に勉強になったイベントでした.
作ろうとしていたもの
@Jxck_とペアプロしながらTODOアプリをつくっていました. モチベーションは, サーバにはデータだけ置いといてあとはクライアントサイドだけでやるアーキテクチャでアプリを作ってみたい, qunitでのテストをやってみたい, CouchDBをデータ構造やAPIの試行錯誤に使ったら便利じゃない? というあたりです. とくに3点目について, CouchDBはスキーマもないし簡単に出し入れできるので, CouchDBをローカルにインストールして, 開発の初期段階ではそれを使い, データ構造やAPIの仕様が固まってきてからGAE上にモデルの部分を構築するということを目論んでいます. CouchDBへのクエリはhttpを用いて行うので, CouchDB -> GAEへの切り替えもURLを変更するだけでできるはずです.
CouchDB
CouchDBはdocument-oriented databaseと呼ばれているユニークなDBです. 面白いのはクエリをすべてhttpで投げること, データはすべてJSON形式で持っていることです. クライアント側のJavascriptでできることがどんどん増えてきている最近の流れを考えると, 興味深いDBだと思います. チュートリアルとしてはこちらがおすすめ:
Cacoo
GUIの設計にはCacooをつかいました. Web上でいろいろなダイアグラムを共同編集できるというサービスです. フローチャートやUML, ワイヤーフレームにも対応していて, すべてFlashで実装されています. 編集やチャットの発言の同期がときどきおかしくなったりしましたが, なかなか素敵でした.
QUnit
QUnitはJohn Resig作のjQueryのテストにも使われているテスティングフレームワークです. jQueryのテストにも使われているというだけで, jQueryからは独立しています. 必要な機能がシンプルに提供されている印象です. テストの結果はブラウザから確認できます.
で, 今日は2人とも非同期通信のテストをするのが初めてで, 結構はまってしまいました. 非同期通信のテストはかなり素朴な方法で実現されています. 非同期の処理を開始するタイミングで一度テストの実行をストップし, 結果が返ってきているであろうと思われる間待ったあとに, テストをリスタートするというものです.
test("a test", function() { stop(); // テストを一度止める asyncfunc(); // 非同期処理の開始 setTimeout(function() { start(); // テスト再開 equal(1, ... , "async test 1"); // 結果をテスト equal(2, ... , "async test 2"); }, 1000); // 1秒間待つ });
asyncTest()はtest()関数開始直後にstop()をする書き方の省略記法です.
asyncTest("a test", function() { asyncfunc(); // 非同期処理の開始 setTimeout(function(){ start(); equal(1, ... , "async test 1"); // 結果をテスト equal(2, ... , "async test 2"); }, 1000); });
わかってしまえば何のことはない, シンプルな考え方です.
その他
部屋の片側がディスカッションや講演をするスペースになっていて, ustもされていました.
ahack #4 の@ashigeruさんのBigQuery解説 - スティルハウスの書庫
懇親会は夜景の見えるラウンジのような, とてもハッカソンの懇親会とは思えないようなところで, アジャイルとかTDDとかペアプロとかそういう話をしていました.
ふたを開けるとGAEには全然触らなかった一日でしたが, 楽しかったです. みなさまお疲れ様でした!