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
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
70
技術書のすゝめ / suggestion of technical book
ryuj
0
83
Other Decks in Programming
See All in Programming
AWS re:Invent 2025の少し振り返り + DevOps AgentとBacklogを連携させてみた
satoshi256kbyte
3
150
Offline should be the norm: building local-first apps with CRDTs & Kotlin Multiplatform
renaudmathieu
0
180
How Swift's Type System Guides AI Agents
koher
0
200
Swift Concurrency Type System
inamiy
0
430
PHP 7.4でもOpenTelemetryゼロコード計装がしたい! / PHPerKaigi 2026
arthur1
1
550
20260320登壇資料
pharct
0
170
ドメインイベントでビジネスロジックを解きほぐす #phpcon_odawara
kajitack
2
130
飯MCP
yusukebe
0
490
アーキテクチャモダナイゼーションとは何か
nwiizo
17
4.8k
2026-03-27 #terminalnight 変数展開とコマンド展開でターミナル作業をスマートにする方法
masasuzu
0
320
Radical Imagining - LIFT 2025-2027 Policy Agenda
lift1998
0
250
事業会社でのセキュリティ長期インターンについて
masachikaura
0
240
Featured
See All Featured
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.1k
Accessibility Awareness
sabderemane
0
95
KATA
mclloyd
PRO
35
15k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
360
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
490
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
170
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.3k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
260
Designing Experiences People Love
moore
143
24k
Being A Developer After 40
akosma
91
590k
Visualization
eitanlees
150
17k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.7k
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 ご清聴ありがとうございましたっ