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
DeNA_Tech
October 15, 2020
Technology
1
1.4k
PCにあるアセットを 実機からホットリロードする
開発PC上のアセットをAssetBundleとして実機からホットリロードすることで
開発イテレーションの高速化する手法についてご紹介します。
DeNA_Tech
October 15, 2020
Tweet
Share
More Decks by DeNA_Tech
See All by DeNA_Tech
学びが形になる!〜DeNAで6年間プロダクト開発に携わって学んだこと〜
dena_tech
2
1.1k
ペタバイト、30プロダクトを超えて成長を続けるデータ基盤の歴史
dena_tech
1
680
DeNAデータエンジニアの組織・データエンジニアキャリアについて
dena_tech
1
1.5k
Pocochaにおけるデータマネジメント
dena_tech
3
1.1k
社内データ利活用の推進と技術的負債の解決に向けた取り組み
dena_tech
1
270
Google Cloud を使ったデータプラットフォームへの変革と 最新の活用状況について
dena_tech
0
240
DeNA SWETでのインターンシップについて【DeNA TechCon 2023】
dena_tech
0
460
T系EC2インスタンスのクレジットが回復しないので困った話【DeNA TechCon 2023】
dena_tech
0
650
画像サーバーを紆余曲折あってS3 に移行した話【DeNA TechCon 2023】
dena_tech
0
510
Other Decks in Technology
See All in Technology
クライアントサイドでよく使われる Debounce処理 をサーバサイドで3回実装した話
yoshiori
1
110
で、ValhallaのValue Classってどうなったの?
skrb
1
430
Java x Spring Boot Warm up
kazu_kichi_67
2
390
サーバーレス SaaS における運用監視の負荷軽減のためのアプローチ
ririru0325
0
130
WHOLENESS, REPAIRING, AND TO HAVE FUN: 全体性、修復、そして楽しむこと
snoozer05
PRO
2
3k
30万人が利用するチャットをFirebase Realtime DatabaseからActionCableへ移行する方法
ryosk7
2
240
「最高のチューニング」をしないために / hack@delta 24.10
fujiwara3
9
1.7k
次は君だ。~Japan AWS Jr. Champions 受賞までの奇跡~
fukuchiiinu
0
210
クラシルの現在とこれから
am1157154
1
320
強すぎるIAMをCloudTrailを使って適正化した話
yjszk
0
230
LeSSをはじめよう〜LeSSをはじめるとき、LeSSをはじめてから、知りたかったこと詰め合わせ〜
lycorptech_jp
PRO
2
170
AWS CDKで大量のパラメータストアを作りたい
y_kotani
1
150
Featured
See All Featured
Building Adaptive Systems
keathley
38
2.2k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
31
2.6k
What's in a price? How to price your products and services
michaelherold
243
11k
Unsuck your backbone
ammeep
668
57k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
770
Code Review Best Practice
trishagee
64
17k
Building Your Own Lightsaber
phodgson
102
6k
A Tale of Four Properties
chriscoyier
156
23k
Optimizing for Happiness
mojombo
376
69k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9k
How to Think Like a Performance Engineer
csswizardry
19
1.1k
Teambox: Starting and Learning
jrom
132
8.7k
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