UPM パッケージのテストツール

<sup>諸事情あり、本年度から [Zenn](https://zenn.dev/sator_imaging) に移行することとなりました。暫くはマルチポストご容赦ください。</sup><br/>&nbsp;


`UpmPackageTestKit` は、クリーンなテスト環境を複数の Unity バージョン向けに自動生成し Unity Package Manager（UPM）パッケージのビルドテストを行うツールです。

パッケージ全体ではなく一部分だけを共有する、というような運用を行っている場合に特に有用です。

![](https://raw.githubusercontent.com/SatorImaging/zenn.dev/refs/heads/main/images/UpmPackageTestKit/MainMenu.png?token=GHSAT0AAAAAACGO4TTH6KNPOM7MSFKOR7OE2B2U2KQ)

https://github.com/sator-imaging/Unity-Fundamentals/releases/tag/v1.4.0





# 使用方法

`UnityFundamentals > UPM Package Test Kit > ...` から各種コマンドを実行します。

対象の `package.json` を選択した状態で `Generate...` を実行すると、設定した「最小サポートバージョン」とそれ以上のバージョン向けに最小構成の Unity プロジェクトを一括生成します。

- Unity エディターの自動インストールは行わないので事前に必要なバージョンをインストールしておく必要があります。
- パッチバージョンは「インストールされている最小のバージョン」が選ばれます。
    - サポート対象未満のパッチバージョンは事前にアンインストールする必要があります。





# プロジェクト構成

:::note

Unity がデフォルトで読み込む Built-in カテゴリーのパッケージ（`Animation` `UI` `IMGUI` 等）すら読み込まない最小構成のプロジェクトになっています。

その為、ビルドを通すには Built-in パッケージを含めた完全な依存関係を `package.json` で定義する必要があります。

:::


ツールによって生成される環境は、全４つのファイルとビルドスクリプトのみで構成されたプロジェクトになっています。


- Unity バージョン X
    - Assets/
        - `Main.unity`
        - Editor/
            - `BuildScript.cs`
    - Packages/
        - `mainfest.json`
    - ProjectSettings/
        - `ProjectVersion.txt`
    - `ビルドスクリプト.bat`
- Unity バージョン Y
- Unity...
- `一括ビルド.bat`



## 生成されるファイルの内容

バージョンや URL は適宜変更されます。


```txt:ProjectVersion.txt
m_EditorVersion: 2021.3.0f1
```


```json:manifest.json
{
  "dependencies": {
    "com.sator-imaging.unity-scripting-fundamentals": "https://github.com/sator-imaging/Unity-Fundamentals.git"
  }
}
```


```yaml:Main.unity
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &1286492270
GameObject:
  serializedVersion: 6
  m_Component:
  - component: {fileID: 1286492273}
  - component: {fileID: 1286492272}
  m_Name: Main Camera
  m_TagString: MainCamera
  m_IsActive: 1
--- !u!4 &1286492273
Transform:
  m_GameObject: {fileID: 1286492270}
--- !u!20 &1286492272
Camera:
  m_GameObject: {fileID: 1286492270}
  m_Enabled: 1
  serializedVersion: 2
```


```cs:BuildScript.cs
using UnityEngine;
using UnityEditor;
using UnityEditor.Build;

public class BuildScript
{
    public static void Build()
    {
        var group = BuildPipeline.GetBuildTargetGroup(EditorUserBuildSettings.activeBuildTarget);
        var named = NamedBuildTarget.FromBuildTargetGroup(group);

        PlayerSettings.fullScreenMode = FullScreenMode.Windowed;
        PlayerSettings.resizableWindow = true;
        PlayerSettings.SetScriptingBackend(group, ScriptingImplementation.IL2CPP);
        PlayerSettings.SetIl2CppCompilerConfiguration(group, Il2CppCompilerConfiguration.Debug);
#if UNITY_2022_3_OR_NEWER == false
        EditorUserBuildSettings.il2CppCodeGeneration = Il2CppCodeGeneration.OptimizeSize;
#else
        PlayerSettings.SetIl2CppCodeGeneration(named, Il2CppCodeGeneration.OptimizeSize);
#endif

        BuildPipeline.BuildPlayer(
            new[] { new EditorBuildSettingsScene("Assets/Main.unity", true) },
            "__BUILD/SatorImaging.UpmPackageTestKit.exe",
            BuildTarget.StandaloneWindows64,
            BuildOptions.None
            );
    }
}
```



## 自動生成されるビルドスクリプト

Unity の CLI ビルドでは `ERRORLEVEL` が適切に設定されないケースがあります。

代わりにアプリ（`.exe`）が実際にビルドされたかどうかで判定していますが、判定方法として完全かどうかは分かりません。必要に応じてビルドログを参照してください。





# おわりに

自動生成されるビルドスクリプトは Windows 専用です。

以上です。お疲れ様でした。