inside cyberagents game development

106
Inside CyberAgent’s Game Development 2015/10/3 株式会社サイバーエージェント 川村

Upload: suguru-shirai

Post on 24-Jan-2018

2.447 views

Category:

Presentations & Public Speaking


0 download

TRANSCRIPT

Page 1: Inside CyberAgents Game Development

Inside CyberAgent’s Game Development

2015/10/3  株式会社サイバーエージェント  

⽩白井  英  川村  猛

Page 2: Inside CyberAgents Game Development

• 前半 - (白井) • CyberAgentって? • ゲーム事業開発の歴史 • 開発の仕方 • 後半 - (川村) • PHPに命を救われた話

Agenda

Page 3: Inside CyberAgents Game Development

お前、誰よ• 株式会社 サイバーエージェント • SGE統括室CTO • 白井 英 • エンジニア • Twitter @goodoo • Blog http://ameblo.jp/goodoo • DQ10 すぐちむ (FB392-435) プクリポ(旅芸人)

Page 4: Inside CyberAgents Game Development

少し説明

Page 5: Inside CyberAgents Game Development

CyberAgentの 子会社群による ゲーム事業

Page 6: Inside CyberAgents Game Development

CyberAgentって?

Page 7: Inside CyberAgents Game Development

Google先生に聞いた結果Go Go Go Lang Java ・・・

Page 8: Inside CyberAgents Game Development

PHPどこ?

Page 9: Inside CyberAgents Game Development

CyberAgentも PHPつかってるよ っていう話をします

Page 10: Inside CyberAgents Game Development

ゲーム事業開発の歴史

Page 11: Inside CyberAgents Game Development

2010年 ソーシャルアプリ黎明期

Page 12: Inside CyberAgents Game Development

2010年の PHP

カンファレンス

Page 13: Inside CyberAgents Game Development

その頃のウチ・・

Page 14: Inside CyberAgents Game Development

星空バータウンドリームプロデューサー

コーデマニア

Page 15: Inside CyberAgents Game Development

当時はまだ ガラケーが主戦場

Page 16: Inside CyberAgents Game Development

とはいえその 流行(負荷)具合は

やばかった

Page 17: Inside CyberAgents Game Development

当時の数字

• ユーザ数約200万人 • 約10億PV/Month • 75万(MonthlyActiveUser) • ピーク時のトラフィック200Mbps

「星空バータウン」

Page 18: Inside CyberAgents Game Development

開発環境に 目を向ける

Page 19: Inside CyberAgents Game Development

当時(2010年)の開発の仕方• サーバはオンプレ • CakePHP • puppetでサーバ構築 • デプロイはCapistrano • DBのMigrationはRake

※すべてのプロジェクトで実施できてたわけではないです

Page 20: Inside CyberAgents Game Development

テストコードはなかった

Page 21: Inside CyberAgents Game Development

開発環境は 1 or 2台を

チームで使い分け

Page 22: Inside CyberAgents Game Development

Subverion管理で レビューなし・・

Page 23: Inside CyberAgents Game Development

つくることに 一生懸命な時代 でした・・

Page 24: Inside CyberAgents Game Development

2012-13年 ブラウザソーシャル

アプリ後期

Page 25: Inside CyberAgents Game Development

ブラウザのアプリとネイティブのアプリ

を作り始めた

Page 26: Inside CyberAgents Game Development

開発環境に 目を向ける

Page 27: Inside CyberAgents Game Development

当時(2012-13年)の開発の仕方

• サーバはオンプレからクラウド • CodeIgniter • デプロイはshell(rsync)

Page 28: Inside CyberAgents Game Development

• テストコードは少しだけ • Subversion管理 • Redmineでチケット駆動へ • プログラムレビューはまだ・・・

Page 29: Inside CyberAgents Game Development

1チームのあたりの 人数が増えた

Page 30: Inside CyberAgents Game Development

開発環境が・・

Page 31: Inside CyberAgents Game Development

devがいっぱい・・・

Page 32: Inside CyberAgents Game Development

開発ラインが並行で いくつも走るように

なった結果

Page 33: Inside CyberAgents Game Development

2013-14年 転換期

Page 34: Inside CyberAgents Game Development

子会社の1つ(CyberX)が開発言語を

PHPからNode.jsへ

Page 35: Inside CyberAgents Game Development

新しい技術要素

Page 36: Inside CyberAgents Game Development

開発環境としての 開発のし易さを

見直す

Page 37: Inside CyberAgents Game Development

このスライドの内容を実践http://www.ryuzee.com/contents/blog/6102

Page 38: Inside CyberAgents Game Development

・ユニットテストを書く ・結合テストを自動化 ・継続的インテグレーションサーバを  つかう ・デプロイを自動化 ・環境構築を自動化

Page 39: Inside CyberAgents Game Development

このスライドの内容を取り入れる

http://sotarok.hatenablog.com/entry/20120919/presented_git_and_pull_request_work_flow_at_phpcon2012

Page 40: Inside CyberAgents Game Development

・1チケット1ブランチ ・ブランチ名は、チケット番号 ・ローカルのVirtualBoxで開発 ・ローカルのテストが通ったら  featureへPUSH

Page 41: Inside CyberAgents Game Development

node port:1234 /var/www/feature/1234

チケット番号とURLを結びつけ

node port:1235 /var/www/feature/1235

node port:1236 /var/www/feature/1236

node port:1237 /var/www/feature/1237

nginx

1234.example.com

1235.example.com1236.example.com

1237.example.com

server { listen 80; server_name ~^(?<port>\d+)\.example\.com; location / { set $url example.com; proxy_pass http://$url:${port}; } }

Page 42: Inside CyberAgents Game Development

当時(2013-14年)の開発の仕方• サーバはクラウド • CodeIgniter(PHP) • express(Node.js) • デプロイはCapistrano • DBのMigrationはRake

Page 43: Inside CyberAgents Game Development

• テストコードを書く習慣に • Git管理 • Redmineでチケット駆動 • PullRequestによるソースレビュー

Page 44: Inside CyberAgents Game Development

継続的デリバリー

Page 45: Inside CyberAgents Game Development

現在

Page 46: Inside CyberAgents Game Development

ネイティブアプリが 主戦場

Page 47: Inside CyberAgents Game Development

様々な技術を使用

Page 48: Inside CyberAgents Game Development

【サーバ】• クラウド • AWS • CAのプライベートクラウド • GAE(Java)

Page 49: Inside CyberAgents Game Development

• AWS • オペレーション効率化 • CAのプライベートクラウド • コストメリット • GAE • Googleと仲良くなれた

それぞれのメリット

Page 50: Inside CyberAgents Game Development

• Googleと仲良くなれた

Page 51: Inside CyberAgents Game Development

【WAF】

• CodeIgniter • Phalcon

Page 52: Inside CyberAgents Game Development

【WAF】

とにかく早いやつ かつ

見通しがいいやつ

Page 53: Inside CyberAgents Game Development

【その他】• Git • Git-flowが主流 • 一部GitHub-flowを使用 • チケット管理 • Redmineが主流

Page 54: Inside CyberAgents Game Development

【その他】チケットを紐づけての開発ができる 開発フローを採用

Page 55: Inside CyberAgents Game Development

ネイティブが主戦場に なっても

サーバエンジニアに対する 変化は少なかった

Page 56: Inside CyberAgents Game Development

番外編

Page 57: Inside CyberAgents Game Development

子会社群ならではの 工夫

Page 58: Inside CyberAgents Game Development

ソースの共有 (現在進行形)

Page 59: Inside CyberAgents Game Development

見る専用の Gitlabを立てた

Page 60: Inside CyberAgents Game Development

各プロジェクトから ソースを定期的に 自動でPush

Page 61: Inside CyberAgents Game Development

アカウントは 社内SSOで管理

(アカウント管理が楽)

Page 62: Inside CyberAgents Game Development

Publicレポジトリ廃止 (とっちゃった)

Page 63: Inside CyberAgents Game Development
Page 64: Inside CyberAgents Game Development

Internalをデフォルトで表示

(見にくいかも・・・)

Page 65: Inside CyberAgents Game Development
Page 66: Inside CyberAgents Game Development

まだまだ試行錯誤中

Page 67: Inside CyberAgents Game Development

自分たちのプロセスは 自分たちで進化させる!

Page 68: Inside CyberAgents Game Development

ご清聴ありがとうございました

Page 69: Inside CyberAgents Game Development

PHPカンファレンス2015 Inside CyberAgent’s Game Development ~PHPに命を救われた話~ 2015.10.03  

Page 70: Inside CyberAgents Game Development

川村猛 株式会社GRIPHONE 取締役/CTO 2010年03月よりCyberAgent 2010年03月 ‒ 2013年01月 株式会社CyberX 2013年02月 ‒ 株式会社GRIPHONE PHP使用歴10年

株式会社GRIPHONE 2013年02月設立 GREE、CyberAgentのジョイントベンチャー ソーシャルゲームの開発/運用

Page 71: Inside CyberAgents Game Development

GRIPHONEのサービス

Page 72: Inside CyberAgents Game Development

GREEプラットフォーム 2013年09月~

Page 73: Inside CyberAgents Game Development

GREEプラットフォーム 2014年05月~ dゲームプラットフォーム 2015年06月~

Page 74: Inside CyberAgents Game Development

GREEプラットフォーム 2015年03月~ mobageプラットフォーム 2015年09月~

Page 75: Inside CyberAgents Game Development

DMMプラットフォーム 2015年07月~

Page 76: Inside CyberAgents Game Development

全てwebアプリです

Page 77: Inside CyberAgents Game Development

全てPHPアプリです

Page 78: Inside CyberAgents Game Development

技術要素

Page 79: Inside CyberAgents Game Development

PHP関連技術  PHP(5.4~5.5)  PHPUnit  CodeIgniter(2.1.3)  Smarty  SWF editor  PHP Debug Bar  PEAR  xhprof

 HHVM

その他  CentOS  Apache  nginx  MySQL redis  memcached  sass compass  Backborn.js  Jenkins  capistrano  fluentd   etc…

Page 80: Inside CyberAgents Game Development

PHPに命を救われた話

Page 81: Inside CyberAgents Game Development

設立後、いきなり大失敗

Page 82: Inside CyberAgents Game Development

最初にリリースしたアプリを わずか2ヶ月でクローズ

Page 83: Inside CyberAgents Game Development

システムに多くの問題

Page 84: Inside CyberAgents Game Development

どんな問題?

Page 85: Inside CyberAgents Game Development

アンコントローラブルな部分  ・ネイティブアプリの“横展”   →言語はJava(Javaに罪はない)   →元々社内で開発したものではないため、理解が浅い  ・Google App Engine(GAEに罪はない)   →上手く使いこなせなかった

Page 86: Inside CyberAgents Game Development

実行速度  ・横展元のネイティブアプリも元々速度に課題を抱えていた  ・GREEプラットフォームを経由、APIにアクセス   →レスポンス速度悪化   →プラットフォームのタイムアウト頻発   →非同期処理を多用して改善は見られたが…  ・GAEに適した設計になっていない   →RDB的なデータ設計   →マシンパワーで無理やり解決…といった手段も取れない

Page 87: Inside CyberAgents Game Development

セキュリティ  ・SQLインジェクション、XSS、CSRF対策が不十分  ・ブラウザバック、連打、URL直打ち、要素改竄等の対策が甘い   →元々ネイティブアプリなので考慮されていない

Page 88: Inside CyberAgents Game Development

設立したばかりなのに 倒産の危機

Page 89: Inside CyberAgents Game Development

次は絶対に失敗出来ない

Page 90: Inside CyberAgents Game Development

PHPにシフトチェンジ

Page 91: Inside CyberAgents Game Development

何故PHP?

Page 92: Inside CyberAgents Game Development

CAグループの ブラウザゲーム資産を

最大限に活用

Page 93: Inside CyberAgents Game Development

成功の確率 

失敗のリスク

Page 94: Inside CyberAgents Game Development

どんな資産?

Page 95: Inside CyberAgents Game Development

PHPでソーシャルアプリの開発/運用経験  ・過去3年間の開発/運用経験   →“正解”を持っている   →インフラ環境、開発フローまで含めたノウハウ  ・PHPでのソーシャルアプリ開発に慣れたエンジニアが社内に在籍

Page 96: Inside CyberAgents Game Development

運用実績  ・十分に実績のあるwebアプリ基盤   →DAU 数十万規模   →GREE、mobageでの運用実績   →不具合解消やパフォーマンス改善がある程度済んでいる

Page 97: Inside CyberAgents Game Development

開発スピード  ・サーバー、マークアップ合わせてエンジニア8名   →2本目のアプリは開発期間4ヶ月でリリース

Page 98: Inside CyberAgents Game Development

その後どうなった?

Page 99: Inside CyberAgents Game Development

シフトチェンジ後 約2年半で

4プラットフォーム 6本のサービス

Page 100: Inside CyberAgents Game Development

得た教訓

Page 101: Inside CyberAgents Game Development

過去のノウハウと実績 開発スピードと安定性

の重要性

Page 102: Inside CyberAgents Game Development

何が言いたいのか

Page 103: Inside CyberAgents Game Development

GRIPHONEはPHPに 命を救われた会社です

Page 104: Inside CyberAgents Game Development

感謝の気持ちを伝えたい

Page 105: Inside CyberAgents Game Development

ありがとうPHP

Page 106: Inside CyberAgents Game Development

ご静聴ありがとうございました