Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
短期間+大規模ゲーム開発でも破綻
しない HTML・SCSS




                株式会社 Aiming
                   岩野 尚吾
自己紹介
• @shiwano 
• HTML版ロードオブナイツのプロジェ
 クトには、6月中旬からアサイン

• ゲーム開発への本格的な参加は、今回
 が初めて

• それまでは普通の Web 製作で、マー
 クアップとかやってた
本筋を進める前に
HTML版ロードオブナイツ
   について軽く説明
短期間+大規模ゲーム開発でも破綻しないHTML・SCSS
短期間+大規模ゲーム開発でも破綻しないHTML・SCSS
もともとは Unity 製の
スマートフォン・ネイティブアプリ!
  (最近 Android 版も出た)
それを HTML5 に移植したのが
 HTML版ロードオブナイツ
開発時に伝えられていた
   要件は―
マルチデバイス対応!



• PC版とモバイル版を同時リリース
  → Mobage と Yahoo! Mobage で

• モバイル版はもちろん Android にも対
 応(2.2から)
IE8 対応!




    やはり 20% 超の
ユーザーベースはふつう切れない
デザイン一新!

• PC版もモバイル版も新規デザインに
• モバイル版は縦持ち用
• ネイティブアプリをそのままコピーす
 ればいいというわけではない
  → UI 作り直し!!!
Unity版


         HTML・モバイル版
Unity版
         HTML・PC版
そして、なにより…
スケジュール最優先!


• なにより期日優先!!!!
• タイトなスケジュール
  → 自分がアサインされてから、
    リリース予定日まで 2ヶ月しかない…

• 社内で優先度が一番高いプロジェクトに
ということで、
開発はすごく大変でした
今日のテーマ


• そういう厳しい開発の中で、プロダク
 トを完成させるために、何を諦めて、
 何を諦めなかったか

• 主にマークアップ方面を担当した者の
 視点から
ゲーム開発で大切なことって何だろう?
期日を守ることです
(今回のプロジェクトでは)
人は何かの犠牲なしに
何も得ることは出来ない
限られた工数の中で
   期日を守るために
まず、何を犠牲にしたのか?
諦めたもの・その1


セマンティック・ウェブ
セマンティック・ウェブとは




• Webサイトの各記述の意味を適切に捉
 え、正しいタグやメタデータを付与し
 ていきましょうという考え方

• HTML5 では特に重視されている
セマンティック・ウェブとは




• 付与したメタデータをもとにコン
 ピュータが情報を収集・解釈できた
 り、ハンディを持つ人たちが情報にア
 クセスしやすくなる
具体的にどうしたの?
• ワイルドマークアップ 
• ID やクラスの命名規則は、ほとんど決
 めてない

• タグは基本 div(たまに ul, li)
  →   a タグも使ってない
  →   HTML5 新規のタグは機能的に
      必要なもの以外は使わない
  →   アウトライン?
      セクショニング・コンテンツ? なにそれ
で、どうだった?

• まあ、問題ない
  →   もともと、アプリの性質上、それほど
      アクセシビリティに気を配る必要ない
  →   基本、DOM さえあればいい(えっ
  →   後ろめたい気持ちはある

• もっとゲームに特化した意味付けをで
 きるスキーマがあってもいいのでは?
諦めたもの・その2


一般的な段組レイアウト
一般的な Web サイトでは

• HTML の要素順 + スタイルシート の
 float プロパティを使った段組レイアウ
 トが一般的

• 最近だとそれに加えて、「レスポンシ
 ブ・ウェブ・デザイン常識だよね」と
 いう感じ
しかし、ゲームの UI って複雑
複雑な UI の一例
縦横無尽にクリックできる!
Web サイトと同じように
 レイアウトを組むのは
      難しい
具体的にどうしたの?

• position: absolute; 多用
  → どこもかしこもこれで要素の
    位置を指定している

• z-index も多用
  → マップタイルの重なり制御など
    かなり複雑化している
で、どうだった?

• ぜんぜんレスポンシブじゃない
  → でもゲームってそんなものかも

• 工数削減にはなった
  → ただし、メンテナンス性は微妙…

• エディタで CSS を編集して、ゲームの
 UI を作るのは筋が悪いのでは?
  → GUI ツールの必要性をちょっと感じた
諦めたもの・その3


画像アセット管理
画像組み込みのフロー


PSDで
         画像    マーク
元素材                  コミット
        スライス   アップ
 作成
画像組み込みのフロー


PSDで
         画像    マーク
元素材                  コミット
        スライス   アップ
 作成


        この部分を自動化しないとつらい!
アセット管理の重要性
• オンラインゲームの開発は初回リリー
 スで終わりではない

• 継続的に行われるアップデートで、ど
 のアセットが必要となるか、管理する
 ことがとても大切!
  → 普通の Web サイトでも大切だが、
    ゲームだと特に重みを増す

• テクニカル・アーティストの職域
具体的にどうしたの?




• マンパワーでなんとかする!!! 
で、どうだった?




• やっぱり事故る!!! 
諦めたもの・その4


 IE8 対応
当初は、タスクとして見積
   もっていたが…
• スケジュールの都合で、モバイル版のデ
 ザインをそのまま、PC版に持ってくる
 ことに

• CSS も IE8 対応にするために、余分な
 工程をたくさん踏まねばならなかった
  → Retina 対応と IE8 対応の矛盾

• そもそも JS が動かない
ということで、IE8 は
 対応しないことに
で、どうだった?

• 開発的にはすごくハッピー!!! 
• 運営的にはやはり潜在的な顧客が減る
 ので微妙…

• スケジュールのために、一度でも IE8
 対応をスコープから外すと、もう二度
 と復活しない
諦めたもの一覧


 • セマンティック・ウェブ
 • 一般的な段組レイアウト
 • 画像アセット管理
 • IE8 対応
じゃあ、それらを諦めて、
 代わりに何やったの?
大切なのは、期日
つまり、重視すべきは
開発効率!
メンテナンス性:開発効率
      ↓
     1:3
こんなことをやりました

• 開発環境でのマークアップ管理
• 画像最適化
• SCSS + Compass の導入
• PC版・モバイル版の出し分け準備
• 実装の把握
やったこと・その1


開発環境でのマークアップ管理
何が問題だったの?


    デザイン確認用のマーク
    アップは、Rails の
    public ディレクトリで管
    理していて煩雑だった
何が問題だったの?


      この部分が
      必要なだけなのに
      DRY に書けない
どう対応したの?



• デザイン確認用のマークアップに、専
  用のルーティングを用意して、Rails で
  表示できるようにした

• http://localhost:3000/pc/map/
何がよかった?

• 開発環境はひとつだけというのが明確
 になった
  → デザイン用に環境を分けるのは、
    よくないと思う

• DRYレイアウトファイルに共通部分を書ける
   →
      に書ける

  → Rails のヘルパーメソッドが使える

• 実装するときも組み込みやすい
  → PC版の開発速度が上がった
やったこと・その2


画像最適化
画像の最適化大事

• 特にモバイル版 
• 3G 回線経由だと、画像のファイルサイ
 ズがボトルネックになりうる

• また、高解像度ディスプレイで綺麗に
 見えるよう画像も高解像度のものを使
 わなければならない

• 両立は大変! 
高解像度ディスプレイ対応




 横 720px 用にデザインされた画像を
      縮小して配置している
どう対応したの?


   • モバイル版重視
   • Chrome の開発者ツール
    で読み込んでいる画像サ
    イズを確認しながら、丁
    寧に最適化を行った
何がよかった?

• モバイル版の画像サイズを抑制できた
  → 同等の機能で実質解像度的にも
    大した差はない中で

• モバイル版の総画像サイズ
  → 5.3 MB

• PC版の総画像サイズ
  → 6.6 MB
最適化ツールなど

• ImageOptim (画像ファイルサイズ最適化)
  → http://imageoptim.com/

• ImageAlpha (透過を保ちつつPNG高圧縮)
  → http://pngmini.com/

• CSSスプライト
  → 類似の画像をまとめるなど
    必要な部分だけ
やったこと・その3


SCSS + Compass の導入
+

やっぱり便利!
簡単に説明すると―
SCSS とは

 • CSS の拡張メタ言語
  → CSS のスーパーセット

 • 便利な機能がたくさん
  →   変数
  →   演算式
  →   Mixin
  →   Function
Compass とは

  • SCSS のフレームワーク
  • CSS3 の記述を簡潔にする
   Mixin が多数用意

  • Web 制作に便利な再利用可
   能パターンを多数用意
   → CSS スプライトの
     自動生成など
最近は、紹介記事も増えて
 業務で使う人も多い?
(デファクトスタンダードになってほしい)
具体的にどんな感じで
  書いてるのか
たとえば、アイコン



      • data 属性の値
       で、アイコンが
       差し替わる
このような SCSS を使用
モバイル版のマップ


    • マップタイルのサイズ
     は 42px!
PC版のマップ


   • マップタイルのサイズ
    に 64px!

   • モバイル版よりちょっ
    と大きい
このような SCSS を使用




  変数の値を調整するだけ
SCSS ファイルの
トータルのコード行数は
    16685
展開される CSS ファイルの
 トータルのコード行数は
     32712
(expanded style, line_comments OFF)
何がよかった?

• 開発速度アップ!
  → コード行数の大幅削減
  → PC版の開発をしているときに
    マップ部分のデザインが一瞬で終わった

• DRY に書けた
  → PC版・モバイル版のコードを共通化
  → Compass の Mixin 便利!
やったこと・その4


PC版・モバイル版の
  出し分け準備
PC版・モバイル版のデザインを
   効率的に管理したい!
要件について整理

• HTML版ロードオブナイツは
 Single Page Application
  → HTMLファイルはたった一つ
  → CSSファイルは少なければ少ないほどよい

• 現在は、PC版・モバイル版だけだが、将
 来的に新しいバージョンが追加されるこ
 とがありうる
  → 適切なディレクトリ分けが必要
よって、SCSS は
 このような形に
SCSS のディレクトリ構成



• modules
   → 共通で使う mixin や 変数などを
     まとめたディレクトリ

• partials
   → プラットフォームごとに使う
     SCSS ファイルをまとめたディレクトリ
SCSS の中身




 このように import して
最終的に1ファイルに出力!
View(HTML) は
  このような形に
View のディレクトリ構成




• app/views 以下に、pc と mobile と
 いうディレクトリを作成
  → View ファイルはすべて ERB 形式で記述
View の中身の例




  ゲームで使う HTML は
独自ヘルパーメソッドを使って
    テンプレート化
テンプレートの例




テンプレート化された HTML は、
  このように Mustache 化も
    されていたりする
そして最終的には
全 2766 行数の単一のHTML
   ファイルとして出力
何がよかった?

• この規模のゲームを Single Page
 Application として運用したこと
  → モバイル版でも、特にパフォーマンス
    に問題はなかった

• PC版とモバイル版のデザインを適切に
 出し分けることができた

• 新しいバージョンを追加する作業が容
 易になった
やったこと・その5


実装の把握
何が問題だったの?


• 基本、DOM 依存が激しいゲーム
  → それ関連のバグが山ほどある

• JS 側のバグか HTML・CSS 側のバグ
 か、判別もけっこう大変
例えば、こんなバグチケット!
どう対応したの?

• ペアプロする!
• JS のコードはなるべく読む
  → 特に View 側
  → Github 見やすくて便利

• 自分でマークアップして、自分で実装
 のパターンも
何がよかった?

• 結果的に工数削減!
  → コミュニケーションコストが減るため

• デザイン側のバグ、JS 側のバグの対
 応・判別が容易

• 自分の関われる範囲が増えるのは、や
 はり嬉しい!
結果、期日はどうなったの?

• プロジェクト初期に、想定されていた7
 月中旬に出すというのは守れなかった

• 8月3日に Mobage 審査に出すという
 約束は守れた
  → 途中審査落ちるなど色々ありつつも、
    8月中に何とかリリースできた
ということで、まとめ!
まとめ
• プロジェクトの性質によって、何が大
 切かよく変わるので、みんなしっかり
 考えよう

• Web 制作のセオリーをそのまま無批判
 にゲーム開発に持ってくるとつらい

• アセット管理大事
• SCSS + Compass みんな使おう
あと、何より―
ゲーム開発って、面白い!
ご清聴ありがとうございました
最後に、このプロジェクトの
   管理手法について

• 弊社開発者ブログに記事があるので、
 ご覧になってない方は是非

• JS 大規模プロジェクトの管理手法 ‒
 ロードオブナイツの実例紹介
  → http://goo.gl/JFrlt

More Related Content

短期間+大規模ゲーム開発でも破綻しないHTML・SCSS