Slide 1

Slide 1 text

f4samurai社内ゲームライブラリの パッケージ管理手法 2021/9/22 Gotanda.unity

Slide 2

Slide 2 text

自己紹介 まつの@f4samurai 大学院卒業後、大手SIerに入社。 2010年に同期3人とf4samuraiを創業。 サーバサイドを中心に担当。

Slide 3

Slide 3 text

会社の課題 • プロジェクトごとにスクラッチで実装 2020年3月 2017年8月 2015年4月 2022年 2021年2月 新作 2022年 新作 非公表作品

Slide 4

Slide 4 text

やりたいこと • プロジェクト共通基盤ライブラリを作りたい • モジュール単位でバージョン管理したい Project A Project B Lib-Y ver1.0 Lib-Y ver2.0 Lib-Y ver1.1 Lib-Z ver1.0 Lib-Z ver1.1

Slide 5

Slide 5 text

どう実現するか • UnityのPackageManager機能を使う • ライブラリをカスタムパッケージ化して、GitHubで管理する

Slide 6

Slide 6 text

PackageManagerの課題 • gitリポジトリを使用した場合、パッケージ(Package B)が依存している 別のパッケージ(Package A)までは参照してくれない Package B Package A Project

Slide 7

Slide 7 text

解決策 • GitDependencyResolverForUnityを使う • mob-sakaiさん作 • https://github.com/mob-sakai/GitDependencyResolverForUnity

Slide 8

Slide 8 text

使い方 • 依存先はpackage.jsonのgitDependenciesに書き込む (一次依存先のみ記述すればOK) { "name": “jp.co.f4samurai.game-engine.scene-management", "displayName": “f4samurai GameEngine SceneManagement", "description": "シーンを遷移・管理する機能を提供します。", "version": "1.1.0", "unity": "2019.4", "repository": { "type": "git", "url": "[email protected]:f4samurai/native-game-engine.git" }, "author": { "name": "f4samurai" }, "dependencies": {}, "gitDependencies": { “jp.co.f4samurai.game-engine.service": "[email protected]:f4samurai/native-game-engine.git?#packages/game-engine/service/v2.0.0" } }

Slide 9

Slide 9 text

社内での使い方 (パッケージ配布者) • GitHubのリポジトリ直下にパッケージを置く 例) https://github.com/.../packages/game-engine/service/v0.1.0 • ブランチを利用してパッケージのバージョン管理 packages/game-engine/[モジュール名]/[バージョン] 例)packages/game-engine/service/v0.1.1 packages/editor-extensions/swicth-resource/v0.2.0

Slide 10

Slide 10 text

社内での使い方 (パッケージ使用者) • [プロジェクト]/Packages/manifest.jsonに使いたいパッケージを記述 • [プロジェクト]/Packages 以下に指定したパッケージがクローンされる • PackageManagerのGUIからURLを入力することもできるが、 Library/PackageCache以下にクローンされ、git管理対象外になる。 非エンジニアのクローン作業をなくすために上記手段を採用した { "dependencies": { "jp.co.f4samurai.game-engine.web": "[email protected]:f4samurai/native-game-engine.git#packages/game-engine/web/v0.1.0", … } }

Slide 11

Slide 11 text

社内での使い方 (パッケージ使用者) • [プロジェクト]/Packages 以下の2ファイルに自動で追記される • package-lock.json • package-lock.git.json “jp.co.f4samurai.game-engine.web": { "version": "file:[email protected]", "depth": 0, "source": "embedded", "dependencies": {} }, { "name": “jp.co.f4samurai.game-engine.web", "hash": "a228e7cb409604ed4e5c1f2ca70e8cd0ed5800af", "url": "[email protected]:f4samurai/native-game-engine.git?#packages/game-engine/web/v0.1.0" },

Slide 12

Slide 12 text

まとめ • 共通ライブラリはできるだけ小さい単位で管理 • PackageManager+GitDependencyResolverForUnityで依存関係を解決 • 非エンジニア(gitがよく分からない人)への配慮