2008年01月10日

takushimaHALLOHALLOの舞台裏

あけましておめでとうございます。多久島です。

今回は昨年末にこのサイトより公開いたしましたHALLOHALLOの舞台裏をご紹介したいと思います。こんな風に作っています。

先に断っておきますが、デザインについては私がデザイナでないこともあってほとんど取り上げていません。ここにはHALLOHALLOのプロジェクト全体と技術的な面についてのみ書かれています。

チームについて

当初、一部のデザイナーを除いてウェブサービス、Flashコンテンツなどの開発経験はありませんでした。そこから始めて4ヶ月半、調査優先なところや勝手がわからない(Flash、ゲームサーバ、ウェブ)こともあって時間はかかっています。

その間プログラマは常にペアで作業していました。担当はなく、なんでもやります。デザイナも同様です。小さなチームで、分化の進んだコンソール開発からすればなかなか新鮮でした。

技術的なこと

技術的な特徴には次のようなものがあります。

  • サーバはJava、クライアントはFlash9で開発しています。
  • 通信部分にはThree Ringsフレームワークを利用しています。内部ではバイナリソケットが使われています。
  • サーバはAmazon EC2上で動作しています。

以降、もう少し深く取り上げます。

サーバ(Java + PHP)

Three Ringsフレームワークについてはずいぶん書いてきたので省きます。それにモデル化する対象こそビジネスアプリケーションとは異なりますが、使うツールは同じで特筆すべきことがあまりありません。あぁ、JavaでサーバといってもJ2EEは使っていません。なのでBlazeDSには興味がありつつもさわれない、そんな感じです。

PHPはランキングの取得や貼り付けのためのURLの生成に利用しました。HALLOHALLOは貼り付けるコンテンツですので、HTMLをレンダリングする必要はなくウェブサービスを作ればよいだけでした。量もないのでsymfonyのようなフレームワークは使っていません。最初はThree Ringsフレームワークだけで通信するつもりでしたが、コネクション・レスのほうが気楽なこともあります(よね)。

テストプレイやデプロイのための管理コンソールはPHP製です。

クライアント(ActionScript3)

HALLOHALLOのクライアントはFlash9用のコンテンツで、ActionScript3で書かれています。ActionScript3は Java似だし、もともとプロトタイプ言語ということもあって覚えるのは楽しくてよいのですが、Flash特有の事情でつまづくことが多かったです。

  • 描画パフォーマンス
  • なかなか回収されないメモリ
  • 効きすぎるキャッシュ
  • Flash CS3との連携

などなど。

サーバ側とのコードの重複も頭の痛いところでした。特にデータ読み込みルーチンなどは同じ仕様を2言語でまるまる実装という事態になってしまっています。これは現在のHALLOHALLOのコードメトリクスですが、合計で17%近いdataパッケージが重複箇所です。コード生成する方向で対策を考えていますが、Flex Data Servicesなどを使ってらっしゃる方々はこの辺どうなさっているのでしょうか?

通信についてはThree RingsフレームワークはAMFなどは使っておらず独自のプロトコルを使っていますが、Javaクライアント用に提供されているのと同程度のAPIがActionScriptから使用できますので、それほど不自由は感じませんでした。

グラフィクスデータの作成はほとんどFlash CS3でサクサク行えて、マップデータにだけTiledを使っています。作者のAdam Turkさん、 Bjørn Lindeijerさん、ありがとー。

Amazon EC2 & S3

HALLOHALLOの運営にあたって、ホスティング先を探す必要がありましたが、最近のウェブスタートアップお決まりのパターン(?)にしてみました。 EC2はバーチャルマシンの実行環境を提供する米Amazonのウェブサービスで、スケーラブルなことが特徴です。完全従量課金なのでトラフィックによってはドキドキなこともあるのですが、普通に便利です。

ハードウェアの調達といったことは気にせずとも、マシンイメージをいくつもインスタンス化してテストできますし、環境を丸ごとバックアップできるのもGood。

クラウド/グリッドコンピューティングの文脈で紹介されていることもあります。

唯一の難点は日本から米Amazonのサーバまでが遠いということです。HALLOHALLOは厳密なアクションを求めるタイプではありませんからまぁ大丈夫ですが、もしお使いになられるときは注意してください。

見積もりにはこのページが役に立ちます。

周辺ツール

プロジェクト管理にTrac & Subversionという組み合わせはありきたりですが、チケットごとに時間追跡を行いバーンダウンチャートを描くプラグインを使っています。うまくことが運んだイテレーションもあればだめなときも。

また「スケーラブルWebサイト」に載っているクリックひとつでデプロイできるボタンは作ってみると、意外に利用したのが印象に残っています。

こうしてみるとちょいちょいやり方が大げさなところがありますね。PHPはやらずにJavaに閉じこもってJettyで済ませとくべきだったとか。選択眼のなさが身にしみます。

全体としては小さなチームの長所をよく感じた4ヶ月でした。

それではまた。

Leave a Comment

Trackbacked

trackback url for this entry: http://www.pyramid-inc.net/lab/archives/92/trackback