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.2k
ペタバイト、30プロダクトを超えて成長を続けるデータ基盤の歴史
dena_tech
1
740
DeNAデータエンジニアの組織・データエンジニアキャリアについて
dena_tech
1
1.7k
Pocochaにおけるデータマネジメント
dena_tech
3
1.1k
社内データ利活用の推進と技術的負債の解決に向けた取り組み
dena_tech
1
330
Google Cloud を使ったデータプラットフォームへの変革と 最新の活用状況について
dena_tech
0
280
DeNA SWETでのインターンシップについて【DeNA TechCon 2023】
dena_tech
0
530
T系EC2インスタンスのクレジットが回復しないので困った話【DeNA TechCon 2023】
dena_tech
0
770
画像サーバーを紆余曲折あってS3 に移行した話【DeNA TechCon 2023】
dena_tech
0
600
Other Decks in Technology
See All in Technology
AIエージェント時代のエンジニアになろう #jawsug #jawsdays2025 / 20250301 Agentic AI Engineering
yoshidashingo
8
3.5k
急成長する企業で作った、エンジニアが輝ける制度/ 20250227 Rinto Ikenoue
shift_evolve
0
120
LINEギフトにおけるバックエンド開発
lycorptech_jp
PRO
0
240
4th place solution Eedi - Mining Misconceptions in Mathematics
rist
0
140
Iceberg Meetup Japan #1 : Iceberg and Databricks
databricksjapan
0
320
手を動かしてレベルアップしよう!
maruto
0
200
Visualize, Visualize, Visualize and rclone
tomoaki0705
9
81k
IAMポリシーのAllow/Denyについて、改めて理解する
smt7174
2
200
ExaDB-XSで利用されているExadata Exascaleについて
oracle4engineer
PRO
3
240
What's new in Go 1.24?
ciarana
1
110
大規模アジャイルフレームワークから学ぶエンジニアマネジメントの本質
staka121
PRO
3
1k
「正しく」失敗できる チームの作り方 〜リアルな事例から紐解く失敗を恐れない組織とは〜 / A team that can fail correctly
i35_267
4
840
Featured
See All Featured
Mobile First: as difficult as doing things right
swwweet
223
9.4k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
175
52k
Bash Introduction
62gerente
611
210k
YesSQL, Process and Tooling at Scale
rocio
172
14k
It's Worth the Effort
3n
184
28k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
4
360
Bootstrapping a Software Product
garrettdimon
PRO
306
110k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
133
33k
Measuring & Analyzing Core Web Vitals
bluesmoon
6
250
GraphQLとの向き合い方2022年版
quramy
44
14k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.3k
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