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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
860
DeNAデータエンジニアの組織・データエンジニアキャリアについて
dena_tech
6
2.1k
Pocochaにおけるデータマネジメント
dena_tech
3
1.3k
社内データ利活用の推進と技術的負債の解決に向けた取り組み
dena_tech
5
480
Google Cloud を使ったデータプラットフォームへの変革と 最新の活用状況について
dena_tech
6
400
DeNA SWETでのインターンシップについて【DeNA TechCon 2023】
dena_tech
0
660
T系EC2インスタンスのクレジットが回復しないので困った話【DeNA TechCon 2023】
dena_tech
4
970
画像サーバーを紆余曲折あってS3 に移行した話【DeNA TechCon 2023】
dena_tech
0
740
Other Decks in Technology
See All in Technology
2026年、サーバーレスの現在地 -「制約と戦う技術」から「当たり前の実行基盤」へ- /serverless2026
slsops
2
270
Oracle AI Database移行・アップグレード勉強会 - RAT活用編
oracle4engineer
PRO
0
110
モダンUIでフルサーバーレスなAIエージェントをAmplifyとCDKでサクッとデプロイしよう
minorun365
4
220
今日から始めるAmazon Bedrock AgentCore
har1101
4
420
フルカイテン株式会社 エンジニア向け採用資料
fullkaiten
0
10k
ブロックテーマでサイトをリニューアルした話 / 2026-01-31 Kansai WordPress Meetup
torounit
0
480
茨城の思い出を振り返る ~CDKのセキュリティを添えて~ / 20260201 Mitsutoshi Matsuo
shift_evolve
PRO
1
400
SREチームをどう作り、どう育てるか ― Findy横断SREのマネジメント
rvirus0817
0
350
Bedrock PolicyでAmazon Bedrock Guardrails利用を強制してみた
yuu551
0
260
Webhook best practices for rock solid and resilient deployments
glaforge
2
310
私たち準委任PdEは2つのプロダクトに挑戦する ~ソフトウェア、開発支援という”二重”のプロダクトエンジニアリングの実践~ / 20260212 Naoki Takahashi
shift_evolve
PRO
2
200
30万人の同時アクセスに耐えたい!新サービスの盤石なリリースを支える負荷試験 / SRE Kaigi 2026
genda
4
1.4k
Featured
See All Featured
Rebuilding a faster, lazier Slack
samanthasiow
85
9.4k
WCS-LA-2024
lcolladotor
0
450
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
85
Java REST API Framework Comparison - PWX 2021
mraible
34
9.1k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.7k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
330
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.2k
A Tale of Four Properties
chriscoyier
162
24k
Thoughts on Productivity
jonyablonski
74
5k
Context Engineering - Making Every Token Count
addyosmani
9
670
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
120
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