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
少人数の SDK 開発を支えるテストの話 / tests for small group d...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Ryuichi Jinushi
July 24, 2019
Programming
540
0
Share
少人数の SDK 開発を支えるテストの話 / tests for small group development
https://meetup.unity3d.jp/jp/events/1108
でお話した内容です。
Ryuichi Jinushi
July 24, 2019
More Decks by Ryuichi Jinushi
See All by Ryuichi Jinushi
非エンジニアにも分かる UniRx(ゆにあーるえっくす)/ UniRx for non-engineers
ryuj
1
62
マップゲーム SDK 競合の話 / arow and other map game sdk
ryuj
0
1k
マップゲーム SDK AROW とその運用を支える AWS の構成 / AROW with AWS
ryuj
0
95
位置情報を用いたモバイルゲームが 気軽に作れる 3D リアルマップサービス 「AROW」について (実践編) / how to AROW practice at Gotanda.unity #11
ryuj
0
71
技術書のすゝめ / suggestion of technical book
ryuj
0
83
Other Decks in Programming
See All in Programming
第3木曜LT会 #28
tinykitten
PRO
0
100
実用!Hono RPC2026
yodaka
2
200
Lightning-Fast Method Calls with Ruby 4.1 ZJIT / RubyKaigi 2026
k0kubun
1
260
年間50登壇、単著出版、雑誌寄稿、Podcast出演、YouTube、CM、カンファレンス主催……全部やってみたので面白さ等を比較してみよう / I’ve tried them all, so let’s compare how interesting they are.
nrslib
4
780
Running Swift without an OS
kishikawakatsumi
0
830
PHP で mp3 プレイヤーを実装しよう
m3m0r7
PRO
0
270
AIベース静的検査器の偽陽性率を抑える工夫3選
orgachem
PRO
3
130
TiDBのアーキテクチャから学ぶ分散システム入門 〜MySQL互換のNewSQLは何を解決するのか〜 / tidb-architecture-study
dznbk
1
170
「Linuxサーバー構築標準教科書」を読んでみた #ツナギメオフライン.7
akase244
0
1.4k
おれのAgentic Coding 2026/03
tsukasagr
1
140
Laravel Nightwatchの裏側 - Laravel公式Observabilityツールを支える設計と実装
avosalmon
1
330
AI-DLC Deep Dive
yuukiyo
8
3.7k
Featured
See All Featured
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
62
53k
Color Theory Basics | Prateek | Gurzu
gurzu
0
290
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.9k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
170
Crafting Experiences
bethany
1
110
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
120
Reality Check: Gamification 10 Years Later
codingconduct
0
2.1k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
1
1.5k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
520
Transcript
少人数の SDK 開発を支えるテストの話 じぬ@gotanda.unity#13
だれ? 地主龍一( ) • じぬ • 部(新規開発部署) • 部キャプテン(昨日から) 最近
• キングダムハーツ • オクトパストラベラー •
アジェンダ • 前振り( と開発体制) • 完成品のテスト • エディタ拡張のテスト • 表示結果のテスト
位置情報と 3D リアルマップによる AR アプリ開発プラットフォーム
None
ベータ版ってことは... • フィードバックを受けて改善 • 新機能の開発 • コアバリューのさらなる強化
なぜお前は テストをしてるのか
なぜテス うちのチーム • スピード開発を重視 • 元々人数が少ない(少数精鋭) ◦ エンジニア: 人 ◦
: 人 エンジニアが する ⇒ バグが出るとクリティカルに開発工数が減る
テストを書く指針 テスト対象 • テストに時間がかかる機能 • テストがめんどくさい機能 • テストを見落としがちな機能 • 前科がある機能
こだわり • 自動化にはこだわらない • 今後も増やしやすいように
テストを書く指針 テスト対象 • テストに時間がかかる機能 大量のマップデータ • テストがめんどくさい機能 エディタ拡張 • テストを見落としがちな機能
完成品の内容物 • 前科がある機能 バグ修正 こだわり • 自動化にはこだわらない • 今後も増やしやすいように
全体像 SDK データソース データソース データソース arowmap arowmap arowmap arowmap arowmap
arow-sdk.zip (リリース物) SDK MapTools • 3D 表現 • エディタ拡張 Unity で実行 パッケージ化
全体像 SDK データソース データソース データソース arowmap arowmap arowmap arowmap arowmap
arow-sdk.zip (リリース物) SDK MapTools • 3D 表現 • エディタ拡張 Unity で実行 パッケージ化
完成品のテスト
完成品の内容物 完成品 • • マップツール(スクリプト各種) 展開後の構成が知りたい
unitypackage • が提供するアーカイブ形式 • 展開すればすぐに 可 • 実は フォーマット
いい感じにしてくれるライブラリ https://github.com/gered/extractunitypackage
Unity におけるテスト
Unity Test Runner • が提供する • テンポラリな シーン上でテスト • •
yield return を用いたテスト [UnityTest] public IEnumerator TestMyFunc() { // 時間がかかる処理
while (/* 上記の処理が完了 */) { yield return null; } // 時間がかかる処理に対するテスト }
エディタ拡張のテスト
エディタ拡張 • なのでエディタ拡張も製品の一部 • テスト忘れがち • 地味にバグる(パスの直し忘れとか) 実装の困ったところ • •
Reflection
Reflection • メタデータを使ってデータやメソッドにアクセス • とメソッド名(文字列)でコール 評価 • パフォーマンス悪い • 保守性悪い(と思う)
• が、テストなので割り切り
リフレクションによる呼び出し var type = typeof(MyClass); var methodName = "MyMethod"; var
flags = BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic; var method = type.GetMethod(methodName, flags); var obj = new MyClass(); Object[] parameters = { ... }; method.Invoke(obj, parameters);
エディタ拡張で提供している機能 • サイズ変換 • ライセンス認証 の生成 • 建物用 ファイルの生成 •
ローカルサーバの起動 • 建物 の静的生成 • の設定
エディタ拡張で提供している機能 • サイズ変換 • ライセンス認証 の生成 • 建物用 ファイルの生成 •
ローカルサーバの起動 • 建物 の静的生成 • の設定 SetUp で実行してファイルが 存在するかテスト Test で実行して yield return で 完了まで待機 TagManager.asset から layers プロパティで取得 Selection.activeObject に 代入して選択状態を再現
表示結果のテスト
arowmap は 100万ファイルあるぞ
段取り 建物 を生成 スクリーンショットを撮影 実行時間でフォルダ分け で前回生成分と比較 差分があれば検知
スクリーンショット • で建物生成 • で実行 • に を設置 • スクリーンショット撮影
yield return new WaitForEndOfFrame(); var texture = ScreenCapture.CaptureScreenshotAsTexture();
テクスチャのリサイズ • をリサイズ後の大きさで確保 • リサイズ前テクスチャをコピー • で確保した を 化 •
リサイズ後の大きさで を生成 • で取り込み コピー ReadPixels
で比較した差分 差分なし 差分あり
差分を生んだ犯人
差分を生んだ犯人
Game View • テスト起動ごとに の大きさが異なる ( のせい?) • どうにかして の大きさを固定したい
• ライブラリあった ◦ ◦ 中身はリフレクション ◦ 追加・変更・削除が可能
まとめ やったこと • 完成品のテスト • エディタ拡張のテスト • スクリーンショットの差分テスト 感想 •
テスト書いてたらバグ見つけた • テストが動いてるという安心感がある • ハックしている体感がよい
https://arow-3dmap.connpass.com/event/139812/ • 時間: 土 〜 日 • 場所:ドリコム社カフェ • ほか:ステキな賞品カッコカリ
参考資料 テスト • https://developer.aiming-inc.com/unity/unity-playmode-test-runner/ • https://qiita.com/su10/items/560302ceafa6bf43a13e リフレクション • https://www.shibuya24.info/entry/2017/02/07/093000 テクスチャのリサイズ
• http://light11.hatenadiary.com/entry/2018/04/19/194015 ライブラリ • https://github.com/gered/extractunitypackage • https://github.com/anchan828/unity-GameViewSizeHelper ドキュメント • https://docs.unity3d.com/ScriptReference/ScreenCapture.CaptureScreenshot AsTexture.html
Reflection ご清聴ありがとうございましたっ