第七回ありえるえりあ勉強会 〜JSで大規模・エンタープライズ開発〜に参加してきたので、その時のメモ。

「JavaScriptで大規模ゲーム開発」渋川

ソーシャルゲームの定義
  • ユーザー間で非同期のやり取りが発生する

ngCore

  • マルチプラットフォーム
    • 同一ソースでAndroidとiOSに対応
    • テスト環境はFlashにも対応
ゲームの構成
  • ngCore上にゲームロジック/JavaScript
  • サーバ/APach+FCGI上に認証とか結果の書き込みをMobageサーバに
役割分担
  • ngCoreのクライアント
    • アクションシーン
    • サーバ側で作ったデータの再生
  • ゲームサーバ
    • パラメーター保持、変化
    • アイテム管理
    • ミッションのスロットの目の決定など
    • ずる防止をするためサーバ側でロジックがある
ngCoreの開発サイクル
  • node.jsで書かれたビルドサーバでビルドを行う。
    • ファイルの結合とか
コード
  • CJSライクなモジュール
  • クラスを作るsubclass関数
  • ゲームはmain関数から始まる
  • Core.UpdateEmitter でゲームループを回す
ゲームの基本構成
  • シンプルなクラス群
    • Sceneクラスを継承してシームを作っていく
    • Sceneを遷移してゲームの遷移が行われる
  • サーバ側からjsonのジョブスタックを受け取る
    • ミッション結果なども配列で返ってくる
    • 知らないジョブが来たら無視が基本方針
    • クライアントは順番に再生していくだけ
    • 新しいミッションも簡単に追加できる
  • サーバエラーがおきたらホーム画面に強制的に戻る
DnLig/ngGo
  • DnLib
    • ゲーム開発の共通ライブラリ
  • ngGo
開発拠点
  • サンフランシスコ

  • 日本

  • パキスタン

  • SKypeチャットが主なインフラ

  • git

    • git flow
  • ドキュメントSphinx

ngGo/ngBuilder
  • – データ駆動で行えるように
    • パラメーターチューニングのしやすさ
デバッグとテスト
  • デバッグメニュー
    • サーバにデバッグ用画面がある
  • Jasmineを使ってる
今後のngCore
  • 3D対応、HTML5対応

まとめ

JavaScriptベースで

オフラインWebアプリケーションの作り方 (白石)

Google Gearsを使ってオフラインアプリケーションを作ったことがある。

オフラインWebアプリケーション

Google Gears
  • Google Gears終了 –> HTML5へ以降を推奨
    • HTML5を中心にするようになった

オフラインでも読めるアプリの作り方

  • それほど実装は難しくない
  • アプリケーションキャッシュを利用すればいい
アプリケーションキャッシュとは
  • 静的なリソースをキャッシュすることができる機能
  • ローカルキャッシュの利点
  • IE以外のブラウザでは実装されてる
キャッシュマニフェスト
  • リソースのリストを作成する
  • Titanium Mobileのリファレンスはローカルキャッシュされてる
アプリケーションキャッシュのJavaScript API
  • window.applicationCacheにJavaScriptから操作できるアプリケーションキャッシュAPIがある。
アプリケーションキャッシュを利用する上での注意点
  • キャッシュマニフェストを更新しないとリロードで反映しない
  • キャッシュ容量が限られている
    • モバイルとかだと10MBぐらい

オフラインでも書けるアプリの作り方

  • 割りと面倒なもの
  • デスクトップアプリとやりたい事はあんまり変わらない
オフラインWebアプリを作るポイント
  • 基本はリッチクライアント+同期機能
利用できるローカルストレージ
  • Web Storage
  • Web SQL Database
  • Indexed Database API
  • File API
    • ドメインごとに仮想的な空間
    • セキュリティ的なものがあるため
双方向同期

かなり難しく面倒くさい – フェールセーフ – 更新の衝突 – 同期のタイミング – ネットワーク状態、データの状態管理 – ローカルDBのスキーマ管理/サーバのスキーマと2つできてしまう – ローカルDBのクオータ(5MBぐらい)

- 容量の限界がきたときにどうするか

まとめ

  • オフラインアプリケーションといっても読む/書くの2つがある
  • 書く/同期的なアプリケーションはかなり面倒臭い
    • 割り切ったほうがいい

スケールするUIについて – @monjudoh

Objective-Cで非同期処理のチェーンライブラリとか

要素数

ループの中でbind/unbindしてたので大量に追加されたときに重たかったのでliveメソッドに変更 bindはここの要素に付けるから、要素が多いと死ぬ。delegateとかliveはその枠の方にイベント一個張るだけだから軽くてすむ。

D&D
  • ユーザが触れる範囲だけにイベントを付ける
  • D&Dは複数のイベントから成り立つので複雑(down->move-up)
要素の生成
  • UITableView
    • 表示範囲+ぐらいのみを描画してる
    • 再利用してる

JavaScriptのテスト事情 – @os0x

  • JavaScriptのテスト
    • まだまだ未成熟
  • 二種類
    • JavaScriptのテスト
      • JavaScriptだけなので比較的わかりやすい
    • JavaScriptを含めたテスト
      • UIとかも含むインテグレーションテスト
インテグレーションテスト
  • インテグレーションテストは書くのが大変
  • 動いてあることが保証できるので重要
    • 後から追加修正とかも
インテグレーションテストの定番 – Selenium
  • インテグレーションテストは遅い
テスト実行環境
  • カピバラさん + Webkit
QUnit,Jasmine
  • Jasmineの方がアプリケーションテストは向いてる
jasmine-headless-webkit
  • jasmine のspecをCUI環境で実行できる

Titanium Mobile – Masui Yuichiro

  • ココログ
  • liblis
  • AKB
  • サイボウズLiveの
  • MobSnap

Titanium Mobile

  • JavaScriptだけでアプリを作成できる
  • Titanium Mobile のモジュール売買できる
    • mobile market place

モバイルのUX

  • それぞれのプラットフォームに合わせた形に変換する
  • それぞれに合わせたUIはUXに
  • タブバーの位置がAndroid/iPhoneで逆になったり

飯食う

  • 追加モジュールとサポートのみが有料
  • 認定トレーニング

感想

  • ちょっと落ち着きがなかった気がするの
  • あまり掘り下げた感じにはならなかったのは少しもったいない気がした。

メモ環境