Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PCにあるアセットを 実機からホットリロードする
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
DeNA_Tech
October 15, 2020
Technology
1
1.5k
PCにあるアセットを 実機からホットリロードする
開発PC上のアセットをAssetBundleとして実機からホットリロードすることで
開発イテレーションの高速化する手法についてご紹介します。
DeNA_Tech
October 15, 2020
Tweet
Share
More Decks by DeNA_Tech
See All by DeNA_Tech
学びが形になる!〜DeNAで6年間プロダクト開発に携わって学んだこと〜
dena_tech
7
1.5k
ペタバイト、30プロダクトを超えて成長を続けるデータ基盤の歴史
dena_tech
5
870
DeNAデータエンジニアの組織・データエンジニアキャリアについて
dena_tech
6
2.2k
Pocochaにおけるデータマネジメント
dena_tech
3
1.3k
社内データ利活用の推進と技術的負債の解決に向けた取り組み
dena_tech
5
500
Google Cloud を使ったデータプラットフォームへの変革と 最新の活用状況について
dena_tech
6
420
DeNA SWETでのインターンシップについて【DeNA TechCon 2023】
dena_tech
0
680
T系EC2インスタンスのクレジットが回復しないので困った話【DeNA TechCon 2023】
dena_tech
4
990
画像サーバーを紆余曲折あってS3 に移行した話【DeNA TechCon 2023】
dena_tech
0
760
Other Decks in Technology
See All in Technology
なぜarray_firstとarray_lastは採用、 array_value_firstとarray_value_lastは 見送りだったか / Why array_value_first and array_value_last was declined, then why array_first and array_last was accpeted?
cocoeyes02
0
280
Oracle Cloud Infrastructure(OCI):Onboarding Session(はじめてのOCI/Oracle Supportご利⽤ガイド)
oracle4engineer
PRO
2
17k
昔話で振り返るAWSの歩み ~S3誕生から20年、クラウドはどう進化したのか~
nrinetcom
PRO
0
120
CloudFrontのHost Header転送設定でパケットの中身はどう変わるのか?
nagisa53
1
220
「お金で解決」が全てではない!大規模WebアプリのCI高速化 #phperkaigi
stefafafan
5
2.4k
開発チームとQAエンジニアの新しい協業モデル -年末調整開発チームで実践する【QAリード施策】-
qa
0
400
AWS Systems Managerのハイブリッドアクティベーションを使用したガバメントクラウド環境の統合管理
toru_kubota
1
190
パワポ作るマンをMCP Apps化してみた
iwamot
PRO
0
230
Kiro Meetup #7 Kiro アップデート (2025/12/15〜2026/3/20)
katzueno
2
270
ブラックボックス化したMLシステムのVertex AI移行 / mlops_community_62
visional_engineering_and_design
1
230
イベントで大活躍する電子ペーパー名札を作る(その2) 〜 M5PaperとM5PaperS3 〜 / IoTLT @ JLCPCB オープンハードカンファレンス
you
PRO
0
210
QA組織のAI戦略とAIテスト設計システムAITASの実践
sansantech
PRO
1
250
Featured
See All Featured
Music & Morning Musume
bryan
47
7.1k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
260
Building Adaptive Systems
keathley
44
3k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
320
The Curious Case for Waylosing
cassininazir
0
280
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.1k
Leo the Paperboy
mayatellez
5
1.6k
Darren the Foodie - Storyboard
khoart
PRO
3
3.1k
Scaling GitHub
holman
464
140k
The Curse of the Amulet
leimatthew05
1
11k
Done Done
chrislema
186
16k
エンジニアに許された特別な時間の終わり
watany
106
240k
Transcript
PCにあるアセットを 実機からホットリロードする 矢野 春樹, 大竹 悠人 ゲーム・エンターテインメント事業本部ゲーム事業部ディベロップメント統括部技術部第八グループ 株式会社ディー・エヌ・エー
自己紹介 2 • 矢野春樹 • 経歴 • 2012~2020.2 CyberAgent •
2020.3~ DeNA • Unity用の内製フレームワークでリソース管理の仕組みを担当
自己紹介 3 • 大竹 悠人 (Haruto Otake) • 経歴 •
2009~2013 dwango • 2013~ DeNA • 現在は主にUnity向けの内製ライブラリやSDK開発に従事 • 内製フレームワークから使われる、低レイヤのライブラリを開発
目次 4 DeNAのリソース管理の概要 構成技術について AssetBundleホットリロードの仕組みとデモ 1 2 3 まとめ 4
DeNAのリソース管理基盤 5 リソースマネジメント機能を提供 リソースのビルド、ロード、ダウンロードの機能を一通り担う(開発中) 依存関係を踏まえたロードや参照カウンタによるメモリ管理といった基本的な機能に加えて 高速なビルドや効率的なバージョン管理などの特徴を持つ 複数の内製ライブラリを組み合わせてタイトル側が使いやすいようにフレームワーク化したもの Unity用の内製フレームワークの一機能 Unity用の内製フレームワークの一部として提供 今後開発するUnity製タイトルで共通基盤として使用する
リソース管理基盤の特徴 6 高速な差分ビルド gitの差分をベースとした差分ビルドにより高速なビルドを実現 一意のキーによるロード アセットバンドル名とアセット名ではなく、一意のキーを指定してアセットをロード 効率的なバージョン管理 バージョン毎のリソースを効率的に特定して管理できる仕組み 暗号化 暗号化する対象をリソース毎に指定して高速な暗号化
PCからのリソースのロード デバッグ時にPC上にあるリソースを実機からロードできる
リソース管理基盤を実現する内製ライブラリ 7 Aladin 空間効率に優れたダウンロードリソースのリビジョン管理 & 暗号化 AssetFetcher HTTP/2によるリソースの高速ダウンロード Abdool 高速なインクリメンタル
AssetBundleビルド & ロード VFS リモートホストをマウント可能な仮想ファイルシステム devwire USB接続されたデバイスとの TCP/IPでの通信経路となるプロキシ
Aladin • 空間効率に優れたダウンロードリソースのリビジョン管理 & 暗号化 • Git風のハッシュ値ベースのリビジョン管理 • リビジョン同士を比較して、差分となるリソースを算出 •
ダウンロード済みリソースのロードと管理 • 透過的なリソース暗号化と鍵管理 • AssetBundle自体は取り扱わず、単純なファイルアクセス手段の提供を行う • AssetBundleのLoadFromFile/LoadFromStreamとの親和性は高いAPIを用意 8
Aladinのファイル構造 • リソースはその中身のハッシュをファイル名にし、Blobとして保持する • Blobと読み出しキーとなるAddressの紐付け情報は、Indexとして保持する • Indexもシリアライズ後の中身のハッシュをファイル名とし、これをリビジョン名とする 9
Aladinのファイル構造 • 更新がかかっても、変化のないリソースは以前のBlobをそのまま利用する • 新たなBlobへの参照を含むIndexが生成される 10
Aladinによるリソース暗号化 • Aladinはシーク可能なストリーム暗号を適用でき、ストリームとして読み出しが可能 • AssetBundleにも適用可能 • メモリ消費をキャッシュ用バッファのみに節約できる • 複数の鍵の運用をサポート •
事前にリソースをダウンロードしても、鍵を公開するまで内容を秘匿できる • 高速な暗号化 • セクタ単位のバッファリング + unsafe実装による最適化 • 実タイトルでの利用時に暗号化によるAssetBundleロード時間の悪化がほぼない • Index/Blobの生成はPLINQで並列化 11
Aladinのファイル構造の利点 • 異なるリビジョンのリソースを同時に、効率的に保持できる • リビジョン間で共通するリソースは重複しない • リソース管理が効率的に行える • ファイルの上書きが発生しないため、ファイルのバージョン確認が不要 •
ファイルの存在確認のみでダウンロードすべきファイルを特定できる 12
AssetFetcher • クロスプラットフォームなダウンロード管理モジュール • 指定したURLにあるリソースを指定したファイルとして保存するというタスクをまとめて行う • libcurlを利用してHTTP/2に対応 • HTTP/2では小さなファイルの大量にダウンロードも高速に行える •
Aladinと非常に相性が良い • アーカイブ化をしないのでファイル数が多くなるが、ダウンロード速度を維持できる • AssetFetcherが行わないダウンロード状態の管理をAladinが効率的に受け持てる 13
Abdool • 高速なインクリメンタルAssetBundleビルド & ロード • インクリメンタルAssetBundleビルド • Scriptable Build
Pipelineを利用したカスタムビルドパイプライン • Gitの履歴とアセット依存関係をみて必要なビルド範囲を決定してからビルド • AssetBundleの構成をどのようにするか利用側に委ねる • 構成をどうするかはタイトル毎の事情も大きいため、ここを分岐点に • AssetBundleロード • Addressable Assets SystemのResourceManagerを利用 • 参照カウントによる透過的なUnload管理 • Aladinを経由した暗号化AssetBundleロード • メモリフットプリントが小さい 14
Aladin + AssetFetcher + Abdool 15
VFS • リモートホストをマウント可能な仮想ファイルシステ ム • ファイルシステムの仮想化・抽象化 • ディレクトリごとコンテナとして扱う • コンテナへの操作はAPIとして抽象化
• 常にルートからの相対パスでアクセス 16
VFSによるリモート共有機能 • gRPC経由でのリモート共有機能 • 任意のコンテナを外部共有できるサーバ • 共有されている任意のコンテナをマウントできるクライアント • リモートのコンテナもローカルのコンテナも透過的に扱える •
AladinでのファイルアクセスをVfs経由で行えるアダプタも 17
devwire • 開発PCとスマートフォン実機間でTCP/IP通信を行うプロキシ • USB接続を安定して高速な通信経路として利用(adb/iproxyがバックエンド) • 特性上PC上でListenしているポートへの接続が難しい(Androidでしかできない) • TCPリバースプロキシをソフトウェア実装 18
Debug File System - 概要 19 実機確認のイテレーション問題 リソースを実機確認する際にはアプリに組み込んでビルドするか、 サーバにアップロード &実機でダウンロードする必要がある
少しずつ調整しながら実機確認をしたい場合に何回もアプリをビルド orアップロード・ダウンロードする必要がある イテレーションが回しづらく開発効率が低下する ビルド ビルド ビルド
Debug File System - 概要 20 PC上のリソースを直接参照してしまえばOK PCにあるリソースを直接参照できればこの問題は解決する これを実現するのが Debug
File System USB接続したPC上のリソースを実機のストレージのリソースのように扱うことができる 参照
Debug File System - 仕組み 21 VFSでPC上にファイルサーバを構築 まずPC上にVFSを使ってファイルサーバを構築する ネットワーク経由で実機から PC上のファイルにアクセス
高速な通信を行うためにはもうひと工夫必要 devwireでPC上のサーバを参照 devwireを使ってリバースポートフォワード USB接続したPC上のファイルサーバから高速にファイルを読む
Debug File System - デモ 22
まとめ • DeNAでは実機からのホットリロードも可能なリソースロード基盤を実装している • 様々なライブラリを資産として積み上げた上で、統合されたパッケージを使いやすいフレームワー クとして提供している 23
Twitter @DeNAxTech をフォローしよう! 技術を徹底的に磨き、積み上げ、試行錯誤を繰り返しながら、 幅広いチャレンジを続ける DeNA のエンジニア。 彼らの考え方を見て面白いと思ってもらえるように、彼らの発信について 短く要約してお伝えしてます。ぜひ Twitter
フォローお願いします!!
本説明会及び説明資料の内容は、発表日時点で入手可能な情報や判断に基づくもの です。将来発生する事象等により内容に変更が生じた場合も、当社が更新や変更の義 務を負うものではありません。 また、本説明会及び説明資料に含まれる将来の見通しに関する部分は、多分に不確 定な要素を含んでいるため、実際の業績等は、さまざまな要因の変化等により、これら の見通しと異なる場合がありますことをご了承ください。 株式会社ディー・エヌ・エー 25