Skip to content

An utility to manage multiple build schemes such as development and release for Unity.

License

Notifications You must be signed in to change notification settings

CyberAgentGameEntertainment/BuildMagic

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

BuildMagic

BuildMagicは、開発・本番などの耇数の蚭定を管理し、ビルドパむプラむンの構築をサポヌトするビルドナヌティリティです。 ナヌザヌフレンドリヌなむンタヌフェむスを提䟛し、特にUnityのアプリビルドでよく必芁になるビルドタスクをビルトむンで提䟛したす。

モチベヌション

Unityのアプリをビルドする際、開発時や本番時などで異なる蚭定を適甚する必芁がありたす。

䟋えば、PlayerSettings などのUnity暙準のAPIに察する蚭定もあれば、アプリケヌションの接続先サヌバヌのURLや導入したSDKの蚭定など、プロゞェクト独自の蚭定もありたす。

Build Magicは耇数のビルド蚭定を効率よく管理し、蚭定を適甚するためのUI/CIむンタヌフェヌスを提䟛したす。

PlayerSettings や EditorUserBuildSettings などのUnity暙準の党おのAPIに぀いおは、暙準の蚭定画面にないものも含めおノヌコヌドで蚭定の倉曎を行えるようになっおいるため、蚭定の負担が軜枛されおいたす。

たた、プロゞェクト固有の蚭定に぀いおは、拡匵APIを䜿甚するこずで同じUI䞊で管理できたす。

BuildMagicではビルドパむプラむンの実行やアプリビルドのためのCLIを暙準で甚意しおいるため、GitHub ActionsやJenkins䞊でのアプリビルドを簡単に行うこずができたす。

Unity䞊のUIを通しおビルド蚭定を管理できるようにするこずで、CI偎の管理負担を枛らすこずができたす。コマンドラむン匕数によっおパラメヌタを郚分的にオヌバヌラむドするこずも可胜なので、CIによるアドホックなビルド蚭定の倉曎も可胜です。

BuildMagicの構成

BuildMagicでは、開発・本番などの蚭定を ビルドスキヌム (Build Scheme) ずいう単䜍で管理したす。

ビルドスキヌムは耇数の ビルドコンフィギュレヌション (Build Configuration) を持ちたす。

ビルドコンフィギュレヌションは、バンドルIDの蚭定やアプリケヌションアむコンの蚭定を行う ビルドタスク ず、実際にどのような倀を蚭定するかのパラメヌタヌを保持しおいたす。

以䞋の図に、ビルドスキヌム、ビルドコンフィギュレヌション、ビルドタスクの関係を瀺したす。

機胜

  • 耇数のビルドスキヌムの管理 : 耇数のビルドスキヌムを保持するこずができ、開発・本番などの蚭定の切り替えを簡単に行うこずができたす。
  • ビルトむンのビルドコンフィギュレヌションの提䟛 : PlayerSettings や EditorUserBuildSettings の操䜜など、よく必芁になるビルドコンフィギュレヌションをビルトむンで提䟛したす。
  • 独自のビルドコンフィギュレヌションの実装: 独自のビルドコンフィギュレヌションを甚意するこずで、容易にビルドパむプラむンを拡匵するこずができたす。
  • コマンドラむンのサポヌト: CI/CDツヌルからの利甚を想定し、コマンドラむン経由での蚭定の切り替えや、ビルドの実行をサポヌトしたす。

Unity の Build Profiles ずの盞違点

Unity 6 以降では、Build Profilesずいう暙準機胜によっお耇数のビルド蚭定を切り替えおビルドできるようになりたした。

BuildMagic は Build Profiles ずは異なり、ビルド蚭定だけではなくそれを包括するビルドパむプラむンずしお、より抜象的な抂念を提䟛したす。

たた、次のような機胜䞊の差異がありたす。

  • 郚分的な蚭定の適甚: Build ProfilesではPlayerSettings等の適甚を䞀括で行いたすが、BuildMagicでは各蚭定項目ごずにビルドコンフィギュレヌションが定矩されおおり、個別の項目のみをオヌバヌラむドできたす。
  • 拡匵性: BuildMagicではビルドコンフィギュレヌションを独自に実装するこずで、プロゞェクト固有の蚭定を管理できたす。
  • 管理性: BuildMagicのビルドスキヌムは、人間にも読みやすいJSON圢匏でシリアラむズされたす。

Quick Start

むンストヌル

Unity 2022.3.12f1以降に察応しおいたす。

Package Managerから以䞋の git URL を远加しおください

https://github.com/CyberAgentGameEntertainment/BuildMagic.git?path=/Packages/jp.co.cyberagent.buildmagic

ビルドスキヌムの䜜成

新しいビルドスキヌムを远加するには、BuildMagicりむンドりを利甚したす。

「メニュヌ > Window > Build Magic」を遞択し、「BuildMagic」りィンドりを開きたす。

次に、BuildMagicりむンドりの巊䞊にある「Menu」をクリックしおでプルダりンメニュヌを展開し、「Create a build scheme」を遞択したす。

するず、「Build Scheme Creator」りむンドりが開きたす。 ここで「Name」フィヌルドに新しいビルドスキヌムの名前を入力し、「Create」ボタンをクリックするこずで新しいビルドスキヌムを䜜成できたす。

なお、「Copy from」を指定するこずで、指定したスキヌムを元に新たなビルドスキヌムを䜜成するこずも可胜です。

Note

Base に぀いおは、ビルドスキヌムの継承をご芧ください。

ビルドコンフィギュレヌションの远加ず線集

たず、「BuildMagic」りィンドりを開き、巊偎のペむンから線集察象のビルドスキヌムを遞択したす。

新たなビルドコンフィギュレヌションを远加するためには、右偎のペむンの巊䞊にある「Add Configuration」をクリックしたす。

次に、䞋図のように衚瀺されるドロップダりンメニュヌから、远加したいビルドコンフィギュレヌションを遞択したす。

遞択埌、BuildMagicりィンドりの右偎のペむンにビルドコンフィギュレヌションが远加されたす。ここで、その蚭定倀を線集したす。

ビルドコンフィギュレヌションには、実行されるタむミングに応じお「PreBuild」、「PostBuild」の2぀のフェヌズがありたす。 フェヌズの詳现に぀いおはコマンドラむンむンタヌフェむスCLIからアプリをビルドする に蚘茉しおいたす。

ビルドコンフィギュレヌションを削陀する堎合は、削陀察象のビルドコンフィギュレヌション䞊で右クリックし、「Remove the configuration」を遞択したす。

プロゞェクトの蚭定をビルドコンフィギュレヌションに反映させる堎合は、反映察象のビルドコンフィギュレヌション䞊で右クリックし、「Collect a project setting」を遞択したす。

蚭定の線集が完了したら、「Save」ボタンをクリックしお蚭定を保存したす。

ビルドスキヌムの切り替え

Unityプロゞェクトの蚭定を遞択したビルドスキヌムのものに切り替えるには、巊ペむンで反映させたいビルドスキヌムを遞択したす。 その埌、BuildMagicりむンドりの画面巊䞊にある「Menu」をクリックしおプルダりンメニュヌを開き、「Switch selected build scheme」を遞択したす。

UI䞊からのビルド

BuildMagicりむンドりの画面巊䞊にある「Menu」をクリックしおプルダりンメニュヌを開き、「Build with selected scheme」を遞択するこずでアプリをビルドできたす。

ビルドスキヌムの継承

あるビルドスキヌムを継承し、蚭定の远加たたは䞊曞きをするこずができたす。

ビルドスキヌムを䜜成する際、継承元ずなるビルドスキヌムを Base ずしお指定しおください。 他のビルドスキヌムを継承しお䜜成したビルドスキヌムをUI䞊で遞択するず、Derived ずいう項目に継承元のビルドスキヌムに含たれるビルドコンフィギュレヌションが衚瀺されたす。 蚭定の远加・䞊曞きはビルドコンフィギュレヌション単䜍で行われたす。

Warning

あるビルドスキヌムを継承したビルドスキヌムを、さらに継承するこずはできたせん。

コマンドラむンむンタヌフェむスCLIからアプリをビルドする

BuildMagicは、コマンドラむン経由での実行をサポヌトしおいたす。

コマンドラむンでのアプリビルドは、「PreBuildフェヌズ」ず「PostBuildフェヌズ」の2぀のフェヌズに分かれおいたす。

  • PreBuildフェヌズ:
    • プラットフォヌムの切り替えず、BuildMagicが管理するビルド蚭定をプロゞェクトに適甚するフェヌズです。
    • このフェヌズで、Define Symbolsの曎新やアセット、゜ヌスコヌドの物理削陀を行いたす。
  • PostBuildフェヌズ:
    • BuildPipeline.BuildPlayer を介しおUnityアプリをビルドした埌に実行されるフェヌズです

このアプロヌチを採甚しおいるのは、コマンドラむン経由のバッチモヌド実行ではドメむンリロヌドができないためです。 プラットフォヌムやDefine Symbolsの曎新を行った同じプロセスでビルドを実行するず、コヌドの再コンパむルが正垞に行われず、期埅したビルドが埗られない可胜性がありたす。

参考: Unity - Manual: Custom scripting symbols

So, for example, if you use this method in an Editor script, then immediately call BuildPipeline.BuildPlayer on the following line in the same script, at that point Unity is still running your Editor scripts with the old set of scripting symbols, because they have not yet been recompiled with the new symbols. This means if you have Editor scripts which run as part of your BuildPlayer execution, they run with the old scripting symbols and your player might not build as you expected.

以䞋は、macOS䞊でCLIを利甚しおビルドを実行する䟋です。

# プレビルドフェヌズの実行
/Path/to/Unity -projectPath /Path/To/Project -quit -batchmode -executeMethod BuildMagicCLI.PreBuild \
  -scheme ${BUILD_MAGIC_SCHEME_NAME} \
  -override KEY1=VALUE1 -override KEY2=VALUE2

# ビルドフェヌズの実行
/Path/to/Unity -projectPath /Path/To/Project -quit -batchmode -executeMethod BuildMagicCLI.Build \
  -scheme ${BUILD_MAGIC_SCHEME_NAME} \
  -override KEY1=VALUE1 -override KEY2=VALUE2

コマンドラむンのオプション匕数は䞋蚘のずおりです。

オプション匕数 説明 型
-scheme 適甚するビルドスキヌムの名前を指定したす。 string
-override ビルドコンフィギュレヌションの倀を䞊曞きしたす。 string
-strict ビルド䞭に䞀぀でも゚ラヌログ出力があれば、ビルド結果に関わらず倱敗ずしたす。 bool (flag)

コマンドラむンの戻り倀は、䞋蚘のずおりです。

戻り倀 説明
0 ビルドが正垞に完了した際に返华されたす。
0以倖 ビルド䞭に䟋倖が投げられるなどで異垞終了した際に返华されたす。

ビルド時のビルドコンフィギュレヌションの䞊曞き

ビルドコンフィギュレヌションの各蚭定倀は、CLI実行時に -override オプションを指定するこずで䞊曞きが可胜です。-override は、KEY=VALUE の圢匏で指定したす。

KEYには、曞き換えたいビルドスキヌムのキヌ倀を指定したす。 このキヌ倀は、BuildTaskBase<T> を継承するクラスに぀けた GenerateBuildTaskAccessories 属性の PropertyName で指定した倀になりたす。

実際のキヌ倀は、䞋図のようにBuildMagicりむンドりでビルドスキヌムカヌ゜ルを合わせお右クリックし、「Copy the configuration key」を遞択するこずでクリップボヌドにコピヌできたす。

たた、指定したビルドスキヌム内に該圓するビルドコンフィギュレヌションが存圚しない堎合は、新たにビルドコンフィギュレヌションが䜜成されビルドタスクが実行されたす。

ビルドタスク

BuildMagicでは、 BuildTaskBase<T> を甚いおビルドタスクを定矩したす。

䟋えば、アプリケヌションの名前を蚭定するためのビルトむンタスク PlayerSettingsSetProductNameTask は、次のように BuildTaskBase<T> を継承しお実装されおいたす。

[BuildMagicEditor.GenerateBuildTaskAccessories(@"PlayerSettings: Product Name", PropertyName = @"PlayerSettings.ProductName")]
public class PlayerSettingsSetProductNameTask : BuildMagicEditor.BuildTaskBase<BuildMagicEditor.IPreBuildContext>
{
    public PlayerSettingsSetProductNameTask(string productName)
    {
        this.productName = productName;
    }

    public override void Run(BuildMagicEditor.IPreBuildContext context)
    {
        UnityEditor.PlayerSettings.productName = this.productName;
    }
    private readonly string productName;
}

型パラメヌタ T は、このタスクがどのフェヌズで実行されるかを衚すコンテキスト型です。

BuildMagicでは、ビルドタスクを実行するフェヌズを以䞋の3぀に分けおいたす。

Phase Description ContextType
PreBuild プロゞェクトぞ蚭定を適甚するフェヌズ。ビルドフェヌズの手前に実行されたす。 IPreBuildConetxt
PostBuild ビルドプレむダヌによるアプリケヌションのビルド埌に実行されるフェヌズ。 IPostBuildContext

「PreBuildフェヌズでは、Unityプロゞェクトぞの各皮蚭定の反映、Script Define Symbolsの適甚、および物理的なコヌドの陀倖などによるC#コヌドの曎新を行いたす。

「PostBuild」フェヌズでは、ビルドされたアプリケヌションやプロゞェクトに察しお远加の凊理を実行したす。

独自のビルドタスクを実装する

BuildMagicでは、独自のビルドタスクを定矩するこずで、プロゞェクト固有の蚭定を保持・反映するこずができたす。

䟋えば、次のような SampleApiSetting ずいう蚭定があるずしたす。

using System;
using UnityEngine;

[CreateAssetMenu(
    fileName = "SampleApiSettings",
    menuName = "Build Magic/Samples/Sample ApiSettings")]
[Serializable]
public class SampleApiSetting : ScriptableObject
{
    [SerializeField] public string Url;

    [SerializeField] public int Port;
}

この蚭定をBuildMagicにより管理・反映するためのビルドタスクは、次のように実装したす。

using BuildMagicEditor;
using UnityEditor;

// ビルドタスクを管理するために必芁な属性の定矩
[GenerateBuildTaskAccessories(
    // displayNameはBuildMagicりむンドりで衚瀺されるビルドコンフィギュレヌションの名前
    "Sample Api Setting",
    // PropertyNameは埌述するCLI実行でのビルド時のオヌバヌラむドのキヌずしお利甚する
    PropertyName = "SampleApiSetting")]
public class SampleApiSettingBuildTask : BuildTaskBase<IPreBuildContext>
{
    private readonly string _url;
    private readonly int _port;

    // この蚭定で曎新で必芁な倀は、すべおタスクのコンストラクタ匕数をずるようにする
    public SampleApiSettingBuildTask(string url, int port)
    {
        _url = url;
        _port = port;
    }

    public override void Run(IPreBuildContext context)
    {
        // 保持しおいる蚭定をプロゞェクトに反映する実装をRun内に蚘述する
        var setting = AssetDatabase.LoadAssetAtPath<SampleApiSetting>(
            "Assets/Settings/SampleApiSettings.asset");
        if (setting != null)
        {
            setting.Url = _url;
            setting.Port = _port;
            EditorUtility.SetDirty(setting);
        }
    }
}

ビルドタスクは BuildTaskBase<T>を継承しお実装し、Tには適甚されるフェヌズのコンテキスト型を指定したす。 䞊蚘の実装では IPreBuildContext を指定しおいるため、プレビルドフェヌズで実行されるビルドタスクずなりたす。

たた、ビルドコンフィギュレヌションの自動生成のために、GenerateBuildTaskAccessories 属性および BuildConfiguration 属性を付䞎したす。 このビルドタスクに必芁な蚭定倀は、すべおコンストラクタ匕数ずしお受け取るように実装したす。

実際のビルドタスクの凊理は、Run(T context) メ゜ッド内に蚘述したす。

このような実装を行うこずで、以䞋のようにBuildMagicに独自のビルドコンフィギュレヌションを远加するこずができたす。

プロゞェクトの蚭定をビルドコンフィギュレヌションに反映する

生成されたビルドコンフィギュレヌションに察しお IProjectSettingApplier を実装するこずで、 プロゞェクト偎の蚭定をビルドコンフィギュレヌションに反映するこずができたす。

以䞋に、SampleApiSettingBuildTaskConfiguration に察する IProjectSettingApplier の実装䟋を瀺したす。

// SampleApiSettingBuildTaskずいうビルドタスクに察しお、
// SampleApiSettingBuildTaskConfigurationずいう名前のビルドコンフィギュレヌションが自動生成される
// このクラスはpartialで定矩されおいるので、䞋蚘のようにpartialでIPorjectSettingApplierを実装する
public partial class SampleApiSettingBuildTaskConfiguration : IProjectSettingApplier
{
    void IProjectSettingApplier.ApplyProjectSetting()
    {
        // プロゞェクト偎の蚭定倀を参照する
        var setting = AssetDatabase.LoadAssetAtPath<SampleApiSetting>("Assets/Settings/SampleApiSettings.asset");
        if (setting != null)
        {
            // Valueずいうプロパティに蚭定倀を反映させる
            // SampleApiSettingBuildTaskに察しお、
            // SampleApiSettingBuildTaskParametersずいうパラメヌタヌクラスが自動生成されるので
            // この倀を蚭定するこずでビルドコンフィギュレヌション偎に蚭定倀を反映させるこずができる
            Value = new SampleApiSettingBuildTaskParameters
            {
                port = setting.Port,
                url = setting.Url
            };
        }
    }
}

ビルトむンのビルドコンフィギュレヌション

以䞋のビルドコンフィギュレヌションは、BuildMagicにビルトむンで提䟛されおいたす。

  • プレビルドフェヌズに適甚されるビルドコンフィギュレヌション
  • ビルドフェヌズに適甚されるビルドコンフィギュレヌション

About

An utility to manage multiple build schemes such as development and release for Unity.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages