🧪

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

に公開

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

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

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

使用方法

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

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

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

プロジェクト構成

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

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

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

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

ProjectVersion.txt
m_EditorVersion: 2021.3.0f1
manifest.json
{
  "dependencies": {
    "com.sator-imaging.unity-scripting-fundamentals": "https://github.com/sator-imaging/Unity-Fundamentals.git"
  }
}
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
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)が実際にビルドされたかどうかで判定していますが、判定方法として完全かどうかは分かりません。必要に応じてビルドログを参照してください。

TODO

ビルドテストが本当にビルド(が通るかの)テストをしているだけなので、UPM パッケージ内の Unity Test Runner 向けの単体テストを探して自動的に実行するとかやる。

おわりに

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

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

Discussion