ソーシャルアプリ開発における
チーム開発戦略「HTML5×スマートフォン」時代の
ソーシャルゲーム戦略
2011/12/03株式会社gumi 執行役員技術開発部長 田村祐樹
about: gumi
2007年6月に設立。モバイルSNSの会社。
2009年に4人でソーシャルアプリ開発。
2011年現在130人超。
ゲームやWeb、SI、様々な経験のある開発チーム
ヒットアプリに関わった企画チーム
高品質なFlashや絵を作り出すデザインチーム
一緒にエンターテイメントを創っていく会社
開発アプリ(一部)
会社の規模感は?
月に数億円の売上げを出すアプリが複数本
8本以上のアプリを運営中
数百万人のユーザーを保持
サーバーは数百台存在しています(Amazon EC2)
続々、アプリをリリース予定です
技術キーワード
Python
Django
EC2、RDS、SQS
TokyoTyrant
などなど……
ただ、これは固定ではなく変えていきます
about: self
やってきたことと言えば
コンシューマゲーム開発(Wii、NDSなど)
Web開発(動画共有サイト)
システム構築(システム会社基盤)
そして、2010/07~ gumi
2011/07~ 開発部長をやってます
アジェンダ
HTML5xスマートフォンの規模問題
規模問題を解決するには?
どうしたらいいの、結局のところ
注意点
例えばFlashからHTML5といった具体的な技術手法はでてきません
自動コンバートツールや手で書くといったケースもあり、一長一短だからです
技術的にコアな話を期待されたらごめんなさい
HTML5の仕様がどうこうというのもないです
HTML5xスマートフォンの規模問題
スマホがもたらす恩恵
圧倒的な表現力
ボタンに変わる自由なインターフェイス
GPUを利用できるグラフィック性能
etc...
得られるリスク
開発規模の増大
開発期間の増大
開発費の増大
etc...
多くの問題は、人、時間、金
この変化はどこかで見たことがある
ゲーム業界だ!?
この失敗は既に通ったもの
ゲーム業界はSFC→PS→PS2→PS3への変節で同じように失敗をした
開発規模は増大し、開発者は疲弊し、やっつけで出したゲームに顧客は不満を持った
失敗した原因の一つはずっと同じような開発を貫いたため
ゲーム業界は人を大切にしなかった
不眠不休&安い賃金で働かせたり
残業代や休日出勤手当を出さなかったり
とにかく不実な会社が多かった
(大切にする会社もあるとは思いますよ)
ゲーム業界は古いやり方を捨てられなかった
昔ながらの根性、根性、根性の開発
効率無視の徹夜で頑張るだけ
身体を壊したら他の奴が頑張る
ワンマンチームもたくさん
若手は育たず、老害化する一方
じゃ、ソーシャルアプリ業界は
どうするの?
よく耳にするのは、ミドルウェア、ゲームエンジン
ゲーム業界では、とにかく導入が遅かったよね
人もコストも時間も
小さくできますよって言われたりしますが
違います
なぜならツールは万能の道具ではない
ゲームエンジンは、何をもたらすか?
Unreal Engine 3 (Epic Games)
CryEngine (Crytek)
Gamebryo LightSpeed (Emergent Game Technologies)
Torque Game Engine (Garage Games)
Source Engine (Valve)
Unity (Unity Technologies)
コンシューマゲームで有名なエンジンたち
何ももたらさない
いいすぎました
が、ツールがただそこにあっても幸せにはなれない
銀の弾丸ではない
ゲームエンジンは万能ではない
ゲームエンジンは面白いものをつくるわけではない
エンジンの有用性は多くの場合、初期開発速度にあるだけ
開発を最適化しないと逆に無駄が多くなる
大事なのはツールより使う人間
ミドルウェアとは
ミドルウェアは特定の問題を解決するもの
物理計算とか、3Dサウンドとか、ある特化した問題を解決するためのもの
例えば、Flash→HTML5の動的変換をするものもミドルウェアに近い
問題解決の手助けはしてくれるが問題は解決しない
ゲームエンジンとは
ゲームエンジンは全てを提供するもの
ゲームの「作り方=フロー」を提供する
逆に言えばゲームエンジンを採用するならそれに従わなければならない
ゲームエンジンはリッチすぎる事も
逆に何でも創れる訳でもない
最大のメリットは創って壊せるサイクルの速度
デメリットとしては使いこなせない事も
ゲームエンジンの会社が倒産することもあるし
Web業界で言えば
intra-martのようなWebアプリフレームワークはゲームエンジンのようなもの
CakePHP、Rails、Djangoといった包括的なWebフレームワークはゲームエンジン寄り
Smarty、Velocity、iBatis、Strutsといった限定的なフレームワークやライブラリはミドルウェア寄り
他にもスマホなら
Titanium Mobile
Corona
Unity
Cocos2D
etc...
ツールは必要な時必要なものを選べば良い
なら大事なのはそれを使える開発体制
大事にすべきもの
効率的な開発体制
柔軟な開発は柔軟な意識に繋がり
柔軟な意識は柔軟な組織を創る
どんな挑戦も苦難も達成する事は力になる
でも、開発体制がしっかりしてなければ耐えられない
ならどうする?
アジャイル開発?Webでも
よく言われましたが
アジャイルの心の再確認
アジャイルソフトウェア開発宣言より引用
顧客満足を最優先し、価値のあるソフトウェアを早く継続的に提供します。
要求の変更はたとえ開発の後期であっても歓迎します。
変化を味方につけることによって、お客様の競争力を引き上げます。
動くソフトウェアを、2-3週間から2-3ヶ月というできるだけ短い時間間隔でリリースします。
ビジネス側の人と開発者は、プロジェクトを通して日々一緒に働かなければなりません。
意欲に満ちた人々を集めてプロジェクトを構成します。環境と支援を与え仕事が無事終わるまで彼らを信頼しま
す。
情報を伝えるもっとも効率的で効果的な方法はフェイス・トゥ・フェイスで話をすることです。
動くソフトウェアこそが進捗の最も重要な尺度です。アジャイル・プロセスは持続可能な開発を促進します。
一定のペースを継続的に維持できるようにしなければなりません。
技術的卓越性と優れた設計に対する不断の注意が機敏さを高めます。
シンプルさ(ムダなく作れる量を最大限にすること)
が本質です。最良のアーキテクチャ・要求・設計は、
自己組織的なチームから生み出されます。
チームがもっと効率を高めることができるかを定期的に振り返り、
それに基づいて自分たちのやり方を最適に調整します。
でも、それって
単なる理想でしょ?
理想ですでも、理想がなければ
現実は変わらない
考えてみよう
人間は最もコストが高い
良いアプリを創るのは
人間
なら、人間を大事にしたら勝てるんじゃない?
じゃ、人間を大事にするって?
違います
即ち、人間を尊重する事
人間の問題を重んじること
人間の問題?
世界は常に変化が起きている
なので人間がついていけないこともある
特にソーシャルアプリは今までにないくらい高速に時間が過ぎていく
その中で自分たちは問題を解決し、成長していかなければならない
変化を愛せよ
変化は愛おしいものだ、何故なら停滞はつまらないから
ソーシャルアプリは日々進化し続ける
進化し続けるものに完璧はない
なら、完璧を求めず変化を愛せよ
人間だって変化するものなのだから
リスクを愉しむ
例えばトム・デマルコ著「熊とワルツを」の言葉
「リスクのないプロジェクトには手をつけるな」
リスクが大きい程チャンスも大きい
リスクは心配するものではなく管理するもの
リスクがない人間も存在しない
ユーザーを重んじる
ユーザーも勿論人間
ソーシャルアプリは反応がダイレクト
コミュニティでの反応や問い合わせでのレスポンスがあまりに高速
ユーザーの為に日々楽しさを提供していくために何が最善かを考える
自由と軽量な開発は違う
自由な開発は野放図なだけ
責任の所在が曖昧で、ゴールの見えない開発を繰り返す
軽量な開発はイテレーション(繰り返し)により実測に基づいた開発サイクルを形成
責任の所在も曖昧ではなく整理されている
予測可能なプロジェクトなんてものは存在しない
これは理想に過ぎない
でも人は決めたがる
この開発なら2000万でできます
三ヶ月で完成させられます
10人いれば完璧です
お任せ下さい!(キリッ
現実はそんなに甘くない
だって人間だもの
メインエンジニアが病気で……=人はサイボーグでも交換可能なツールでもない
想定していたよりもずっと難しいことだったので=難易度が不明なのに見積もれる訳がない
要求が増えたので2000万じゃおさまりません=最初から要求がFIXしてることなんてありえない
現実は実測に基づくべきいくつかの明確な目標と
優先順位の高い要件を達成するために振り返りは不可欠
GOALへ向かってる筈がそこはゴールじゃないかも
GOLE
じゃ、どうするの?
アジャイル開発やってみよう
基本的な考え
曖昧な時点で確定させず、適切な時期にそれを確定させよ、曖昧なら曖昧で良い事もある
計画は不確実なのが当然、なら観測しそれを適時修正せよ
変化する事は確実、ならその変化に対応できる意識でいればいい
価値のあるもの
駄目な現実:物事が会議やドキュメントによって決定し、それが動かせない、または意思決定が見えないところで行われる
解決するには:実際に動いているものこそが大事、動くものこそが価値のあるものでそれが変わる理由は見えるべきで納得できるべき
計画は顧客とする
駄目な現実:丸投げしたら……できてない!
解決するには:短い繰り返しを確実にやる。見積もりは開発者、優先順位は顧客がする
諦められるものは諦めよう。全部が全部できるわけじゃないし、選択と集中が一番
YAGNI(You ain't gonna need it)、機能は必要となるまでつくらないべき
思いつきで行動しない
あとで使うだろう思って作ったら殆ど使われなかった(費やした時間の殆どが無駄)
余計な機能をつけるために大事な機能へのリソースを失う
予期しない変更に対応するために不必要な複雑さは持ち込まない
人生の時間は貴重、なのでいるかわからないものより、現実の問題を解決しよう
朝会は立ってるだけじゃないよ
毎日、15分位内でスタンダップミーティング
確認するのは、昨日やったこと、今日やること、問題点の確認
問題点を共有する時間ができ、お互いの1日タスクが明確になる
チームの意識が高まるのが実感できる
見える化の具体例
全体のタスクの具体化
全体のタスクのボリュームが見えない……
タスクを拾ったりしようにも何が残ってるのやらさっぱり……
なら、タスクかんばんで見える化しよう
現在の状況のスナップショット!
タスクかんばん
タスクの進捗の見える化
日々のズレの具体化
いまどれくらい進んでいるのか、はたまた遅れているのが実感が持てない
リリース直前になって「間に合ってない!!」と急に騒ぎ出す
なら、バーンダウンチャートで進捗の見える化
残作業時間が見えるようになり、リリース直前ではなく、事前にリスクに気がつける
バーンダウンチャート
日々のズレや終わるかどうかの見える化
見積もりの具体化
スケジュールを切るのがリーダーで自分で勝手に自分がやったら、で見積もってしまう
見積もりが下手な人に任せて、明らかに短すぎる見積もり、長すぎる見積もりを立ててしまう
なら、プランニング・ポーカーでみんなで一緒に見積もろう
ズレが大きい場合、問題点の洗い出しにもなります
プランニング・ポーカー
各々の見積もりの見える化
お互いを良く知ろう
企画
デザイン
開発
部署毎に座ることはしない
技術開発部、企画制作部といったくくりで座り始めると軋轢が生じる
チームは必ずひとかたまりになるべき
そうでなければ、お互いの事を良く知る事もできないし、目的を共有できない
コミュニケーション超重要
適材適所の重視
よくある失敗:とりあえず人が足りないので突っ込んで爆死
人には得意不得意がある、なので、得意なところは得意なアサインをしたい
でも、それしか出来ないのも駄目
なら、全体の底上げの為に勉強会などを実施
変化を恐れなければ、蓄積を捨てる力が身につく
忘れないで
プロジェクトが抱える多くの問題は、プロセスや技術ではなく人に依存する
アジャイルは、開発に有効な抽象的な解決策は存在しないと仮定し、実測によって答えを求める
なぜなら実測しなければそのチームや組織にとって最適に近い答えは見つからないから
ゲーム業界と近い事
本当に欲しいものは最初には見えない
本当に面白いもの、という抽象的な目的にしかなりえないから
なら、創って壊すをちゃんと繰り返す
駄目な創って壊すは賽の河原の積み石と変わらない
目的を具体化しよう
目標達成を具体化するために検証と適応を繰り返す
検証と適応を繰り返すためには透明性が必須
透明性は評価や報酬の見直しと変化する勇気が必要
人に基づくありがちな組織問題
「○○を使いましょう!」というと検討するだけで三ヶ月とか、半年とか1年かかり、しかも駄目
何かを変えようとすると「今までこうやってきたから」という理由で猛烈に反発される
「こうしたら良くなりますよ」という意見はすべて封殺
どうしてそうなるのか?
勇気がないからだよ
君だけで硬質な組織を変えることはできない
殆どの会社は少しずつ腐っていく
1人で硬質な組織を変えるためには10年や20年といった長い月日がかかる
その10年をかけて変える価値はあるか?
1人じゃなく、みんなでなら一気に会社は変わるし、柔軟さを保つこともできる
でも、大変なんでしょ?
大変です
大変だからこそ達成感がある
大変だからこそ心が沸き立つ瞬間がある
それは世界が変わるような体験で
組織だけでなく世界は変えられる
自分たちの手によって
まず必要なのは勇気だけ
これからgumiが挑戦してくこと
世界戦略
EA社(Electronic Arts)との共同開発でゲームをリリースしたりしています
海外戦略の一環として、社内に英語の教師を呼びクラス別授業を行っています
これから目指していくのはFacebook
今日話したことは世界を狙っていくための一つの手段です
世界戦略?
世界の規模は日本の数十倍~数百倍
想定しきれない規模のものを完璧に開発することは難しい
なら、繰り返しでそれをクリアしていくしかない
ツールだけでは世界に通用しない、なら体制を世界に向けて整えていく
ローカライズなんかも必要だしね
なぜ開発体制が世界戦略の一環なのか
世界に挑むにも勇気がいるからね!
勝つための組織、勝つためのチーム造りが重要です
良いツールは時代によって変わるけど、良い組織、良いチームは時代では変わらない
業界を良くするためにも良いアプリ、良いチームを作っていきましょう!
まとめ
技術的な課題も沢山簡単じゃないよ
でも、挑戦するなら今しかない
頑張りましょう!
ご静聴有り難うございました