開発合宿に行ってMeteorで遊んできた

先週末の5/12, 13と前職の開発合宿イベントに参加してきました。
前職はバリバリの大手SIerだったのですが、オープンソースを扱っている部署は、
開発意欲の高い人が多くて、定期的にこういうイベントを開催しています。
前職に居た時も何度か参加させてもらったのですが、
今回のように会社辞めた後でも参加させてもらえるのは、オープン感があっていいですね。
今回は、同期だった同僚とチームを組んで、最近話題になったMeteorを使ってちょこちょこっと作ってみました。


今回作ったのは、リアルタイムソースコードレビューサイト。
名付けて、「The Source」です。
タバスコの3000倍ぐらい辛いとか言われる香辛料から取りました。


ソースコードの各行にコメントを入れることができ、
入力されたコメントは同じソースコードを見ている人全員にほぼ同時に表示されます。
イメージとしては、ソースコード上でニコニコっぽいことをする感じです。
画面はこんな感じ↓↓。


githubはコミットに対しては各行にコメントできますが、普通にソースコード全体を見ている時は行にコメントできなかったと思います。
で、皆でワイワイとここはこうだとかブラウザ上で議論できればいいかなーと思ったので今回作ってみました。
しかし、当日かなりヘロヘロだったり、Meteor初使用だったりで、とりあえずリリースはしたものの、色々適当で力技です。
結構バグが残ってるし、コメントの削除とか重なり防止とか実装してませんw

開発環境

ちなみに、開発に使ったのはMacSnow Leopardでしたが、問題なく動作しました。
インストールはgithubにあるmeteorのリポジトリからcloneし、実行ファイルにPATHを通しただけです。
その他にGentooUbuntuで動作することを確認しました。
公式でサポートしてるのはRedHatDebianっぽいですが。
初回起動時に、nodeの実行環境やmongodbをダウンロードしてきて、インストールディレクトリの下に配置します。
後は、以下の手順だけでオッケーです。

meteor create hogehogeapp
cd hogehogeapp
meteor # ポート3000で起動


一通りできたら、以下のコマンドでmeteor.comにデプロイできます。

meteor deploy hogehogeapp.meteor.com --password


パスワード入れておかないと、誰でもそのURLにデプロイできてしまうので、アプリケーションを上書きされたりしますw
現在は、これだけしか認証機構は無いのかな。

Meteorを使ってみて

サンプルコードを動かしたりぐらいはしていましたが、当日、始めてMeteorを触ったため、結構ハマりました。
以下、ハマりどころ。

  • ファイルの読み込みルールが分かりにくい
    • 外部のjsファイルを読み込もうとすると、結局packageを作って追加する方法しか分からなかった。
  • テンプレート描画後にフックできるコールバックが無い
    • せっかくテンプレートにデータ注入するように書けるのに、コールバックが無くてソース側でrenderしてからDOM操作処理をする必要があったり。
    • pull requestが入ってるようなので、いずれ解消されると思う。
  • テンプレート描画の実行タイミングが分かりにくい
    • LiveHTMLという仕組みで、更新を監視してるみたいだが、どこからキックされて、どの順番で描画されてるのかイマイチ良く分からない。
    • 結局、あちこちにMeteor.flush()を挟んだ。
  • Firefoxだと重い。しかもほっとくと、どんどん重くなる。xhr pollingのせいか?
  • そもそもエラーログはどうやって確認するんだろうw


いい感じなところ。

  • 追加したり削除したりという処理をほとんど記述しなくていい。
    • templateとして監視項目に入っていれば、データ操作するだけで、勝手に描画の追加をしたり、削除したりする。
  • websocket, xhr pollingなど、何も意識しなくても勝手に繋がってる。
  • 1ファイルで簡単に書ける。
  • バックエンドのmongodbが完全に設定フリーで使える。
  • ファイル更新したら、ブラウザを何も操作しなくても、いきなり反映される。


と、まあこんな感じで、ハマりつつも、かなり少ないコードで
リアルタイムに画面更新できるサイトを構築できるので、中々書いてて楽しいものでした。
しかし、既にあちこちで書かれていますが、クライアント側のJavascriptコンソールから、
DBのデータを自由に操作できるのは、セキュリティも何もあったもんじゃないですねw
勝手にデータ操作されても問題ない範囲でしか、今は公開できないかなと思います。
将来的にどうなるんだろう、この辺。


今のところ、認証が必要になるようなプライベートなデータを扱うどころか、
そもそも勝手にデータ操作できるので、消されると困るようなデータを使ったサイトはパブリックなネットワークにおけない感じですね。
ローカルで使うようなプライベートなWebアプリで、テンポのいい操作感が欲しいなら、現状でも使えるかも。


実際、そんな流行らないかもしれませんが、リアルタイムWebアプリケーションをさくっと作るには、中々楽しい感じで、結構オススメです。
後は、コールバックのAPIとライブラリが充実してくれればいいなー。


しかし、最終的に200行以下の超少ないコード量にも関わらず、
作るのに12時間以上費やしていて、情けない限り。
しょうもないことに2時間ぐらい悩んだりとか、
始めて使うフレームワークをいきなりハッカソンで使うのは、厳しい。


リポジトリ: https://github.com/joker1007/thesource/