ぱろっと・すたじお

技術メモなどをまったりと / my site : http://parrot-studio.com/

"ROGv - Forts Watching System"の裏側

先日、ROに関するクライアント/サーバシステムのソースコードを公開しました


ROをやってない方には何のためのものかわからないと思いますが、
ゲーム内で流れるログを解析し、
戦闘状況を俯瞰・解析できるシステム、と思ってください


これに関しては100%「私が欲しいから作った」ものなのですが、
技術的に新しいことをかなり取り込んでいます

  • Server
    • Ruby 1.9.2*1
    • Sinatra
      • 今回はPassenger上で動作
    • memcached
    • MongoDB (MongoMapper) <- New!
    • Bootstrap <- New!


正確には、Bootstrapを初めて採用したのは自サイト*2ですが、
各構成パーツを意識的に使ったのは今回が初めて、ということで


以下、初めて使ったものに関するメモ書きを...φ(・ω・`)

C# / .NET Framework 4


そもそも今回のシステムを発案したのは別な方で、
私は完全にそのアイデアをパクったのですが、
せっかく作るならC#を使ってみたいと思いまして


そこで、Twitterで設計的な話をしていたのですが、
C#に詳しい方から各部品を紹介してもらい、
この時点でもうできあがったようなものだったのですが・・・


・・・実際に組んでみるとそう簡単にはいかないものです(´-ω-)


とはいえ、やはりC#とVisualStudioはなかなか完成度が高いです
クライアントUIに必須の、イベントドリブンな構造が楽に書けます
.NETのライブラリが大量なのも利点です


C#自体、わりと最近出てきた言語*3だけに、
最近のパラダイムをかなり取り入れてまして*4
宣言的なコードが書きやすくなっています(`・ω・´) b


Server側がRubyで書かれたAPIであっても、
RESTfulな設計をしておけば、基本的に問題ないです
UTF-8に変換した文字列をJSONで投げてますが、そのための部品もあります


一方で、Windowsが絡まないところで使う気になるかというと、
やはりちょっと厳しいですね・・・


C#の利便性に.NETが寄与しているのは事実で、
いくら他OSに.NET的なものがある*5とはいえ、
他の環境なら他の言語を選ぶかな・・・と


まあ、今後Windows8や、特にWindowsPhoneと関わる機会が出てくるかもしれませんし、
今回触っておいたのは役に立つと思ってます

Bootstrap


前回のGunma.webで発表がありましたが、
私みたいなデザインに疎いプログラマにとって、
とても使いやすいフレームワークです(`・ω・´) b


今回は独自のCSSをほとんど書いてませんが、
かなり「それっぽく」見えます
デザインのわかる方なら、定義しなおしてカスタマイズもできます*6


サンプルが揃っているので、それを見ながら構築していったのですが、
当然ながらHTML5のタグが多用されており、
結構知らないものがあったのでかなり(゚д゚)マズーでした


ということで、これを買って読んでいます(´・ω・)っ
(先日のデブサミでもこの方の講演を聴きました)


徹底解説 HTML5マークアップガイドブック 最終草案対応版―全要素・全属性完全収録

徹底解説 HTML5マークアップガイドブック 最終草案対応版―全要素・全属性完全収録


分厚いながらも読みやすい本ですので、
HTML5(のタグ周り)を整理したい方にお勧めです

MongoDB / MongoMapper


正直、「MongoDB=大規模サービス」という先入観があり、
これまであまり細かく調べていなかったのですが・・・


今回のデータ構造的はRDBよりKVSの方が向いているとわかっていたので、
久々にKVSについて調べていくうちに、思っていたよりずっと
MongoDBが「手軽」であることがわかりましてΣ(゚Д゚)ガーン


http://www.mongodb.org/


インストールもHomebrewやyumが使えるので簡単です


標準でコマンドラインツールが付属してますが、
Mac用のGUIクライアントもあります


500 Server Error


でも、一番便利だったのはRubyのMongoMapperです
Rails3以降のActiveRecordに慣れた方なら、
かなり直感的に使えます(`・ω・´)


http://mongomapper.com/


実際のデータを検索・更新するとき、
irb(というかpry)からModelをrequireして操作してました
下手なクライアントよりそっちが楽だったもので・・・


で、実際に運用してみた感じですが、
そもそもKVSということで、かなり速いです
indexも使えるので、複雑な操作でもわりとレスポンスが早い気がします


仕事でもKVSを使ってますが、
やはり更新より参照が多い系では強いですね


というか、仕事のシステムもMongoDB+MongoMapperに置き換えると、
相当はかどる気がしますが、
設計当時はTokyoCabinetとかkumofsあたりしかなくてですね・・・(´-ω-)


ということで、特に大規模なシステムでなくても、
単純にKVSとして、MongoDBはかなりお勧めです(`・ω・´) b


もちろん、何でもKVSにするのは間違いで、
RDBとKVSの使いどころを吟味する必要があるのですが・・・

*1: 余談ですが、開発環境は1.9.3でリファレンスも1.9.3で見ていたら、1.9.2にないコードを書いてしまい、最初本番で動作しませんでしたΣ(゚Д゚)ガーン どのコードだったかはわすれましたが、1.9の中でバージョンの差異を踏んだのは初めてでした

*2: http://parrot-studio.com/

*3: といっても2000年ですが

*4: バージョンが上がるたびに、大胆に

*5: [wikipedia:Mono_(ソフトウェア)]

*6: 新しいiPadでも綺麗に見える。そう、Bootstrapならね http://twitpic.com/92vsv6