第14回 オープンソーステクノロジー勉強会に行って来た

Greeさんが開催されているオープンソーステクノロジー勉強会にこっそり参加してきました。

株式会社ディー・エヌ・エー川崎修平さんをゲストに招き、MobaSiFなどについて
話をされるとのことで、潜入取材。

川崎さんをご存知でない方はこちらを参照

スペランカーをノーミスで6週する男

ちがう。

「モバゲー」を1人で開発した男──川崎修平氏の素顔(前編)
「モバゲー」を1人で開発した男──川崎修平氏の素顔(後編)

DeNAでモバゲーを作られた方として非常に有名です。
そのDeNAのモバイルサービスのベースにあるのが、MobaSiFです。
ただ、フレームワークはサービスと供に成長するとの考えの元に開発されているようで、
各サービス毎に若干異なる点があるようです。

基本思想
  • 気軽に作れて、簡単にスケールが可能
  • 細かいことにはこだわらない
  • 開発者はフレームワーク全体を把握
  • 運用まで想定
  • フレームワークはサービスの成長に伴って変化

開発者はDBのパフォーマンスまで考慮して作成している

MobaSiFの特徴
  • モバイルの特有の機能(端末認証、絵文字など)
  • 軽い(XSモジュール、起動コスト小)
  • 素朴な実装(全体を理解しやすい、融通が利く)
  • 依存モジュールが少ない(ほとんど標準モジュールのみ)
  • 動作環境はある程度縛る(Linuxmysqlapachefastcgi

実装がシンプルなので、障害発生時に問題箇所の特定が楽。
モジュールに依存した不可解な動作も少ない。
JavaのようにVMのバージョンに依存することもないので、環境の変化に強い
アバターの処理とかは、Cで書いたXSで処理

動作環境
  • Linux(Cent4.x)
  • perl5.8.0〜
  • apache1.3.x + mod_fastcgi
  • mysql5.0.x

モバゲーでは、mysql4.xも使用している

対応端末

これ以外の機種は全体の約1%しかない。
今後、新規で行うサービスは割り切ってもいいのでは。

基本機能
  • ディスパッチャ
  • 端末情報取得
  • ユーザ認証
  • 絵文字
  • テンプレート
ディスパッチャ
  • モバイル用環境変数の設定
  • リクエストパラメータの取得
  • ユーザデータ取得
  • ステータスチェック
  • モジュールロード
  • 処理実行
端末情報取得
  • UserAgentから判別したキャリア
  • IPアドレスから判別したキャリア
  • 端末タイプ、モデル
  • 端末シリアルID、ユーザ識別子
  • 画面サイズ

UserAgentとIPアドレスで偽装を判断。(先日の講演でふじもとさんも同じことを話されてました)
ドコモはヘッダ情報少ないので、機種名をキーにDBから情報を補完

絵文字
  • 内部はSJIS。同一キャリアでの内部⇔外部コードの変換はラウンドトリップ可能
  • フレームワーク側で自動で変換
テンプレート処理
  • 事前にコンパイル
  • コンパイルすると3キャリア分のバイナリ生成
  • 共有メモリ(mmap)でテンプレートを読み込むので高速
  • 必要最低限の機能のみ
  • 静的ページも動的に生成

テンプレートツールキットより20倍ぐらい高速

Webアプリ以外での使用
  • batch、deamon、監視スクリプトでも使用
  • use MobaConf;だけでWebアプリと同じ設定を読み込み全機能にアクセスできる

非同期の処理多いので、deamonを作ったりする際も結構楽。

モバゲーとの違い
  • メールの送受信部分
  • セキュリティ的に見せられないコードを削除
  • docomoの認証
  • 絵文字の取り回し
  • 誤字の訂正

キャリアのスペルミスが分かってるのに直せないらしい・・・。(気持ちは分かります)

課題
  • DBアクセスで時間がかかっているので、フレームワークだけを高速化してもあまり意味がない
  • システム全体が巨大になり、フレームワークの修正が危険が伴う
  • 少数の開発を前提にしているので、コードの品質にばらつきが
  • そろそろUTF8に移行しないと。。。

DBだけで500台あるので、データコンバートがががが


終了後、懇談会がありましたが結構盛り上がってました。
Greeの人を捕まえていろいろ話聞きたかったのですが、残念・・・。

次回の勉強会の時にがんばることにしまっす。