ソーシャルゲーム開発における運用とそのツール

101
ソーシャルゲーム開発における 運用とそのツール 2014/06/21 Frontrend in Nagoya @ysugimoto

Upload: yoshiaki-sugimoto

Post on 28-May-2015

3.866 views

Category:

Internet


4 download

DESCRIPTION

Frontrend-Nagoya 発表資料

TRANSCRIPT

Page 1: ソーシャルゲーム開発における運用とそのツール

ソーシャルゲーム開発における運用とそのツール

2014/06/21 Frontrend in Nagoya

@ysugimoto

Page 2: ソーシャルゲーム開発における運用とそのツール

Introduction

•Yoshiaki Sugimoto

•Frontend Developer•HTML / CSS•JavaScript / Node.js•PHP•Linux

https://github.com/ysugimoto

Page 3: ソーシャルゲーム開発における運用とそのツール

Loving♡

Page 4: ソーシャルゲーム開発における運用とそのツール

Career

名古屋でWebシステム開発に従事

• フロントエンド特化したい

• 株式会社サイバーエージェント

• 東京こわい

Page 5: ソーシャルゲーム開発における運用とそのツール

Working...

JavaScript SDK

Perfomance

Any ServiceMaintainability

Pure JavaScript

Page 6: ソーシャルゲーム開発における運用とそのツール

Agenda

•ソーシャルゲームとチーム開発

•技術的負債とどう付き合っていくか

•運用フェーズの取り組み

•まとめ

Page 7: ソーシャルゲーム開発における運用とそのツール

ソーシャルゲームとチーム開発

Page 8: ソーシャルゲーム開発における運用とそのツール

TODO : 天クロの画像貰えたらもらう

Page 9: ソーシャルゲーム開発における運用とそのツール

天下統一クロニクル

•ご当地名物を題材にしたソーシャルゲーム

•2012/09 サービス開始

•会員数約250万人+ (2014/06/18現在)

Page 10: ソーシャルゲーム開発における運用とそのツール

•約30人くらいのチーム

 (プランナー・エンジニア・デザイナ含)

 うち、ディベロッパー6人

•週に一度くらいのリリースサイクル

天下統一クロニクル

Page 11: ソーシャルゲーム開発における運用とそのツール

レイドバトル

ギルドバトル

マラソン

ゲームループとイベント

メインループ +

Page 12: ソーシャルゲーム開発における運用とそのツール

プレイヤーグループ(ギルド)同士のバトル

ギルドバトル

Page 13: ソーシャルゲーム開発における運用とそのツール

プレイヤー同士が共闘するイベント

レイドバトル

Page 14: ソーシャルゲーム開発における運用とそのツール

プレイヤー個人で目標を達成し、順位を競う

マラソン

Page 15: ソーシャルゲーム開発における運用とそのツール

アプリケーションの特徴

•(Semi)SPAの形式

•非同期リクエスト+DOM書き換え多数

•JSよりもCSSが複雑

•アニメーション多数

Page 16: ソーシャルゲーム開発における運用とそのツール

Frontend-technology

•Pure JavaScript Core Framework

•Sass(SCSS)

•JsRender (Template Engine)

•Grunt

•CreateJS (Toolkit for CreateJS)

Page 17: ソーシャルゲーム開発における運用とそのツール

2012/09

2014/06

Page 18: ソーシャルゲーム開発における運用とそのツール

2012/09

2014/06

Page 19: ソーシャルゲーム開発における運用とそのツール

Technology

Architecture

Tool

Page 20: ソーシャルゲーム開発における運用とそのツール

フロントエンドの2年は

変化というよりも変革

Page 21: ソーシャルゲーム開発における運用とそのツール

新しいツールの登場

→ 便利そう!

新しいアーキテクチャの登場

 →シンプルに書けそう!

新しい技術の登場

 → 夢がある!

Page 22: ソーシャルゲーム開発における運用とそのツール

理想と現実

Page 23: ソーシャルゲーム開発における運用とそのツール

新しいツールの登場

学習コストに見合うかな・・・

新しいアーキテクチャの登場

 コアからのリプレイスは無理・・・

新しい技術の登場

 端末サポートが・・・

Page 24: ソーシャルゲーム開発における運用とそのツール

数年先を見越した取捨選択、

現時点でのベストエフォート

Page 25: ソーシャルゲーム開発における運用とそのツール

技術的な負債と

どう付き合っていくか

Page 26: ソーシャルゲーム開発における運用とそのツール

コードと技術の賞味期限

Page 27: ソーシャルゲーム開発における運用とそのツール

導入ライブラリの 新版が取り込めない

APIが大幅に変わって追従できない

重要なSecurity FIXが取り込めない

古い端末のサポートのためのPolyfill

影響範囲が大きすぎて改修しづらい

APIのレガシー化

Page 28: ソーシャルゲーム開発における運用とそのツール

フロントエンドにおける

ライフサイクルは短い

Page 29: ソーシャルゲーム開発における運用とそのツール

増えるコードとステップ数

そしてファイルサイズ

Page 30: ソーシャルゲーム開発における運用とそのツール

このメソッドって使ってる所ある?

ここの処理って通過する?

if文ネストしすぎじゃ?

コードカバレッジの低下

Page 31: ソーシャルゲーム開発における運用とそのツール

レスポンスタイムへの影響

実行速度への影響

メンテナンス性への影響

画像・CSS

パフォーマンス担保領域の拡大

Page 32: ソーシャルゲーム開発における運用とそのツール

フロントエンドエンジニアは

やることが多い

Page 33: ソーシャルゲーム開発における運用とそのツール

ここの文言修正

してほしいんだけど

この要素間は

もう少しマージンが

欲しいです

APIレスポンス、

フォーマット

変わったんで

Android2.3で

この機能

動いてないので

調査して

Page 34: ソーシャルゲーム開発における運用とそのツール
Page 35: ソーシャルゲーム開発における運用とそのツール

コードの属人化

Page 36: ソーシャルゲーム開発における運用とそのツール

特定の人が永続的に

メンテする可能性

途中から別の人が

コードに触れる可能性

特定処理・コードの属人化

Page 37: ソーシャルゲーム開発における運用とそのツール

このライブラリ

便利だし入れよう

ライブラリの属人化

その人しか

使えなくない?

Page 38: ソーシャルゲーム開発における運用とそのツール

"この人しか分からない"

は危険信号

Page 39: ソーシャルゲーム開発における運用とそのツール

Case:アニメーション

タイムラインアニメーションを

スクリプティングするのは難しい

(素のCreateJS)

作った人以外は

動作がイメージしづらい

Page 40: ソーシャルゲーム開発における運用とそのツール

Toolkit for CreateJSの採用

Case:アニメーション

Page 41: ソーシャルゲーム開発における運用とそのツール

Flash IDE上で

アニメーションが作成可能

Flashがわかる人なら修正が可能

プレビューしながら修正が可能

Case:アニメーション

Page 42: ソーシャルゲーム開発における運用とそのツール

ヒューマンリソースの限界

Page 43: ソーシャルゲーム開発における運用とそのツール

切迫した状態でのコードは負債を大きくしやすい

→場当たり的なコードの生産

→コアFWから乖離したコード

精神衛生上良くない

残業して解決するのは本質ではない

Page 44: ソーシャルゲーム開発における運用とそのツール

技術的負債解消への

取り組み

Page 45: ソーシャルゲーム開発における運用とそのツール

古いコードの見極め

ツールで共通化・自動化

Page 46: ソーシャルゲーム開発における運用とそのツール

運用・改善フェーズ

Page 47: ソーシャルゲーム開発における運用とそのツール

ミクロな視点とマクロな視点

Page 48: ソーシャルゲーム開発における運用とそのツール

マクロな視点

「この画像減色されていませんね」

「CSSは共通化できるんじゃないですか」

「ここはスプライト化してください」

「ページのパフォーマンスが落ちています」

Page 49: ソーシャルゲーム開発における運用とそのツール

アプリケーション動作の

側面からの観測

Page 50: ソーシャルゲーム開発における運用とそのツール

•トータルパフォーマンスは?

•ユーザの体感速度は?

•画像サイズは?

•CSSサイズは?

Page 51: ソーシャルゲーム開発における運用とそのツール

•重複・冗長処理の削減・共通化

•新旧端末で発覚する不具合

•レガシーコードのリライト

•属人化の低減

ミクロな視点

Page 52: ソーシャルゲーム開発における運用とそのツール

コードベースの観測

Page 53: ソーシャルゲーム開発における運用とそのツール

•今よりもっと良い方法はないか?

•効率が上げられるポイントは?

•ツールで補えないか?

•このコード書いたの誰?

Page 54: ソーシャルゲーム開発における運用とそのツール

•API・ドキュメントの整備

•全体/細部のリファクタリング

•端末問題の検証と対策

•大きな変更は加えず、影響を 小限に

•テストを繰り返す

Defensive

Page 55: ソーシャルゲーム開発における運用とそのツール

安定稼働は最優先事項

Page 56: ソーシャルゲーム開発における運用とそのツール

新機能開発フェーズ

Page 57: ソーシャルゲーム開発における運用とそのツール

•現時点での流行・便利そうな技術への取り組み

•既存FWと著しく乖離しないポイントの見極め

•数年先も生きる/基礎となるようなものの選択

•温故知新

Offensive

Page 58: ソーシャルゲーム開発における運用とそのツール

新しい実装によるメンテナンス性は?

新しく書かれたコードはどこ?

既存コードへのリプレイスは?

Page 59: ソーシャルゲーム開発における運用とそのツール

20% offence

80% defence

Page 60: ソーシャルゲーム開発における運用とそのツール

運用での取り組みとツール

Page 61: ソーシャルゲーム開発における運用とそのツール

Webサーバ・DBの設定

サーバーサイドとの連携

Page 62: ソーシャルゲーム開発における運用とそのツール

フロントエンドが手を掛けるべき

ポイントではない

Page 63: ソーシャルゲーム開発における運用とそのツール

社内では「AeroMock」という

Javaプロジェクト向けツールを

導入しています

•軽量な起動

•APIレスポンスモック

•Tomcatの起動・再起動が不要

Page 64: ソーシャルゲーム開発における運用とそのツール

共通知としての

ライブラリ・ツール

Page 65: ソーシャルゲーム開発における運用とそのツール

このライブラリ

便利だし入れよう

ライブラリの属人化

その人しか

使えなくない?

Page 66: ソーシャルゲーム開発における運用とそのツール

とはいうものの

Page 67: ソーシャルゲーム開発における運用とそのツール

オンライン上に存在するドキュメント

特定APIの設計・実装の時短

技術・知識レベルの平坦化

ライブラリ導入による恩恵は大きい

Page 68: ソーシャルゲーム開発における運用とそのツール

みんなが使えるものを使う

必ず吟味する

必要であれば勉強会を開く

Page 69: ソーシャルゲーム開発における運用とそのツール

仕様ドキュメントを起こす

Page 70: ソーシャルゲーム開発における運用とそのツール

ドキュメンテーションはあって当たり前

実装引き継ぎの際のロスを低減させる

スタイルガイドを作ってデザイナーと共有

Page 71: ソーシャルゲーム開発における運用とそのツール
Page 72: ソーシャルゲーム開発における運用とそのツール

ソースコードレビュー

の文化

Page 73: ソーシャルゲーム開発における運用とそのツール

Enterprise

Page 74: ソーシャルゲーム開発における運用とそのツール

属人化するコードの低減

コードベースで議論する

なるべく偏らないレビュー指名

気軽に機能追加・改善を試せる土壌

Page 75: ソーシャルゲーム開発における運用とそのツール

SVNからGHEに移行して、

他のメンバーのコードを読むことが

増えました(32歳 男性)

Page 76: ソーシャルゲーム開発における運用とそのツール

テストを書く実行する

Page 77: ソーシャルゲーム開発における運用とそのツール

リファクタリングの副次効果

→メソッドの分割

 →引数・戻り値の型の意識

→メンテナンス性の向上

精神衛生上良い

Page 78: ソーシャルゲーム開発における運用とそのツール
Page 79: ソーシャルゲーム開発における運用とそのツール

DOM周りのテストはやりづらい

DOMに癒着しすぎているメソッド

ロジック分離の意識

モデル・コンポーネント化

Page 80: ソーシャルゲーム開発における運用とそのツール

自動化する

Page 81: ソーシャルゲーム開発における運用とそのツール

特にマンパワーが必要な(面倒な)部分

•CSSスプライト生成

•画像減色 / チャンク削除

•PixelRatioイメージ自動生成

•JS結合とminify

•Sassコンパイル

•自動テスト

•etc...

Page 82: ソーシャルゲーム開発における運用とそのツール

統計情報に基づく改善

Page 83: ソーシャルゲーム開発における運用とそのツール

コードに関する統計情報を出し、

改善の指針にする

Page 84: ソーシャルゲーム開発における運用とそのツール

platoの出力例

Page 85: ソーシャルゲーム開発における運用とそのツール

まとめ

Page 86: ソーシャルゲーム開発における運用とそのツール

チーム開発のいいところ

Page 87: ソーシャルゲーム開発における運用とそのツール

スタープレイヤー

フルスタックエンジニア(?)

技術的な相談ができる

多様なチームメンバー

Page 88: ソーシャルゲーム開発における運用とそのツール

ゲームディベロップ

に必要なスキル

Page 89: ソーシャルゲーム開発における運用とそのツール

ProjectA

ProjectB

ProjectC

Page 90: ソーシャルゲーム開発における運用とそのツール

適応力

Page 91: ソーシャルゲーム開発における運用とそのツール

流行りに流されない

普遍的な技術

Page 92: ソーシャルゲーム開発における運用とそのツール

キャラ付け

Page 93: ソーシャルゲーム開発における運用とそのツール

1行の重み

1行の喜び

Page 94: ソーシャルゲーム開発における運用とそのツール

自分のコードで

数百万人が楽しんでくれる

Page 95: ソーシャルゲーム開発における運用とそのツール

自分のコードで

数百万人が遊べなくなる

Page 96: ソーシャルゲーム開発における運用とそのツール

コードに対する

責任感

Page 97: ソーシャルゲーム開発における運用とそのツール

終的に遊ぶユーザの気持ちで考える

・UI

・パフォーマンス

自ずと改善すべきポイントは見えてくる

Page 98: ソーシャルゲーム開発における運用とそのツール

パフォーマンスに

対する責任感

Page 99: ソーシャルゲーム開発における運用とそのツール

目に見える・

感じる部分が

フロントエンドの

担保領域

Page 100: ソーシャルゲーム開発における運用とそのツール

攻める部分と守る部分を明確に

メンバーの入れ替わりは結構頻繁にある

明日いなくなっても大丈夫なように

コミュニケーション力大事

 一人よがりのコードを書かない

 積極的にノウハウを共有していく

Page 101: ソーシャルゲーム開発における運用とそのツール

Thank you!!

https://flic.kr/p/d9K1Bc

https://flic.kr/p/bZw1ym

https://flic.kr/p/fYtrdY

https://flic.kr/p/njeKMd

https://flic.kr/p/5TEDDA

Any questions?