SlideShare a Scribd company logo

リアルタイムリモートデバッグ環境によるゲーム開発イテレーションの高速化【DeNA TechCon 2020 ライブ配信】

DeNA
DeNA

本セッションでは、Unityを使った開発のイテレーション高速化を目的として、有線接続したモバイル実機のゲームに対して開発用PCからリアルタイムに介入できるツールを高い柔軟性で容易に開発できる基盤をgRPC等と独自TCPリレーサーバーを組み合わせて構築した事例と、その上に実現したファイル転送システムをはじめとした、具体的に構築した デバッグツールの事例をご紹介します。

1 of 98
Download to read offline
リアルタイムリモートデバッグ環境による
ゲーム開発イテレーションの高速化
Haruto Otake
自己紹介
大竹 悠人 (Haruto Otake)
経歴
2009~2013 dwango
2013~ DeNA
主にUnity向けの内製ライブラリやSDK開発に従事
今日話すこと
Unity製のモバイルゲームを対象として
• 実機デバッグツールの必要性と実現したデバッグツール
• 実機デバッグツールを作る障壁とその解決策について
今回の発表で持ち帰って欲しいもの
DeNAが、実機デバッグという領域に対して
どのような問題を見出したのか
どのような課題を設定したのか
どのような技術選択、アーキテクチャで課題解決をしたのか
アジェンダ
実機デバッグツールで目指すゴール
実機デバッグツールの実現を阻害する要因の分析
実機デバッグツールを実現する環境の構築
汎用的なデバッグツールの実現
実機デバッグツールで
目指すゴール
何の為に、何を目指すのか
Ad

Recommended

【Unite 2017 Tokyo】最適化をする前に覚えておきたい技術
【Unite 2017 Tokyo】最適化をする前に覚えておきたい技術【Unite 2017 Tokyo】最適化をする前に覚えておきたい技術
【Unite 2017 Tokyo】最適化をする前に覚えておきたい技術Unity Technologies Japan K.K.
 
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しようUnity Technologies Japan K.K.
 
UniRxでMV(R)Pパターン をやってみた
UniRxでMV(R)PパターンをやってみたUniRxでMV(R)Pパターンをやってみた
UniRxでMV(R)Pパターン をやってみたtorisoup
 
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~Unity Technologies Japan K.K.
 
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]DeNA
 
UniRx完全に理解した
UniRx完全に理解したUniRx完全に理解した
UniRx完全に理解したtorisoup
 
UniRxことはじめ
UniRxことはじめUniRxことはじめ
UniRxことはじめShoichi Yasui
 
未来のプログラミング技術をUnityで -UniRx-
未来のプログラミング技術をUnityで -UniRx-未来のプログラミング技術をUnityで -UniRx-
未来のプログラミング技術をUnityで -UniRx-torisoup
 

More Related Content

What's hot

【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~UnityTechnologiesJapan002
 
Unityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTipsUnityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTipsUnity Technologies Japan K.K.
 
Unityでオニオンアーキテクチャ
UnityでオニオンアーキテクチャUnityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャtorisoup
 
うちではこうやっています UI構築のルールとPlaymakerを使った画面遷移
うちではこうやっています UI構築のルールとPlaymakerを使った画面遷移うちではこうやっています UI構築のルールとPlaymakerを使った画面遷移
うちではこうやっています UI構築のルールとPlaymakerを使った画面遷移まべ☆てっく運営
 
Unity In App Purchase (IAP)の使い方
Unity In App Purchase (IAP)の使い方Unity In App Purchase (IAP)の使い方
Unity In App Purchase (IAP)の使い方Makoto Ito
 
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステムSEGADevTech
 
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計UnityTechnologiesJapan002
 
『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMER
『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMER『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMER
『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMERエピック・ゲームズ・ジャパン Epic Games Japan
 
Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)Yoshifumi Kawai
 
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動についてUE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動についてcom044
 
【Unite Tokyo 2019】HDRPコワクナイ! HDRPで目指す小規模で高品質な映像制作
【Unite Tokyo 2019】HDRPコワクナイ! HDRPで目指す小規模で高品質な映像制作【Unite Tokyo 2019】HDRPコワクナイ! HDRPで目指す小規模で高品質な映像制作
【Unite Tokyo 2019】HDRPコワクナイ! HDRPで目指す小規模で高品質な映像制作UnityTechnologiesJapan002
 
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法モノビット エンジン
 
Unity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成についてUnity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成についてTatsuhiko Yamamura
 
Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話torisoup
 
【GTMF2018TOKYO】ハードウェアの性能を活かす為の、Unityの新しい3つの機能
【GTMF2018TOKYO】ハードウェアの性能を活かす為の、Unityの新しい3つの機能【GTMF2018TOKYO】ハードウェアの性能を活かす為の、Unityの新しい3つの機能
【GTMF2018TOKYO】ハードウェアの性能を活かす為の、Unityの新しい3つの機能Unity Technologies Japan K.K.
 
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方Yoshifumi Kawai
 

What's hot (20)

【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
 
Unityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTipsUnityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTips
 
Unityでオニオンアーキテクチャ
UnityでオニオンアーキテクチャUnityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャ
 
うちではこうやっています UI構築のルールとPlaymakerを使った画面遷移
うちではこうやっています UI構築のルールとPlaymakerを使った画面遷移うちではこうやっています UI構築のルールとPlaymakerを使った画面遷移
うちではこうやっています UI構築のルールとPlaymakerを使った画面遷移
 
Unity In App Purchase (IAP)の使い方
Unity In App Purchase (IAP)の使い方Unity In App Purchase (IAP)の使い方
Unity In App Purchase (IAP)の使い方
 
UIElements+UI BuilderでEditor拡張を作ろう
UIElements+UI BuilderでEditor拡張を作ろうUIElements+UI BuilderでEditor拡張を作ろう
UIElements+UI BuilderでEditor拡張を作ろう
 
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
 
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
 
『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMER
『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMER『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMER
『FINAL FANTASY VII REMAKE』におけるプロファイリングと最適化事例 UNREAL FEST EXTREME 2021 SUMMER
 
多機能ボイチャを簡単に導入する方法
多機能ボイチャを簡単に導入する方法多機能ボイチャを簡単に導入する方法
多機能ボイチャを簡単に導入する方法
 
Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)
 
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動についてUE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
UE4プログラマー勉強会 in 大阪 -エンジンの内部挙動について
 
【Unite Tokyo 2019】HDRPコワクナイ! HDRPで目指す小規模で高品質な映像制作
【Unite Tokyo 2019】HDRPコワクナイ! HDRPで目指す小規模で高品質な映像制作【Unite Tokyo 2019】HDRPコワクナイ! HDRPで目指す小規模で高品質な映像制作
【Unite Tokyo 2019】HDRPコワクナイ! HDRPで目指す小規模で高品質な映像制作
 
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
 
Unity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成についてUnity ネイティブプラグインの作成について
Unity ネイティブプラグインの作成について
 
Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話
 
Unity2018/2019における最適化事情
Unity2018/2019における最適化事情Unity2018/2019における最適化事情
Unity2018/2019における最適化事情
 
【GTMF2018TOKYO】ハードウェアの性能を活かす為の、Unityの新しい3つの機能
【GTMF2018TOKYO】ハードウェアの性能を活かす為の、Unityの新しい3つの機能【GTMF2018TOKYO】ハードウェアの性能を活かす為の、Unityの新しい3つの機能
【GTMF2018TOKYO】ハードウェアの性能を活かす為の、Unityの新しい3つの機能
 
猫でも分かるUE4を使ったARコンテンツ作り方 初級編 ver 1.0.0
猫でも分かるUE4を使ったARコンテンツ作り方 初級編 ver 1.0.0猫でも分かるUE4を使ったARコンテンツ作り方 初級編 ver 1.0.0
猫でも分かるUE4を使ったARコンテンツ作り方 初級編 ver 1.0.0
 
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
 

Similar to リアルタイムリモートデバッグ環境によるゲーム開発イテレーションの高速化【DeNA TechCon 2020 ライブ配信】

01 idea table3.0
01 idea table3.001 idea table3.0
01 idea table3.0umisuzume
 
Windows 8 Developers カンファレンス
Windows 8 Developers カンファレンスWindows 8 Developers カンファレンス
Windows 8 Developers カンファレンスKaoru NAKAMURA
 
3Dリッチコンテンツビジネス活用のご提案ver3.1
3Dリッチコンテンツビジネス活用のご提案ver3.13Dリッチコンテンツビジネス活用のご提案ver3.1
3Dリッチコンテンツビジネス活用のご提案ver3.1ITDORAKU
 
3Dリッチコンテンツビジネス活用のご提案ver3.1
3Dリッチコンテンツビジネス活用のご提案ver3.13Dリッチコンテンツビジネス活用のご提案ver3.1
3Dリッチコンテンツビジネス活用のご提案ver3.1CRI Japan, Inc.
 
01 idea table3.1(up)
01 idea table3.1(up)01 idea table3.1(up)
01 idea table3.1(up)umisuzume
 
本の紹介
本の紹介本の紹介
本の紹介t w
 
情報理工Android勉強会第一回大将Part
情報理工Android勉強会第一回大将Part情報理工Android勉強会第一回大将Part
情報理工Android勉強会第一回大将PartHiroki Sakamoto
 
3Dリッチコンテンツビジネス活用のご提案ver3.1
3Dリッチコンテンツビジネス活用のご提案ver3.13Dリッチコンテンツビジネス活用のご提案ver3.1
3Dリッチコンテンツビジネス活用のご提案ver3.1ITDORAKU
 
Unityティーチャートレーニングデイ -認定3Dアーティスト編-
Unityティーチャートレーニングデイ -認定3Dアーティスト編-Unityティーチャートレーニングデイ -認定3Dアーティスト編-
Unityティーチャートレーニングデイ -認定3Dアーティスト編-Unity Technologies Japan K.K.
 
2018/3/23 Introduction to Deep Learning by Neural Network Console
2018/3/23 Introduction to Deep Learning by Neural Network Console2018/3/23 Introduction to Deep Learning by Neural Network Console
2018/3/23 Introduction to Deep Learning by Neural Network ConsoleSony Network Communications Inc.
 
Webプログラマの為のUnity入門
Webプログラマの為のUnity入門Webプログラマの為のUnity入門
Webプログラマの為のUnity入門Yusuke Ando
 
Windows8のクライアントHyper-V入門(.NETラボ勉強会 2013/6/22 日本マイクロソフト)
Windows8のクライアントHyper-V入門(.NETラボ勉強会 2013/6/22 日本マイクロソフト)Windows8のクライアントHyper-V入門(.NETラボ勉強会 2013/6/22 日本マイクロソフト)
Windows8のクライアントHyper-V入門(.NETラボ勉強会 2013/6/22 日本マイクロソフト)Tomokazu Kizawa
 
福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介Mori Shingo
 
01 idea table3.2
01 idea table3.201 idea table3.2
01 idea table3.2umisuzume
 
devsumi2012 17-D-1 Kinectで創る10年後のカタチ
devsumi2012 17-D-1 Kinectで創る10年後のカタチdevsumi2012 17-D-1 Kinectで創る10年後のカタチ
devsumi2012 17-D-1 Kinectで創る10年後のカタチKaoru NAKAMURA
 
【16-E-4】残業ゼロで開発スピードが10倍に!もう元の開発体制には戻れないデンソー流のアジャイル開発
【16-E-4】残業ゼロで開発スピードが10倍に!もう元の開発体制には戻れないデンソー流のアジャイル開発【16-E-4】残業ゼロで開発スピードが10倍に!もう元の開発体制には戻れないデンソー流のアジャイル開発
【16-E-4】残業ゼロで開発スピードが10倍に!もう元の開発体制には戻れないデンソー流のアジャイル開発Developers Summit
 
Jenkinsを使おうよ
Jenkinsを使おうよJenkinsを使おうよ
Jenkinsを使おうよYohei Oda
 

Similar to リアルタイムリモートデバッグ環境によるゲーム開発イテレーションの高速化【DeNA TechCon 2020 ライブ配信】 (20)

01 idea table3.0
01 idea table3.001 idea table3.0
01 idea table3.0
 
Windows 8 Developers カンファレンス
Windows 8 Developers カンファレンスWindows 8 Developers カンファレンス
Windows 8 Developers カンファレンス
 
3Dリッチコンテンツビジネス活用のご提案ver3.1
3Dリッチコンテンツビジネス活用のご提案ver3.13Dリッチコンテンツビジネス活用のご提案ver3.1
3Dリッチコンテンツビジネス活用のご提案ver3.1
 
3Dリッチコンテンツビジネス活用のご提案ver3.1
3Dリッチコンテンツビジネス活用のご提案ver3.13Dリッチコンテンツビジネス活用のご提案ver3.1
3Dリッチコンテンツビジネス活用のご提案ver3.1
 
01 idea table3.1(up)
01 idea table3.1(up)01 idea table3.1(up)
01 idea table3.1(up)
 
本の紹介
本の紹介本の紹介
本の紹介
 
情報理工Android勉強会第一回大将Part
情報理工Android勉強会第一回大将Part情報理工Android勉強会第一回大将Part
情報理工Android勉強会第一回大将Part
 
3Dリッチコンテンツビジネス活用のご提案ver3.1
3Dリッチコンテンツビジネス活用のご提案ver3.13Dリッチコンテンツビジネス活用のご提案ver3.1
3Dリッチコンテンツビジネス活用のご提案ver3.1
 
Unityティーチャートレーニングデイ -認定3Dアーティスト編-
Unityティーチャートレーニングデイ -認定3Dアーティスト編-Unityティーチャートレーニングデイ -認定3Dアーティスト編-
Unityティーチャートレーニングデイ -認定3Dアーティスト編-
 
2018/3/23 Introduction to Deep Learning by Neural Network Console
2018/3/23 Introduction to Deep Learning by Neural Network Console2018/3/23 Introduction to Deep Learning by Neural Network Console
2018/3/23 Introduction to Deep Learning by Neural Network Console
 
Webプログラマの為のUnity入門
Webプログラマの為のUnity入門Webプログラマの為のUnity入門
Webプログラマの為のUnity入門
 
Windows8のクライアントHyper-V入門(.NETラボ勉強会 2013/6/22 日本マイクロソフト)
Windows8のクライアントHyper-V入門(.NETラボ勉強会 2013/6/22 日本マイクロソフト)Windows8のクライアントHyper-V入門(.NETラボ勉強会 2013/6/22 日本マイクロソフト)
Windows8のクライアントHyper-V入門(.NETラボ勉強会 2013/6/22 日本マイクロソフト)
 
福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介
 
01 idea table3.2
01 idea table3.201 idea table3.2
01 idea table3.2
 
devsumi2012 17-D-1 Kinectで創る10年後のカタチ
devsumi2012 17-D-1 Kinectで創る10年後のカタチdevsumi2012 17-D-1 Kinectで創る10年後のカタチ
devsumi2012 17-D-1 Kinectで創る10年後のカタチ
 
Indigo Studio で作るプロトタイプ
Indigo Studio で作るプロトタイプIndigo Studio で作るプロトタイプ
Indigo Studio で作るプロトタイプ
 
【16-E-4】残業ゼロで開発スピードが10倍に!もう元の開発体制には戻れないデンソー流のアジャイル開発
【16-E-4】残業ゼロで開発スピードが10倍に!もう元の開発体制には戻れないデンソー流のアジャイル開発【16-E-4】残業ゼロで開発スピードが10倍に!もう元の開発体制には戻れないデンソー流のアジャイル開発
【16-E-4】残業ゼロで開発スピードが10倍に!もう元の開発体制には戻れないデンソー流のアジャイル開発
 
Developers Summit 2013【15-B-6】開発者の "資産形成" につながる Action とは?
Developers Summit 2013【15-B-6】開発者の "資産形成" につながる Action とは?Developers Summit 2013【15-B-6】開発者の "資産形成" につながる Action とは?
Developers Summit 2013【15-B-6】開発者の "資産形成" につながる Action とは?
 
Ldd13 present
Ldd13 presentLdd13 present
Ldd13 present
 
Jenkinsを使おうよ
Jenkinsを使おうよJenkinsを使おうよ
Jenkinsを使おうよ
 

More from DeNA

DRIVE CHARTの裏側 〜 AI ☓ IoT ☓ ビッグデータを 支えるアーキテクチャ 〜
DRIVE CHARTの裏側  〜 AI ☓ IoT ☓ ビッグデータを 支えるアーキテクチャ 〜DRIVE CHARTの裏側  〜 AI ☓ IoT ☓ ビッグデータを 支えるアーキテクチャ 〜
DRIVE CHARTの裏側 〜 AI ☓ IoT ☓ ビッグデータを 支えるアーキテクチャ 〜DeNA
 
IoTと業務システムをつなぐgRPC/RESTサービスの開発と運用
IoTと業務システムをつなぐgRPC/RESTサービスの開発と運用IoTと業務システムをつなぐgRPC/RESTサービスの開発と運用
IoTと業務システムをつなぐgRPC/RESTサービスの開発と運用DeNA
 
Can We Make Maps from Videos? ~From AI Algorithm to Engineering for Continuou...
Can We Make Maps from Videos? ~From AI Algorithm to Engineering for Continuou...Can We Make Maps from Videos? ~From AI Algorithm to Engineering for Continuou...
Can We Make Maps from Videos? ~From AI Algorithm to Engineering for Continuou...DeNA
 
SHOWROOMとDeNAで取り組んだライブ配信基盤刷新・超低遅延ライブ配信の裏側【DeNA TechCon 2020 ライブ配信】
SHOWROOMとDeNAで取り組んだライブ配信基盤刷新・超低遅延ライブ配信の裏側【DeNA TechCon 2020 ライブ配信】SHOWROOMとDeNAで取り組んだライブ配信基盤刷新・超低遅延ライブ配信の裏側【DeNA TechCon 2020 ライブ配信】
SHOWROOMとDeNAで取り組んだライブ配信基盤刷新・超低遅延ライブ配信の裏側【DeNA TechCon 2020 ライブ配信】DeNA
 
クラウド環境でのセキュリティ監査自動化【DeNA TechCon 2020 ライブ配信】
クラウド環境でのセキュリティ監査自動化【DeNA TechCon 2020 ライブ配信】クラウド環境でのセキュリティ監査自動化【DeNA TechCon 2020 ライブ配信】
クラウド環境でのセキュリティ監査自動化【DeNA TechCon 2020 ライブ配信】DeNA
 
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】DeNA
 
仕様起因の手戻りを減らして開発効率アップを目指すチャレンジ 【DeNA TechCon 2020 ライブ配信】
仕様起因の手戻りを減らして開発効率アップを目指すチャレンジ 【DeNA TechCon 2020 ライブ配信】仕様起因の手戻りを減らして開発効率アップを目指すチャレンジ 【DeNA TechCon 2020 ライブ配信】
仕様起因の手戻りを減らして開発効率アップを目指すチャレンジ 【DeNA TechCon 2020 ライブ配信】DeNA
 
DeNA データプラットフォームにおける 自由と統制のバランス【DeNA TechCon 2020 ライブ配信】
DeNA データプラットフォームにおける 自由と統制のバランス【DeNA TechCon 2020 ライブ配信】DeNA データプラットフォームにおける 自由と統制のバランス【DeNA TechCon 2020 ライブ配信】
DeNA データプラットフォームにおける 自由と統制のバランス【DeNA TechCon 2020 ライブ配信】DeNA
 
MOV の機械学習システムを支える MLOps 実践【DeNA TechCon 2020 ライブ配信】
MOV の機械学習システムを支える MLOps 実践【DeNA TechCon 2020 ライブ配信】MOV の機械学習システムを支える MLOps 実践【DeNA TechCon 2020 ライブ配信】
MOV の機械学習システムを支える MLOps 実践【DeNA TechCon 2020 ライブ配信】DeNA
 
コンピュータビジョン技術の実応用〜DRIVE CHARTにおける脇見・車間距離不足検知〜【DeNA TechCon 2020 ライブ配信】
コンピュータビジョン技術の実応用〜DRIVE CHARTにおける脇見・車間距離不足検知〜【DeNA TechCon 2020 ライブ配信】コンピュータビジョン技術の実応用〜DRIVE CHARTにおける脇見・車間距離不足検知〜【DeNA TechCon 2020 ライブ配信】
コンピュータビジョン技術の実応用〜DRIVE CHARTにおける脇見・車間距離不足検知〜【DeNA TechCon 2020 ライブ配信】DeNA
 
DeNA の Slack 導入と活用の事例紹介
DeNA の Slack 導入と活用の事例紹介DeNA の Slack 導入と活用の事例紹介
DeNA の Slack 導入と活用の事例紹介DeNA
 
タクシーxAIを支えるKubernetesとAIデータパイプラインの信頼性の取り組みについて [SRE NEXT 2020]
タクシーxAIを支えるKubernetesとAIデータパイプラインの信頼性の取り組みについて [SRE NEXT 2020]タクシーxAIを支えるKubernetesとAIデータパイプラインの信頼性の取り組みについて [SRE NEXT 2020]
タクシーxAIを支えるKubernetesとAIデータパイプラインの信頼性の取り組みについて [SRE NEXT 2020]DeNA
 
オートモーティブ領域における 位置情報関連アルゴリズムあれこれ
オートモーティブ領域における 位置情報関連アルゴリズムあれこれオートモーティブ領域における 位置情報関連アルゴリズムあれこれ
オートモーティブ領域における 位置情報関連アルゴリズムあれこれDeNA
 
後部座席タブレットにおけるMaaS時代を見据えた半歩先のUX設計」 [MOBILITY:dev]
後部座席タブレットにおけるMaaS時代を見据えた半歩先のUX設計」 [MOBILITY:dev]後部座席タブレットにおけるMaaS時代を見据えた半歩先のUX設計」 [MOBILITY:dev]
後部座席タブレットにおけるMaaS時代を見据えた半歩先のUX設計」 [MOBILITY:dev]DeNA
 
ドライブレコーダ映像からの3次元空間認識 [MOBILITY:dev]
ドライブレコーダ映像からの3次元空間認識 [MOBILITY:dev]ドライブレコーダ映像からの3次元空間認識 [MOBILITY:dev]
ドライブレコーダ映像からの3次元空間認識 [MOBILITY:dev]DeNA
 
MOVで実践したサーバーAPI実装の超最適化について [MOBILITY:dev]
MOVで実践したサーバーAPI実装の超最適化について [MOBILITY:dev]MOVで実践したサーバーAPI実装の超最適化について [MOBILITY:dev]
MOVで実践したサーバーAPI実装の超最適化について [MOBILITY:dev]DeNA
 
MOV お客さま探索ナビの GCP ML開発フローについて
MOV お客さま探索ナビの GCP ML開発フローについてMOV お客さま探索ナビの GCP ML開発フローについて
MOV お客さま探索ナビの GCP ML開発フローについてDeNA
 
課題ドリブン、フルスタックAI開発術 [MOBILITY:dev]
課題ドリブン、フルスタックAI開発術 [MOBILITY:dev]課題ドリブン、フルスタックAI開発術 [MOBILITY:dev]
課題ドリブン、フルスタックAI開発術 [MOBILITY:dev]DeNA
 
DeNA の AWS アカウント管理とセキュリティ監査自動化
DeNA の AWS アカウント管理とセキュリティ監査自動化DeNA の AWS アカウント管理とセキュリティ監査自動化
DeNA の AWS アカウント管理とセキュリティ監査自動化DeNA
 
DeNAのQCTマネジメント IaaS利用のベストプラクティス [AWS Summit Tokyo 2019]
DeNAのQCTマネジメント IaaS利用のベストプラクティス [AWS Summit Tokyo 2019]DeNAのQCTマネジメント IaaS利用のベストプラクティス [AWS Summit Tokyo 2019]
DeNAのQCTマネジメント IaaS利用のベストプラクティス [AWS Summit Tokyo 2019]DeNA
 

More from DeNA (20)

DRIVE CHARTの裏側 〜 AI ☓ IoT ☓ ビッグデータを 支えるアーキテクチャ 〜
DRIVE CHARTの裏側  〜 AI ☓ IoT ☓ ビッグデータを 支えるアーキテクチャ 〜DRIVE CHARTの裏側  〜 AI ☓ IoT ☓ ビッグデータを 支えるアーキテクチャ 〜
DRIVE CHARTの裏側 〜 AI ☓ IoT ☓ ビッグデータを 支えるアーキテクチャ 〜
 
IoTと業務システムをつなぐgRPC/RESTサービスの開発と運用
IoTと業務システムをつなぐgRPC/RESTサービスの開発と運用IoTと業務システムをつなぐgRPC/RESTサービスの開発と運用
IoTと業務システムをつなぐgRPC/RESTサービスの開発と運用
 
Can We Make Maps from Videos? ~From AI Algorithm to Engineering for Continuou...
Can We Make Maps from Videos? ~From AI Algorithm to Engineering for Continuou...Can We Make Maps from Videos? ~From AI Algorithm to Engineering for Continuou...
Can We Make Maps from Videos? ~From AI Algorithm to Engineering for Continuou...
 
SHOWROOMとDeNAで取り組んだライブ配信基盤刷新・超低遅延ライブ配信の裏側【DeNA TechCon 2020 ライブ配信】
SHOWROOMとDeNAで取り組んだライブ配信基盤刷新・超低遅延ライブ配信の裏側【DeNA TechCon 2020 ライブ配信】SHOWROOMとDeNAで取り組んだライブ配信基盤刷新・超低遅延ライブ配信の裏側【DeNA TechCon 2020 ライブ配信】
SHOWROOMとDeNAで取り組んだライブ配信基盤刷新・超低遅延ライブ配信の裏側【DeNA TechCon 2020 ライブ配信】
 
クラウド環境でのセキュリティ監査自動化【DeNA TechCon 2020 ライブ配信】
クラウド環境でのセキュリティ監査自動化【DeNA TechCon 2020 ライブ配信】クラウド環境でのセキュリティ監査自動化【DeNA TechCon 2020 ライブ配信】
クラウド環境でのセキュリティ監査自動化【DeNA TechCon 2020 ライブ配信】
 
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】
 
仕様起因の手戻りを減らして開発効率アップを目指すチャレンジ 【DeNA TechCon 2020 ライブ配信】
仕様起因の手戻りを減らして開発効率アップを目指すチャレンジ 【DeNA TechCon 2020 ライブ配信】仕様起因の手戻りを減らして開発効率アップを目指すチャレンジ 【DeNA TechCon 2020 ライブ配信】
仕様起因の手戻りを減らして開発効率アップを目指すチャレンジ 【DeNA TechCon 2020 ライブ配信】
 
DeNA データプラットフォームにおける 自由と統制のバランス【DeNA TechCon 2020 ライブ配信】
DeNA データプラットフォームにおける 自由と統制のバランス【DeNA TechCon 2020 ライブ配信】DeNA データプラットフォームにおける 自由と統制のバランス【DeNA TechCon 2020 ライブ配信】
DeNA データプラットフォームにおける 自由と統制のバランス【DeNA TechCon 2020 ライブ配信】
 
MOV の機械学習システムを支える MLOps 実践【DeNA TechCon 2020 ライブ配信】
MOV の機械学習システムを支える MLOps 実践【DeNA TechCon 2020 ライブ配信】MOV の機械学習システムを支える MLOps 実践【DeNA TechCon 2020 ライブ配信】
MOV の機械学習システムを支える MLOps 実践【DeNA TechCon 2020 ライブ配信】
 
コンピュータビジョン技術の実応用〜DRIVE CHARTにおける脇見・車間距離不足検知〜【DeNA TechCon 2020 ライブ配信】
コンピュータビジョン技術の実応用〜DRIVE CHARTにおける脇見・車間距離不足検知〜【DeNA TechCon 2020 ライブ配信】コンピュータビジョン技術の実応用〜DRIVE CHARTにおける脇見・車間距離不足検知〜【DeNA TechCon 2020 ライブ配信】
コンピュータビジョン技術の実応用〜DRIVE CHARTにおける脇見・車間距離不足検知〜【DeNA TechCon 2020 ライブ配信】
 
DeNA の Slack 導入と活用の事例紹介
DeNA の Slack 導入と活用の事例紹介DeNA の Slack 導入と活用の事例紹介
DeNA の Slack 導入と活用の事例紹介
 
タクシーxAIを支えるKubernetesとAIデータパイプラインの信頼性の取り組みについて [SRE NEXT 2020]
タクシーxAIを支えるKubernetesとAIデータパイプラインの信頼性の取り組みについて [SRE NEXT 2020]タクシーxAIを支えるKubernetesとAIデータパイプラインの信頼性の取り組みについて [SRE NEXT 2020]
タクシーxAIを支えるKubernetesとAIデータパイプラインの信頼性の取り組みについて [SRE NEXT 2020]
 
オートモーティブ領域における 位置情報関連アルゴリズムあれこれ
オートモーティブ領域における 位置情報関連アルゴリズムあれこれオートモーティブ領域における 位置情報関連アルゴリズムあれこれ
オートモーティブ領域における 位置情報関連アルゴリズムあれこれ
 
後部座席タブレットにおけるMaaS時代を見据えた半歩先のUX設計」 [MOBILITY:dev]
後部座席タブレットにおけるMaaS時代を見据えた半歩先のUX設計」 [MOBILITY:dev]後部座席タブレットにおけるMaaS時代を見据えた半歩先のUX設計」 [MOBILITY:dev]
後部座席タブレットにおけるMaaS時代を見据えた半歩先のUX設計」 [MOBILITY:dev]
 
ドライブレコーダ映像からの3次元空間認識 [MOBILITY:dev]
ドライブレコーダ映像からの3次元空間認識 [MOBILITY:dev]ドライブレコーダ映像からの3次元空間認識 [MOBILITY:dev]
ドライブレコーダ映像からの3次元空間認識 [MOBILITY:dev]
 
MOVで実践したサーバーAPI実装の超最適化について [MOBILITY:dev]
MOVで実践したサーバーAPI実装の超最適化について [MOBILITY:dev]MOVで実践したサーバーAPI実装の超最適化について [MOBILITY:dev]
MOVで実践したサーバーAPI実装の超最適化について [MOBILITY:dev]
 
MOV お客さま探索ナビの GCP ML開発フローについて
MOV お客さま探索ナビの GCP ML開発フローについてMOV お客さま探索ナビの GCP ML開発フローについて
MOV お客さま探索ナビの GCP ML開発フローについて
 
課題ドリブン、フルスタックAI開発術 [MOBILITY:dev]
課題ドリブン、フルスタックAI開発術 [MOBILITY:dev]課題ドリブン、フルスタックAI開発術 [MOBILITY:dev]
課題ドリブン、フルスタックAI開発術 [MOBILITY:dev]
 
DeNA の AWS アカウント管理とセキュリティ監査自動化
DeNA の AWS アカウント管理とセキュリティ監査自動化DeNA の AWS アカウント管理とセキュリティ監査自動化
DeNA の AWS アカウント管理とセキュリティ監査自動化
 
DeNAのQCTマネジメント IaaS利用のベストプラクティス [AWS Summit Tokyo 2019]
DeNAのQCTマネジメント IaaS利用のベストプラクティス [AWS Summit Tokyo 2019]DeNAのQCTマネジメント IaaS利用のベストプラクティス [AWS Summit Tokyo 2019]
DeNAのQCTマネジメント IaaS利用のベストプラクティス [AWS Summit Tokyo 2019]
 

Recently uploaded

オリジナルNFTを発行するブロックチェーン開発ハンズオン(NFTの発行に必要なツールから実装まで)
オリジナルNFTを発行するブロックチェーン開発ハンズオン(NFTの発行に必要なツールから実装まで)オリジナルNFTを発行するブロックチェーン開発ハンズオン(NFTの発行に必要なツールから実装まで)
オリジナルNFTを発行するブロックチェーン開発ハンズオン(NFTの発行に必要なツールから実装まで)Kanta Sasaki
 
20240222_Neko_IoTLT_vol9_kitazaki_v1.pdf
20240222_Neko_IoTLT_vol9_kitazaki_v1.pdf20240222_Neko_IoTLT_vol9_kitazaki_v1.pdf
20240222_Neko_IoTLT_vol9_kitazaki_v1.pdfAyachika Kitazaki
 
解説: Token Extensions - Solana Developer Hub Online #SolDevHub
解説: Token Extensions - Solana Developer Hub Online #SolDevHub解説: Token Extensions - Solana Developer Hub Online #SolDevHub
解説: Token Extensions - Solana Developer Hub Online #SolDevHubK Kinzal
 
AWS (Amazon Web Services) を勉強してみる おさらい 2024/02/16の勉強会で発表されたものです。
AWS (Amazon Web Services) を勉強してみる おさらい 2024/02/16の勉強会で発表されたものです。AWS (Amazon Web Services) を勉強してみる おさらい 2024/02/16の勉強会で発表されたものです。
AWS (Amazon Web Services) を勉強してみる おさらい 2024/02/16の勉強会で発表されたものです。iPride Co., Ltd.
 
scikit-learn以外の分類器でpipelineを作ってみた! いずみん
scikit-learn以外の分類器でpipelineを作ってみた! いずみんscikit-learn以外の分類器でpipelineを作ってみた! いずみん
scikit-learn以外の分類器でpipelineを作ってみた! いずみんtoshinori622
 
HarukiShinkawa_果樹農家が期待する行動への変容を促す仕掛け設計のための収穫作業体験者の行動観察とモデル化_仕掛学2024.pdf
HarukiShinkawa_果樹農家が期待する行動への変容を促す仕掛け設計のための収穫作業体験者の行動観察とモデル化_仕掛学2024.pdfHarukiShinkawa_果樹農家が期待する行動への変容を促す仕掛け設計のための収穫作業体験者の行動観察とモデル化_仕掛学2024.pdf
HarukiShinkawa_果樹農家が期待する行動への変容を促す仕掛け設計のための収穫作業体験者の行動観察とモデル化_仕掛学2024.pdfMatsushita Laboratory
 

Recently uploaded (6)

オリジナルNFTを発行するブロックチェーン開発ハンズオン(NFTの発行に必要なツールから実装まで)
オリジナルNFTを発行するブロックチェーン開発ハンズオン(NFTの発行に必要なツールから実装まで)オリジナルNFTを発行するブロックチェーン開発ハンズオン(NFTの発行に必要なツールから実装まで)
オリジナルNFTを発行するブロックチェーン開発ハンズオン(NFTの発行に必要なツールから実装まで)
 
20240222_Neko_IoTLT_vol9_kitazaki_v1.pdf
20240222_Neko_IoTLT_vol9_kitazaki_v1.pdf20240222_Neko_IoTLT_vol9_kitazaki_v1.pdf
20240222_Neko_IoTLT_vol9_kitazaki_v1.pdf
 
解説: Token Extensions - Solana Developer Hub Online #SolDevHub
解説: Token Extensions - Solana Developer Hub Online #SolDevHub解説: Token Extensions - Solana Developer Hub Online #SolDevHub
解説: Token Extensions - Solana Developer Hub Online #SolDevHub
 
AWS (Amazon Web Services) を勉強してみる おさらい 2024/02/16の勉強会で発表されたものです。
AWS (Amazon Web Services) を勉強してみる おさらい 2024/02/16の勉強会で発表されたものです。AWS (Amazon Web Services) を勉強してみる おさらい 2024/02/16の勉強会で発表されたものです。
AWS (Amazon Web Services) を勉強してみる おさらい 2024/02/16の勉強会で発表されたものです。
 
scikit-learn以外の分類器でpipelineを作ってみた! いずみん
scikit-learn以外の分類器でpipelineを作ってみた! いずみんscikit-learn以外の分類器でpipelineを作ってみた! いずみん
scikit-learn以外の分類器でpipelineを作ってみた! いずみん
 
HarukiShinkawa_果樹農家が期待する行動への変容を促す仕掛け設計のための収穫作業体験者の行動観察とモデル化_仕掛学2024.pdf
HarukiShinkawa_果樹農家が期待する行動への変容を促す仕掛け設計のための収穫作業体験者の行動観察とモデル化_仕掛学2024.pdfHarukiShinkawa_果樹農家が期待する行動への変容を促す仕掛け設計のための収穫作業体験者の行動観察とモデル化_仕掛学2024.pdf
HarukiShinkawa_果樹農家が期待する行動への変容を促す仕掛け設計のための収穫作業体験者の行動観察とモデル化_仕掛学2024.pdf
 

リアルタイムリモートデバッグ環境によるゲーム開発イテレーションの高速化【DeNA TechCon 2020 ライブ配信】

Editor's Notes

  1. こんにちは。本セッションでは、リアルタイムリモートデバッグ環境によるゲーム開発イテレーションの高速化、という題で発表させていただきます。よろしくお願いします。
  2. スピーカーの自己紹介です。大竹悠人といいます。 2013年からDeNAでゲームクライアントの基盤開発をメインに、横断的な仕事をしています。
  3. 今回は、Unityのモバイルゲームを対象として、 ゲーム開発における実機デバッグツールの必要性と、実現したデバッグツールについてお話するのですが、 特に、デバッグツールを作るための障壁とその解決策についてを重点的に話させていただきます。
  4. スライドは速やかに公開する予定になっています。詳細についてはそちらでじっくりご確認いただけますので、 この時間ではDeNAが実機デバッグツールという領域に対して、 どのような問題を見いだし、 どのような課題を設定し、 どのような技術選択・アーキテクチャでそれを解決したのか、 という方法論の部分を持ち帰って頂ければと思っています。
  5. こちらがアジェンダになります。 背景として、まず実機デバッグツールによって目指すゴールについて話していきます。
  6. 実機デバッグの前にそもそもUnityにはEditorでのプレビュー機能があります。 確認の速さで言えばこれが最速ですが、実機でしか確認できないことも多いです。 これらは日頃から十分に確認できていないと、大抵の場合つらいタイミングで表面化したり、そのまま見過ごされて障害につながっていきます。
  7. ですが、実機での確認は辛いです。 アセット一つ変えるにもAssetBundleのビルドを待って、さらにダウンロードも行わなければなりませんし、 プレイヤービルドも遅いです。望む状況のプレイヤーデータを作るだけでも、煩雑な操作を迫られます。 自由が効くEditorでのプレビューとは、かなり隔絶した速度感での開発をいつも強いられることになります。 このような環境下で確認を頻繁に行うのは、かなり辛いものがあります。
  8. ですので、Editor Previewで出来るような速度感の確認を、実機でも出来るような環境を、ゴールとして目指す必要があります。 いきなりですが、先に具体的なデバッグツールのデモからお見せしようかと思います。
  9. お見せするのは、Unity Editorで編集中のSceneを実機でほぼリアルタイムに確認するツールのデモです。 いわゆるSceneのホットリロードです。 専用のSceneを実機ビルドに含めて起動しておくことで、 UnityEditor上でショートカットを実行するだけでその場で実機に反映されます。
  10. 左がUnity Editorの画面、右が実機の画面になります。 まずEditorでPlaneを作って、カメラに床として映るように配置します。 配置したところでUnity Editorからホットリロードを行うと、実機側にも同様に床が写ります。 次に、UnityちゃんのPrefabを床に乗るようにシーンに配置します。 ここでまたホットリロードを行うと、Unityちゃんが実機にも表示されます。 このUnityちゃんには操作用のコンポーネントがついているので、実機ですぐに操作することができます。
  11. いきなりデモをお見せしたわけですが、今回話していくのはこのようなデバッグツールを積極的に作れる環境作りに関してが主になります。 全ての問題を解決できる都合のよいツールはありません。 解決の仕方を間違えると、異なる形で問題を再生産するだけになりがちです。 ツールを積極的に、容易に、誰もが作れる環境を作ることで、純粋に問題に向き合いやすい状況にしていく必要があります。
  12. ただ、全てを解決できなくても、問題解決の手段となるツールを実装しておくことで、各々の課題解決を楽にすることができます。 これには実装環境自体のモデルケースとしての意味もあります。
  13. ここまでで、実機デバッグの重要性について、背景を話してきました。 では、実機デバッグツールの実現を具体的に阻害している要因は何なのでしょうか。次に、その要因を分析していきます
  14. この章では、実機デバッグツールにまつわる周辺環境から問題を分析し、解決するべき課題を設定するまでを説明します。
  15. まず第一に、デバッグ用の通信経路の不安定性が挙げられます。 サーバーを用意するようなフローでは、個人ごとの環境の分離や接続先管理の煩雑さが課題になります。 できれば、開発用PCと実機の間に直接な通信経路を用意できると、速度の面でも利便性の面でも非常に都合が良いです。
  16. 実機との通信経路を確保しようとすると、現実的な選択肢として、USBでの接続と, WiFiでの無線を経由したTCP/IPでの接続の2パターンがあります。 有線は利便性は高いのですが、制約が多く、プラットフォーム依存も激しいです。 無線では制約やプラットフォーム依存が少ない一方、実装も煩雑で利便性も低いです。
  17. 有線接続時の接続時に使えるツールとしては、Android用のadbとiOS用のlibimobiledeviceがあります。
  18. これらを使うと、ファイルシステムへのアクセスやシステムログの表示、TCPポートフォワードが可能になりますが、 これらは直接ゲームに介入するようなツールではありません。
  19. また、問題として実機のOS毎にツールを呼び分けるのは面倒ですし、出来ることに差異や制約が多いです。
  20. 無線でTCP/IPを用いる場合には、IPアドレスを調べないと使えなかったり、通信環境への依存が激しかったり、そもそもTCP/IPを喋るツールを万人が書くのはコストがかかりすぎるという問題があります。
  21. このように、双方様々な問題がありますが、全て解決していいとこ取りが出来る環境を今回は目指しました。
  22. ですので、問題をひっくり返したこれらが今回実現する環境の要件になります。
  23. 次に、この要件を具体的に実現する環境について順番に説明していきます
  24. 実機デバッグツールの実現を容易にする環境を作るための方針として、3つの決定をしました。 まず、経路としては物理的接続の安定性と論理的接続のポータビリティを両立させるために、有線接続でTCP/IPを利用すること。 次に、ツールをクロスプラットフォームで、おまけにゼロコンフィギュレーション運用できる形で提供すること。 最後に、デバッグツール製作のコスト削減の為にRPCフレームワークを整備することです。
  25. 実機デバッグツールを実現する環境の構築のために、devwireという名前のプロダクトを作りました。 主な役割は有線接続時とTCP/IPを組み合わせた際に生じる問題を解決することにあります。 また、RPCによるデバッグツール実装の為のヘルパーの役割も持っています。
  26. 有線接続でTCPを使う場合、実機がサーバーになる場合とPCがサーバーになる場合の二通りがあります。 基本的になにかアクションを行う主体がサーバーになり、依頼する側がクライアントにならないと、ツールの構造は非常に煩雑になってしまうので、 これらを適切に使い分けられる必要があります。
  27. 実機がサーバーになる場合は、各OSのデファクトのツールが利用できます。 これらを呼び分けるだけでクロスプラットフォーム化は果たす事ができます。
  28. これを実現するプロダクトとして、devwire.forwardを作りました。 具体的な処理は各ツールに移譲していて、スーパーバイザとして振る舞う単純なものですが、 devwireが規定するポートを利用する上であれば、単に起動するだけで利用できるようになっています。
  29. これを利用した時の通信はこのようになります。実機側でListenしているポートをPC側のポートにフォワードして、そこを接続先とすることで実機上のデバッグツールのサーバーに対してPCから通信を行えます
  30. PCがサーバーになる場合はどうでしょう。 この場合は、少々問題があります。Androidであれば問題ないのですが、iOSでは実機側からPC側でlistenしているポートにフォワードすることができません。 このため、プラットフォームに依らずにリバースポートフォワードを行うライブラリを実装することにしました。
  31. これを行うのが、devwire.gatewayです。devwire.gatewayはサーバーとクライアントの2つで構成され、 クライアントが踏み台になり、サーバーがその利用側になるという形のTCP over TCP Gatewayになっています。 これを利用して、実機をサーバーに、PC側をクライアントにすることで、実機側からPC側への通信が可能になります。 このdevwire.gateway自体の通信はdevwire.forwardでポートフォワードをする前提にしています。 ポートの組み合わせは複数登録でき、コネクションも複数張れるので、gRPCに限らずTCPであれば何でも利用できます。
  32. これを利用したときの通信はこのようになります。 実機で実行するサーバーでは、予めローカルのポートと、フォワード先のホストとポートの3つをセットにして登録します。 サーバー側にクライアントから接続されると、予めサーバー側で宣言したPort Z, YのListenが開始されます。 このポートに接続があると、サーバーはクライアントに対してフォワード先の設定に従って接続を行うように要求します。 クライアントはこの接続先に対して接続し、内部的なコネクションIDを発行します。 以後、クライアントとサーバーは端末側のPort Z, Yがそれぞれのフォワード先のポートと同様に振る舞うようにデータを全て中継します。
  33. devwire.gatewayの利点は、まず利用範囲の広さがあります。 フォワード先のホストがVMやdockerであってもフォワードすることも可能で、 片方向のポートフォワードができる状況下であれば両方向のポートフォワードを実現できます。 また、Unity以外での利用も視野に入れて作っているので、動作するOSやプラットフォームを選びません。 利便性の面でも、実機側でフォワード先を指定しておくことができるので、PC側で都度接続先の指定が必要ありません。 また、ソフトウェア実装なので、ポートフォワードが成立している状態なのかをゲーム側からAPI確認することができます。
  34. devwire.gatewayはまずPure C#で概念実証版をクイックに実装してから、C++17に移植する形をとりました。 C++17で本実装したのは、Unity以外のゲームエンジンでも利用できるようにするためです。 一見二度手間ですが、C++で実装した後の手戻りをかなり下げることが出来ました。 本実装版は、C++17でコアを実装した上で、FFI層を作ってネイティブプラグイン化して、実機用のライブラリとPC用のコマンドラインツールのフロントエンドをC#で実装するという形をとっています。 コア部分はlibuvを使ったシングルスレッドモデルで、flatbuffersをバイナリプロトコルとして利用しています。
  35. ここまでで、有線でTCP/IPを使うための下地は整いました。 しかし、devwireの利用シチュエーションを考えると、どの場合でもポート番号が被らないように運用す必要があります。 このため、ポート番号の解決やgRPCサービスの管理をライブラリ化し、サーバーの種別や実行環境,独自採番の番号を与えるとポート番号を解決できるようにして、利用者やツール実装者がポート番号を直接意識しないで済むようにしています。
  36. 有線でのTCP/IPの利用自体に問題がなくなっても、デバッグツール製作の敷居の高さの問題は残っています。 あとはこれを解決する必要があります。
  37. TCP/IPでのデバッグツール製作が難しいのは、異常系の扱いやプロトコル設計が煩雑で、 プロトコルの不整合による問題も起こりがちでかつ原因究明のコストが高いことにあります。 デバッグツール用途であれば、任意の処理をリモートで呼び出せれば事足りるので、RPCフレームワークの導入が解決になります。
  38. ですが、デバッグツールにはインターフェースが静的なデバッグツールと、動的なデバッグツールの2つに分けることができると思います。 前者はゲームそのものに依存しないデバッグツールが主で、例としては、ファイル転送を始めとした、ゲーム開発に共通する軸で開発を手助けするものが上げられます。 後者はゲームそのものに依存するデバッグツールが主で、例としては、デバッグメニューから呼び出すような処理が挙げられます。 これらの2つの種類のデバッグツールに、それぞれ適切なRPCフレームワークを用意する必要があります。
  39. まず、インターフェースが静的なデバッグツール向けのRPCについてです。
  40. 要求としては、3点あります。 まず、呼び出し側の実装言語に制約を設けないポータビリティがあること。 これはゲームに依存しない汎用デバッグツールは、呼び出し元が人間ではなく、別のツールであることも多いからです。 次に後方互換性のあり、自由度の高い型定義が可能なこと。 後方互換性が担保されていないと、ツール間の依存が激しくなってしまいますし、複雑な構造を受け渡せないとRPCのための実装コストがかさんでしまいます。 最後に、実機をサーバーとして動作すること”も”できること。 これは、処理を行ったり、情報を送る主体がサーバーにならないと、その制御が非常に複雑になり、実装コストとなってしまうためです。
  41. これらを満たす選択肢として、gRPCを選定しました。
  42. gRPCはRPCフレームワークとしては業界標準ですし、今回求めていた要求もこのようにすべてクリアしていました。
  43. 次に、インターフェースが動的なデバッグツール向けのRPCはどうでしょうか。
  44. 要求は以下の3点です。 実装によってインターフェースが定まること。 これは処理を記述するのがゲーム開発チーム側のエンジニアになるので、実行させたい処理以外に考えるべきことは極力少なくなっている必要があります。 次に、実行できるタイミングが動的に定まること。 これは、それぞれの処理を受け付けられる画面が限定的であることが多いためです。 最後に、フロントエンドは自動的に定まること。 フロントエンドをゲーム開発チームのエンジニアに処理ごとに書かせるわけにはいきません。 なので、これも実装から定まる必要があります。
  45. これらの要求に対して、gRPCでは答えることができません。 先程は利点であったことが、逆に働いてしまいます。
  46. ですので、この領域に対しては、これらを満たすRPC機構を独自に作ることにしました。 IDLを使わず、本質的に動的にメソッド定義のできるRPC機構を作り、 Webの技術でデバッグメニューとしての汎用フロントエンドを作ることで、実機内でもPCでも閲覧可能なデバッグメニューを実現する、というのを目標としました。
  47. このために作ったのが、Retweakです。 RPCはHTTPサーバー機能とJSON SchemaベースのRPCによって実現しています。 引数や戻り値の型情報から、JSON Schemaを自動生成しています。 フロントエンドはvue.jsを使ったSingle page applicationとして実装しています。 RPCから得られたJSON Schemaを元にUIを自動生成することで、個別のフロントエンド実装を不要にしています。
  48. Retweakのデモをお見せします。 左がWebブラウザの画面で、右が実機の画面です。実機とはdevwire.forwardを使って接続しています 寿司増加というメニューを開いてスライドバーをいじると、実機上の寿司のパーティクルの量が増えていきます。 寿司回転をいじると、寿司が回転していきます。 このように、ブラウザをデバッグメニューとして使うことができます。
  49. WebView上でもこのデバッグメニューは表示可能です。 単に、WebViewで同じURLを開くだけで実現できます。
  50. Retweakは、TweakとCallableという2つの大きな概念を軸に設計しています。 Tweakは1つのデバッグ項目を構成する単位で、表示に使われる仮想パスやメタ情報と、Callabeというものをその名前とセットで複数保持します。 CallableはRetweakにおけるRPCの最小単位です。 引数をJSONで与えると、返り値をJSONを返す関数のように振る舞います。 引数や戻り値のJSON Schemaと、元の関数に対応するシリアライザ、そして元の関数の実体で構成されます。
  51. Callableに使うJSON Schemaは関数の実体からリフレクションでMethodInfoを得て、仮引数名と型情報から動的に生成されます。 シリアライザやデシリアライザも同様に動的に生成されます。
  52. 作られたCallableを呼び出す際には、引数をデシリアライズして、関数を呼びだし、返り値をシリアライズするという処理が内部で透過的に行われます。
  53. Tweakは複数のCallableを保持できますが、主だったところでは値を扱うTweakの実現に利用されています。 WebUIからgetterのCallabeを呼び出して初期値を取得してUIに反映し、 UI上で操作した結果をsetterを呼び出すことでゲームに反映しています。
  54. UIはJSON Schemaから生成されます。 TweakがもつCallableから引数のJSON Schemaを取得し、その内容を元にフォームを自動生成しています。
  55. Tweakにはいくつか種類があります。 Commandは任意の処理を呼び出したいだけの場合に、 InspectやModifyは値を読み書きしたい場合に、 SliderやToggleやImageは、それぞれ最適化された汎用UIを伴う値を扱い場合に利用します。 Tweakの定義は、新規に追加することも容易にできるようになっています。
  56. 生成されるUIの一例です。 単純な型から、Dictionaryなどを含む複雑な型まで幅広く扱えます。
  57. 画像やバイナリも扱えるので、端末のスクリーンショットをとって保存することもできます。
  58. フロントエンドはこのような構成で、タイトル側で拡張することも可能にするべく、エンジニアのみでもそれなりのUIを作れるようにしました。 JSON Schemaからのフォームの自動生成はjson-editorというライブラリを用いています。かなり多彩な構造を扱うことができます。
  59. また、フロントエンドではFirebaseも利用しています。 現状ではアクセス解析を埋め込んで、デバッグメニューの使用率統計を算出できるようにしています。
  60. HTTPサーバーのホスティングは、.NET FrameworkのHttpListenerクラスを利用しています。 これだけではAPIを伴うSPAを構築するには不十分なので、簡易的なルーティングとリクエストハンドラ機構を実装しています。 設定の流しこみなどもAPI経由で行い、SPAの静的コンテンツは扱いやすいように1つのzipファイルの中身を直接HTTP上にマウントできるようにしています。
  61. デモを実現している実コードも掲載したので、気になる方は資料を後ほどご確認ください。
  62. Retweakに利用によって、様々なメリットが得られます。 まず、PCからも実機からも同じデバッグメニューを活用でき、同時にそれぞれの利点を活かすことができます。 UIの実装にuGUIでなくWebのフロントエンド資産を活用できるため、UXの向上が非常に低コストで出来るようになりますし、 フロントエンドのカスタマイズも柔軟に行えます。
  63. ここまでで、 有線接続でゲームとツールが自由に通信に行える環境をdevwire.forwardとdevwire.gatewayで構築し、 静的なデバッグツールの構築手段としてgRPCを、 動的なデバッグツールの構築手段としてRetweakを用意しました。
  64. これにより、実機デバッグツールを実現する環境を構築することができました。 続けて、汎用的に使えるデバッグツールを、少し具体的な問題に切り込んで実装していきます。
  65. まず、仮想ファイルシステムとデバイス間ファイル転送についてです。
  66. 実機でのイテレーションを高めようと思った時に大きな課題になるのは、モバイルゲームのダウンロードコンテンツの多さです 巨大なファイルを毎回アップロードするのも手間ですし、作業者ごとの環境の分離も煩雑です。 これは、実機にアセットをファイルとして直接転送できれば、非常に汎化した解決が可能になります。
  67. 既存システムでファイル転送を行おうとすると、adbなどを使って転送することになります。 この場合、アクセスできるディレクトリが限られたり、 プラットフォーム毎のツールや指定するパスの使い分けが非常に煩雑になります。
  68. これらの課題は、もちろんdevwireの利用を前提とした上で、 アクセス範囲の制限回避をアプリと同じプロセス内のサービスとすることで回避し、 パス表記の問題はベースディレクトリを独自に抽象化して、仮想ファイルシステム化することで解決することにしました。
  69. そうして作ったのが、vfsです。 vfsはファイルシステムの仮想化を実現し、それを生かしてファイルシステムのネットワーク共有を可能にします。 ネットワーク共有を可能にした上で、それを生かしてファイル転送を実現しています。
  70. 仮想ファイルシステムは、大きく分けてContainer、ResourcePath, Routerの3つで実現しています。 Containerはあるベースディレクトリ以下のファイルシステムを抽象化し、 ResourcePathがContainer以下のファイルのパスを具体的に示します。 ContainerはRouterに登録されることでシステムに認識され、ゲーム側は名前に応じたContainerをRouterから利用します。
  71. Containerは特定のディレクトリパスを基準パスとして持ちますが、実際のパスはインターフェースには現れません。 vfsの中では、全てResourcePathを使って解決します。
  72. ResourcePathはこのように、決定性の高い形で正規化されます。 パスの扱いというのはOSによって大小さまざまな差があります。必ず正規化するようにすることで、この差による実装の複雑化や問題を最小化することができます。
  73. これを活かすことで、コンテナの実際の基準パスを外部から隠蔽することができます。 assetsとbannerのコンテナは全く違うベースパスを持っていますし、プラットフォーム毎にパスは異なりますが、 外部からはContainer名とResourcePathだけでファイルを特定することができます。
  74. この仮想化されたファイルシステムであるContainerをgRPC経由で公開することで、ファイル共有を可能にします。 仮想化されたファイルシステムを生かして、ネットワークの向こう側のRouterやContainerを透過的に扱えるインターフェースを用意しています。 これによって、リモートのファイルシステムのマウントを可能にしています
  75. 実際の利用はこのようなイメージです。 これはPC上のファイルシステムを端末にマウントする例になります。 ゲーム側はRemoteContainerを経由してファイルアクセスを行いますが、RemoteContainerはgRPCを経由して、PC側で公開されているContainerからファイルをオンデマンドに取得して、端末内にそのContainerがあるかのように振る舞います。 端末側のローカルファイルシステムのコンテナをPC側に公開することで、PCからのファイル転送を行うことも出来ます。
  76. ネットワーク上で共有されるファイルには、URIにあたるものとしてVFRLというフォーマットを定義しています。 これによって、任意のホストの任意のコンテナの任意のファイルを識別することができます。
  77. VFSではファイル転送に用いるコマンドライン版のフロントエンドを用意していて、その中でもVFRLは利用されています。 転送先や転送元のパスとして、VFRLを指定することができます。 全てはコンテナ間の操作として実現しているので、異なる端末間でのファイルコピーなども可能です。 また、コマンドラインからVFSサーバーを立ち上げることもできるようになっています。
  78. VFSの開発にあたって、非Unityのタイトルでも要望があったため、ネイティブ版のvfsも別途実装しました。 こちらは工数圧縮と技術検証を兼ねて、golangで実装を行い、cgoでC++向けのインターフェースを定義してモバイルOS向けにクロスコンパイルしました。 結果としては、デバッグツール実装目的なら少なくとも十分利用可能でした。 grpc-goはpure goで実装されているため、Android, iOSでも全く問題なく動作します。 既存のゲーム側の依存関係に影響されずにgRPCベースのツールを導入できる、というメリットもありました。
  79. このように、VFSによって、相手を選ばす、マウントも転送も可能で柔軟な実機ファイル転送機構を実現できました。
  80. 次に、UnityでのScene Hot Reload機構の事例について話します。
  81. Unity Editorで編集中のSceneを実機ですぐに確認したい、根源的な欲求です。 AssetBundle化してあればファイル転送によって比較的楽に実現できますが、 そうでない状況下でも概ね使えるソリューションを用意したい、という動機で実装しました。
  82. Sceneの実機への汎用的な転送は、その場で一時的なAssetBundleを作って送り込めば実現できます。 Editor側でのアクションに応じてそれを行い、実機側のホットリロードサーバーにAssetBundleを送り込むという形でこれを実現しました。
  83. Sceneのビルドは、SBPを使っています。 コードの変更はどのみちSceneの転送では反映できないので、スクリプトコンパイルの回避によってかなりの高速化が可能になります。 1つのAssetBundleに入れられるSceneは1つだけなので、開いているSceneを全て個別にビルドします。 Sceneから依存しているアセットも全てそれらのAssetBundleに含ませています。
  84. 転送はdevwireを前提として、gRPCで行います。全てのバイナリと、ActiveなSceneの名前を送ります。
  85. あとは、実機は受け取ったAssetBundleを使って、適宜Sceneを読み替えてホットリロードを行うだけで完了です。
  86. これにより、汎用的なホットリロード環境を実現できました。 Sceneの初期化処理を個別に考慮しているわけではないので、その辺の考慮は必要ですし、AssetBundle化が進んだ後は確認の精度ももちろん下がります。 ですが、これらを行っている場合は単にファイル転送で同じことが可能になるので、 あくまで少ない準備で、表面的な動きだけでも気軽に実機の挙動を確認できる手段として対象を絞っています。
  87. これで汎用的なデバッグツールの実現について、一通りの説明を終えました。
  88. 最後に、今回の発表をまとめます。
  89. 今回達成したことで、課題解決の道具は十分に整えることができたと言えます。 デバッグツールの実装環境を整え、汎用的に使えるデバッグツールを実現してその利用の実例も示すことができました。 Editor Previewと同等とまでは行きませんが、その距離を近づけることには成功したかと思っています。
  90. これからの展望としては、 まだ採用タイトルは少ないので、実タイトルでの利用実績をより積み上げて需要をもっと吸い上げていきます。 その上で汎用的なデバッグツールも適宜拡充して、タイトルチームがやるべきことにより向かえる環境を作り上げていきます。 技術的なところでは、Blazorの活用がインハウスツールやデバッグツールの実現手段としてメリットがありそうなので、検討を進めていきます。
  91. 以上で終わります。ご清聴、ありがとうございました。