ゼニガネブログ

ゲーム開発のための小ネタなど。現在はUnityメインでやってます

【Unity】UnityのOSS開発者が Newtonsoft.Json に依存するアセットを開発した場合の選択肢の考察

想定バージョンはUnity 2021.2 以降です。

はじめに

先日 OpenUPM Searcher を公開しましたが、Newtonsoft.Json に依存していた為、その際に少し考えてみました。
提供するインストール方法は unitypackage 形式 と Unity PackageManager (UPM) の git URL 形式を想定しています。

選択肢

1) GitHub で Newtonsoft.Json の公式ではないフォークされたリポジトリに依存させる

https://github.com/jilleJr/Newtonsoft.Json-for-Unity
このリポジトリの管理者曰く Newtonsoft.Json を Unity 公式で提供してもらうのが目的で始めたリポジトリで、その目標が達成されたため今は更新していないとの事。

2) Unity Registry の "com.unity.nuget.newtonsoft-json に依存させる

今ならこれが真っ先に候補にあがる?
現時点での最新版 "com.unity.nuget.newtonsoft-json": "3.2.0"
- 1のリポジトリの方の発言やCHANGELOG的にも3.0から大々的にサポート?
- https://docs.unity3d.com/Packages/com.unity.nuget.newtonsoft-json@3.2/changelog/CHANGELOG.html
- 下記の更新内容から3.2.0推奨
- '''Fixed Newtonsoft DLL public key token so it properly supports assembly strong name'''
- https://learn.microsoft.com/ja-jp/dotnet/standard/assembly/strong-named

3) Unity Registry の Version Control (com.unity.collab-proxy) に依存させる

4の手抜き版、今後のアップデートでいつ消えても不思議ではない。
- 過去や未来のバージョンまでは調べていませんが少なくとも 2.0.4 だと名前空間もdllも衝突しない形式でNewtonsoft.Jsonが使用できます。
- 名前空間:Unity.Plastic.Newtonsoft.Json
- パス:com.unity.collab-proxy@2.0.4/Lib/Editor/PlasticSCM/Unity.Plastic.Newtonsoft.Json.dll

4) Version Controlの形式を真似て自分のアセット専用の衝突しない Newtonsoft.Json を同梱する

手間の事を考慮しないのであれば3よりは4推奨。
- 多少手間がかかるものの一番後の事を考えなくても済む形。
- 無駄なファイルが増える。dllの場合のサイズが1MB未満。エディタ専用ならかなり有り?

5) README に書く

どんな配布形態にしろ依存関係は書いておくのが吉。
- 依存関係をあまり気にしなくてよくなるように作られた UPM で手動解決させる選択肢は微妙?
- UPM 用だけではなく unitypackage としても配布する場合は特に元から記述しておくべき内容だと思います。
- unitypackage としても配布しておけば UPM で Newtonsoft.Json の管理をされるのが嫌な方への選択肢になるので依存が少なければやっておくべき?

個人的おすすめ

5はどのパターンになっても用意すべきだと思います。
そのうえで基本は2、何かしらの事情で2が無理な場合は4、4が本当に面倒で面倒で仕方ないなら3と言った印象で、この時代に1を選択するのは避けた方がよさそうです。