狠狠撸

狠狠撸Share a Scribd company logo
KLabのゲーム開発を?
支える開発環境?
平尾 謙我?
開発職?
KLabGames事業本部?
KLab株式会社?
- 1人1台サーバー開発 -?
2
2017年KLab入社。?
入社当時はクライアントエンジニアとしてUnityでの開発を担当。?
現在は転向してサーバーサイドエンジニアとして開発を担当。?
その他、業務改善のためのツール作成や仕組みづくりなども担当。?
平尾 謙我(ひらお けんが)?
エンジニア職?
KLabGames事業本部?
KLab株式会社?
経歴?
画像?
3
今日のお話?
4
?
?
?
KLabでの開発環境の構成を?
?
思い切って刷新した話?
5
?
?
?
業界でよくある開発環境?
?
● 共用サーバーを1台用意?
?
● 各作業者がローカルで開発?デバッグ?
?
● 出来たものを共用サーバーへ反映?
?
● 複数人の作業を共用サーバーで組み合わ
せて確認?
共用サーバー?
6
?
?
?
共用サーバー?
よくある開発環境だといろいろと不便?
?
● 共用サーバーにバグが発生すると?
全ての作業者に影響する?
?
● KLabの開発方針(後ほど解説)との?
相性が悪かった?
7
?
?
?
KLabでの開発環境?
?
● 1人1台サーバーを用意し各々の作業を自
分専用のサーバーで行う?
?
● この1人1台に用意されたサーバーの仕組
みをKLabではgodと呼んでいる?
?
● 規模の大きいプロジェクトでは、?
100台以上のgodを使っていることも?
god1? god3?
god2?
8
godとは?
9
?
?
?
godとは?
● オンデマンドで増やすことのできるAmazon EC2を用いたサー
バー環境のこと?
?
● g on demandのイニシャルを組み合わせたもの?
○ Gはプロジェクト名のイニシャル。神ではないよ?
?
● KLabではローカル仮想マシンでの環境構築を廃止し、?
1人1台用意されたgodにそれぞれsshで接続し開発を?
行なっている?
?
注) 全てのプロジェクトがこの環境で開発しているわけではありません?
10
?
?
?
godのいいところ?
?
● 自分専用のサーバーなので、他の人への
影響を気にせず好きなペースで更新を反映
できる?
?
● 自分の担当外のコードを触ってもOK?
?
● コードやマスタ(ゲームに必要なデータ)の自
動生成を簡単なコマンドで実行可能?
?
● テストも簡単なコマンドで実行可能?
god1? god3?
god2?
11
godのいいところ?
?
● オンデマンドなので必要な時にサーバーを
起動し不要になったら停止させられる?
?
Slack上でbotに指定することで可能?
?
起動: @god start?
?
停止: @god stop?
?
初期化: @god terminate?
?
● 毎日22:00に自動停止する機能も搭載?
?
?
?
god1? god3?
god2?
12
なぜgodが必要なのか?
13
?
?
?
なぜgodが必要なのか?
● KLab独自の設計思想による開発を行うのにgod環境の相性が
良かった?
?
● デザインパターンとしてはMVVMと似た設計?
?
● クライアントとサーバーが密結合した設計方針?
?
● クライアントとサーバーが並行して開発を行う?
14
ViewとModelの?
仲介?
?
?
?
ViewModel
● クライアントがViewとViewModelの開発を担当?
?
● サーバーがModelとDB周りの開発を担当?
画面表示?操作? 各種データ処理?
View Model DB
クライアント? サーバー?
15
?
?
?
サーバーAPI
設計
よくある開発?
KLab?
サーバー実装
UIと残りの
ロジック作成
ViewModel
を仮実装
Viewの実装
ViewModelを
実装
Modelの実装
クライアント?
サーバー?
16
?
?
?
なぜgodが必要なのか?
● クライアントとサーバーが密結合した開発体制?
= クライアントとサーバーの環境が合わないと?
正常に動作しないことが多い?
?
● しかし開発者それぞれの作業過程で求める環境が異なること
が多い?
? 従来の共用サーバー開発だと作業が止まる人が発生?
?
? 自分の求める環境をgodに反映して作業可能?
?
17
?
?
?
なぜgodが必要なのか?
● 詳しい説明は過去のcedec+kyushu2018での?
発表がありますのでそちらをご覧ください?
?
大規模モバイルオンラインゲームを支えるソフトウェアアーキ
テクチャ開発とその使用例?
18
?
?
?
なぜgodが必要なのか?
でもそれなら?
ローカル仮想マシンで良くない??
19
?
?
?
なぜgodが必要なのか?
● エンジニア以外のプランナー?デザイナーも使用?
している?
?
? ローカル仮想マシンだと、?
  トラブルが発生した際の開発のフォローが大変?
?
● godはEC2にあるので誰でもアクセス可能?
?
? エンジニアのヘルプが容易?
20
?
?
?
プランナー? エンジニア?
プランナーのgod?
エラーで動かない...
助けて!
エラー内容確認
原因はここか!
リモートワークでもフォローが容易?
21
godを使った開発例?
22
godを使った開発例?
(エンジニア編)?
23
?
?
?
サーバーAPI
設計
よくある開発?
KLab?
サーバー実装
UIと残りの
ロジック作成
ViewModel
を仮実装
Viewの実装
ViewModelを
実装
Modelの実装
クライアント?
サーバー?
24
?
?
?
1. 設計を決めてMock(ダミーデータ)を用意する?
?
○ クライアントとサーバーで相談して認識を合わせる?
? ここで設計がずれてしまうと手戻りが発生するので重要?
?
○ 設計できたら仮データを取得できるようMockを実装する?
? クライアント?サーバーが?
それぞれMockを使って並行作業?
godを使った開発例(エンジニア編)?
?
?
?
25
2. サーバー?
?
● Mockの要件を満たすような、?
テーブル設計などのDB周りや?
Modelロジックを実装?
2. クライアント?
?
● ゲーム画面のUIや操作ロジックを
実装?
● Mockで動作確認も可能?
?
?
?
godを使った開発例(エンジニア編)?
?
?
?
Mockがあるのでクライアント?サーバー間の?
作業は干渉しない?
?
26
?
?
?
3. Mockを本物のデータへ繋ぎ込み?
?
○ 最初に用意したMockを消して、サーバーで用意した?
本物のデータへ差し替え?
?
○ godの自動生成コマンドを使えば複雑な対応は不要?
?
? クライアント?サーバーが並行作業したため、?
  足並みを揃えなくても本物のデータで動作する?
?
?
?
godを使った開発例(エンジニア編)?
?
?
?
27
godを使った開発例?
(プランナー編)?
28
?
?
?
godを使った開発例(プランナー編)?
● 未来のイベントデータを作成?
?
● 手順?
1. マスタ(イベントデータ)を用意?
2. Gitでブランチを作成しcommit?
3. 自分のgodへcommit内容を反映?
4. Unityから自分のgodへ接続し動作を確認?
もしエラーなどが起きたら開発者に相談?
5. 問題がなければPRを作成?マージして完了?
god?
29
?
?
?
godを使った開発例(企画職編)?
● 各godは独立しているため、?
複数イベントを同時に対応可能?
?
● イベント以外でも様々な施策を?
他の人を気にせず並行作業可能?
8月イベント? 9月イベント?
30
godを使った開発例?
(個人環境以外での用途)?
31
?
?
?
godを使った開発例(個人環境以外での用途)?
● EC2サーバーなので複数人で?
同じgodを使用することも可能?
?
? 共用サーバーとしての?
役割としても利用できる?
god?
32
?
?
?
godを使った開発例(個人環境以外での用途)?
● デイリービルド用god?
○ 最新の開発環境の動作確認を行うための環境?
?
● ステージング環境用god?
○ 本番反映を行う直前の最終の動作確認を行うための環境?
?
● 版権元確認用god?
○ KLabでは他社IPを使ったゲームが多いため、?
版権元に提供する環境を用意しているプロジェクトもある?
33
godを使った開発例?
(平尾編)?
34
?
?
?
godを使った開発例(平尾編)?
● 自分専用のgodがあるので色々と遊べる勉強できる?
?
● 自分のメイン業務をする傍ら、担当外のコードを触って実際の
ゲームの動作も確認することが可能?
?
? 私はクライアントだけどサーバーにも興味あるから、?
ちょっと触って実際の動作がどうなるか試してみよう!?
35
● 実際に私がやったこと?
?
1. サーバー側デバッグツールの改修?
?
2. サーバーコードのリファクタリング?
?
3. 新機能の実装?
?
4. プランナーのお手伝い?
?
?
?
godを使った開発例(平尾編)?
36
1. サーバー側デバッグツールの改修?
?
○ python未経験だったのでコードを読んでみた?
?
○ ツール内で修正できそうな箇所を発見?修正?
?
○ 修正してPRを出してサーバー担当の人がレビュー?
?
○ デバッグ用なので本番影響もなく練習に最適?
?
?
?
godを使った開発例(平尾編)?
37
2. サーバーコードのリファクタリング?
?
○ ちょっとpythonが書けるようになったので、?
本番コードも触ってみる?
?
○ あくまで新規実装は行わず既存コードの修正のみ?
?
○ 本番影響はあるが既存コードなので練習に?
?
?
?
godを使った開発例(平尾編)?
38
3. 新機能の実装?
?
○ 新機能を提案して実装の許可は出たが人員不足で保留?
?
○ 新機能の仕様書をプランナーの代わりに用意?
?
○ クライアントもサーバーも1人で実装?
?
?
?
godを使った開発例(平尾編)?
39
4. プランナーのお手伝い?
?
○ プランナーが人員不足なのでマスタデータ入力のヘルプ?
?
○ 一応エンジニアなので、ただヘルプするだけではなく?
併せて業務改善も実施?
?
○ 1.5人日程度かかっていた作業を1時間程度に改善?
?
?
?
godを使った開発例(平尾編)?
40
まとめ?
41
● 従来の開発環境を思い切って変えてみたら?
メリットがたくさん?
?
● KLabでは1人1台開発サーバーを完備?
?
● 他の作業者の進捗に影響されず、自分のペースで作業可能?
?
● リモートワーク主流の昨今では、?
ローカル仮想マシンよりもEC2上のgodの方が便利?
?
?
?
まとめ?

More Related Content

碍尝补产のゲーム开発を支える开発环境