今回のHTML5とか勉強会のテーマは「HTML5+ゲーム」。mobage、アメーバピグ、GREE、カヤック、ユビキタスエンターテインメントの取り組みをレポートする
2011年9月27日、サイバーエージェント セミナールームで、「第21回 HTML5とか勉強会」が開催された。HTML5とか勉強会は、HTML5に関心のあるエンジニアやコーダー、デザイナ向けの勉強会だ。今回のテーマは「HTML5+ゲーム」。当日の様子をお伝えしよう。
まず、ディー・エヌ・エーの城戸氏(@sou)からプレゼンがスタートした。城戸氏はDeNAで海外向けWebViewHTML5アプリ開発や、内製タイトルのスマホ対応などを手掛けている。
mobageでは、さまざまなタイトルがすでにAndroid/iOS対応済みであることを紹介した。具体的にはHTML/CSS3ベース、Canvasベース、SWFベース(ExGame)といった複数の実現方法を使い分けている。
HTML/CSS3ベースについては、選択→アニメーション→選択を繰り返すようなコマンド選択方式のゲームで採用している。Canvasベースについては、アクション性がある即時反応性の必要なゲームで採用している。
コマンド選択方式のゲームは、データ管理やセキュリティをどうするかといった問題があり、データをローカルに保存するとチートされてしまうので、mobageではクライアント/サーバ型を採用することで対応しているとのこと。クライアント側は選択されたコマンドを送る、結果を再生するだけにとどめ、サーバー側に実行命令を投げるだけにしている。
もう1つは、攻撃、必殺技、回復などの複雑なアニメエフェクトをどうするかといった課題がある。例えばゲーム内でボス攻撃を表現する際に、ボス画像がせり出す、キャラクターが揺れる、ダメージ値がアニメーション表示される、ヒットポイントが減るといった複数のアニメーションを動かしていく必要がある。mobageでは、個々のアニメについてはCSS3で作り、それらをタイムライン上に並べ、関数にまとめているとのことだった。
アニメーション処理はCSS3とJavaScriptの組み合わせで実現しているので、1つ1つのアニメをjsDeferred(jQuery's Deferred Object)のメソッドチェーンでつなぎ合わせている。
Canvasベースについては、DeNAが開発したArctic.jsというActionScript3風に書けるライブラリを使っており、Arctic.jsについては近日公開予定とのことだった。
SWF再生実行は、ExGameという仕組みを使っている。SWFをそのまま実行でき、ActionScriptも解釈実行してくれる。JavaScriptを1行追加するだけでiOS上でSWFが動作する。ExGameについてはmobageプラットフォームにて提供している。
サイバーエージェントの原一成氏 (@herablog)による発表。
まず、「こんなサイトは嫌だランキング」の紹介から始まった。
ユーザーが嫌だと思うサイトの例として、突然音が鳴る、ポップアップが開く、トップからオールFlash、画像が多くて、重い、メニューが英語、更新されない、文字が小さいなどの特徴が挙げられるとした上で、今回は軽いサイトを作る方法について、スマートフォン版アメーバピグを例として紹介した。
スマートフォン版アメーバピグは速さを重視し、その実現のためにHTML5などさまざまな技術をベースに作っている。実際に使っている技術として、HTML 5 Markup、CSS3/Sass(SCSS)、Canvas/Ai→Canvas、hashchange、gzip、YUI Compressor、css sprites、OptiPNG、Custom Data Attribute、Data URI scheme、viewport、Full screen modeなどを挙げた。
アメーバピグではパーツの描画にImage、CSS sprite、SVG、Canvasの4つを検討した。
Imageは作るのは簡単だが、3G回線だと読み込みが遅い。CSS spriteはサイズは小さくなるが、アメーバピグはカラーバリエーションがたくさんあるので焼け石に水。SVGはAndroidでは表示されないといった問題があり、今回は、Canvasを採用することにしたそうだ。
アバターデータについてはイラストレーターで作成し、それをAI→Canvasというツールでソースコードとして吐き出し、整形して軽量化、さらにJSON化してGzip圧縮を掛けることによって88%のサイズダウンを実現できた。
ページ遷移を速くするために、全てを1枚のHTMLに書いて、画面遷移でロードが発生しないようにした。パーツはulタグで定義して表示時に持ってくるようにした。また、画像はなるべくData URI Schemeにしてロードが発生しないようにしている。
CSSはSassを使って記述したので、変数や関数を駆使して記述できた。
UIについては、スマートフォンの操作特性上、画面の下にボタンを置いている。
高速化のために、css sprites、画像最適化、Minify、ファイル結合、gzip圧縮などを使用した。
ImageOptimによる画像最適化では3%、Minifyでは33%、gzip圧縮では73%、トータルで67%のサイズダウンに成功した。
最後にポイントとして、サーバへのリクエストを最小限にする、画像をできるだけ減らす、できることはやる、という3つを挙げた。
GREEではフィーチャーフォンのゲームをスマホに移植することが多いので、SWFをCanvasに変換して動かすライブラリを用意した。
また、HTML5で開発する利点として、マルチプラットフォーム、そしてリリースサイクルのコントロール(A/Bテスト、キャンペーン、イベントの実施)を挙げた。
HTML5でブラウザベースでも十分な表現力を持ったゲームが作れるようになってきたことを指摘し、開発スピードやマルチプラットフォームを考慮すると、ブラウザベースで作るのが効率が良いことをアピールした。
Web UIアーキテクチャとは、HTML5による利点はそのままに、HTML5だけではできないことをネイティブアプリで補う方式だ。Web+ネイティブのハイブリッドアプリである。
ブラウザゲームをネイティブアプリでラップすることによって、シングルサインオン、スクリーンショット付きひとこと、カメラ、プッシュ通知、アプリ内課金などを実現できる。
WebViewを組み込んだアプリを作成し、JavaScriptでネイティブアプリと通信し、ネイティブの機能を実行してJavaScriptで返すことで実装している。
WebUIアーキテクチャを採用している例として、Facebook、Google+、OpenFeint SDKなどが挙げられた。
現在ticoというWeb UI Frameworkを開発しているいて、Web、ネイティブ間の通信をハンドリングしてくれている。
HTML5でブラウザベースでも十分な表現力を持ったゲームが作れることをアピールした。また、開発スピードやマルチプラットフォームを考慮するとブラウザベースで作るのが効率が良いことを指摘した。ネイティブの力を借りることでゲームの体験を向上できるが、どこまでをネイティブに任せるかの線引きが重要であるとのことだった。
続いて、面白法人カヤック 吾郷氏(@kyo_ago)の発表があった。HTML5実力テストの紹介をした。HTML5実力テストとは、HTML5の仕様を中心にしたJavaScript、HTML/CSSに関してのテストが受けられるjsdo.it上のイベントである。
JavaScript 21問、HTML/CSS 16問で、開始1週間の得点は以下の通り。
この平均点を見ても、難易度の高い問題であることがうかがえる。採点結果の他に全体順位、偏差値、レーダーチャートなどが見られる。
HTML5実力テストは、もともと4月1日に「世界的なJavaScript協会で開催している試験がjsdo.it上で受けられるようになりました」的なネタで出す予定だった。
そのとき作っていた問題は、一般的にjsquizと呼ばれるようなJavaScriptに関する問題だった。
この実力テストで出題される内容は、普段業務などで使うことは少ないが、ライブラリの中身などで結構使われている。jQueryの中のコードをベースに作っている問題もある。
ユビキタスエンターテインメント 伏見氏(@sidestepism)による発表。
伏見氏は、UEI秋葉原リサーチセンター所属で、“9leap”プロジェクトリーダー、enchant.js 開発チーム所属。
enchant.js はHTML5 + JavaSriptのゲームエンジンで、2011年4月にリリースし、オープンソース(MIT & GPL Dual License)で提供されているとのこと。元々は昔のBASICみたいなものがほしい」というアイデアから始まった。国産なので、日本語の情報も多いのがメリットだ。
9leapという投稿型JavaScriptゲームサイトでは、そのほとんどがenchant.jsを用いたゲームだという。
早くて軽くて気持ちいいのがenchant.jsの特徴。
コードが短く書けて、ループやpreload、互換性などの面倒な部分はライブラリで吸収してくれる。このため、ゲームの本質的な部分に集中でき、ライブラリ自体のコードも短く、何をしているのか把握しやすい。
9leapに投稿されている2Dレースゲームでは、ソースコードは300行、10KBに収まっている。
enchant.jsではJavaScriptそのものの拡張性を生かしているので、プラグインも簡単に書ける。物理エンジンもリリース予定だ。
また、通信もサポートしやすい作りになっており、Twitter連携もでき、node.js + WebSocketを使えば、JavaScriptだけでネットゲームが作れる。
UEI主催の「9leap Game Programming Camp」というイベントは東京、仙台、札幌で開催し、6時間でenchant.jsを学びながら、ミニゲームを1本作るという内容で実施された。
IGDA Japan&UEI主催の「福島 Game Jam」というイベントでは、被災地をゲーム作りで応援するということで、即席チームで協力し、30時間でゲームを作るという内容で実施され、6チームがenchant.jsを採用した。
また、UEIの社内Hackathonでは「14時間でネットゲームを3本作ろう」「8時間でTwitter連携ゲームを10本作ろう」などのお題が設定されているということで、enchant.js の効率の良さや、気持ち良さがアピールされた。
ここで伏見氏によるライブコーディングが行われた。ものの数分でクマのキャラクターがブラウザ上で動くようになり、enchant.jsの効率の良さをアピールした。
しかしJavaScriptはあくまでSandbox内での実行なので、カメラへのアクセス、ファイルシステムへのアクセス、写真撮影や画像認識、OpenGL、ソースコードの隠蔽など、できないこともたくさんある。それを打破するためにenchant PROを作った。
enchant PROはAndroid向け開発環境で、WebViewの中でJavaScriptを実行できる。必要に応じてAndroidのAPIをたたくことができ、UIはHTML5+CSSで書ける。ネイティブアプリにコンパイルされないので動的な更新が可能だ。
この勉強会は、各社が実際のサービスでどのようにHTML5やCSS3、JavaScriptなどを活用しているのかが具体的に分かる、非常に内容の濃い勉強会であったように感じられる。
スマートフォンの高性能化に伴い、スマートフォン向けHTML5対応サービスも、今後増えていくことが予想される。
この勉強会はある程度定期的に開催しているようなので、HTML5に興味のある方は、ぜひ参加してみてほしい。
akio0911(ブロガー・iPhoneアプリ開発者)
AR(拡張現実)・iOSアプリ開発・書評・グルメがメインのブログ「拡張現実ライフ」の中の人。cocos2d for iPhoneレッスンノートを執筆(共著)。 世田谷ものづくり学校の自由大学にてアプリクリエイター道場の講師を担当。アプリクリエイターにメイキングストーリーをインタビューしていく番組「ハイパーアプリクリエイターズ」も手掛ける
Copyright © ITmedia, Inc. All Rights Reserved.