たるこすの日記

たるこすの日記

リアルからバーチャルへ、バーチャルからリアルへ

Unity ライブラリを Git submodule で管理する

はじめに

Unity で長期的なプロジェクトやライブラリを作成する際、 ソースコードが公開されている Unity ライブラリや社内ライブラリを使う場合に、 Git submodule でコードを取り入れるようにしています。

自分の Git リポジトリにライブラリのコードを入れることに比べて、以下のようなメリットがあります。

  • ライブラリのコードが自分のリポジトリに入らない
  • ライブラリのバージョン変更が楽
  • ライブラリのリポジトリに対してコミットや Pull Request がやりやすい

この記事では、自分がどのように Git submodule を使ってプロジェクトを構成しているかを紹介します。

フォルダ構成と仕組み

f:id:tarukosu:20200722160310p:plain

リポジトリのルートフォルダの中の _external フォルダにライブラリのコードが入ります。

このままでは自分の Unity プロジェクトから使えないため、 Assets フォルダ内に必要なライブラリのフォルダへのシンボリックリンクを作成します。

シンボリックリンクをはるためのバッチファイルやツールをルートフォルダの中の _tools フォルダに格納します。

シンボリックリンクgo-symlink-creator という自作のツールを使って作成しています。
このツールを使えば、どこからどこにリンクをはるのかという定義を yaml ファイルで行えます。

github.com

プロジェクトのセットアップ

プロジェクトをセットアップする際の手順を紹介します。

まずは、リポジトリのルートフォルダに _external, _tools フォルダを作成します。

_external フォルダへライブラリを追加

_external フォルダには、Git submodule でライブラリをクローンします。

> git submodule add <repository>

利用するブランチやタグを変更する場合は、クローンしたフォルダ内で変更します。

_tools フォルダへシンボリックリンク作成ツールを追加

Releases · HoloLabInc/go-symlink-creator · GitHub

上記ページから go-symlink-creator.exe をダウンロードし、_tools フォルダに保存します。

また、以下のような SymlinkSettings.yaml ファイルを作成し、_tools フォルダに保存します。
src はリンク先のファイル・フォルダの親フォルダ、dest はリンクを作成するフォルダ、target はリンクを作成するファイル・フォルダです。

symlinks:
  - src: \path\to\source\folder
    dest: \path\to\destination\folder
    target:
      - FolderA
      - FolderB
    include-meta-file: true # meta ファイルのリンクも作成する

最後に、クリックだけで実行できるようにバッチファイル (createSymlink.bat) を作成します。

@echo off
cd /d %~dp0
call go-symlink-creator SymlinkSettings.yaml
pause

このバッチファイルを実行することで、シンボリックが作成されます。

シンボリックリンクを ignore する

シンボリックリンクのファイルは Git の管理対象から外します。

.gitignore ファイルを作成し、シンボリックリンクのファイルを指定してください。

以上でプロジェクトのセットアップは完了です。

プロジェクトをクローンする場合

上記のセットアップを行ったプロジェクトをクローンする場合は、 リポジトリをクローンした後にサブモジュールのクローンを実行します。

> git clone <repository>
> cd <repository>
> git submodule init
> git submodule update

その後、シンボリックリンクを作成するバッチファイルを実行します

> _tools\createSymlink.bat

MRTK (MixedRealityToolkit-Unity) を使う場合

HoloLens アプリ開発で利用される MRTK を、Git submodule で利用する手順を紹介します。
上記で紹介した手順の具体例となります。

まずは、リポジトリのルートフォルダに _external, _tools フォルダを作成します。

_external フォルダへ MRTK を追加

_external フォルダで以下を実行します。

> git submodule add git@github.com:microsoft/MixedRealityToolkit-Unity.git

利用するバージョンを指定します。
例えば、MRTK v2.4.0 を使う場合は以下のようにします。

> cd MixedRealityToolkit-Unity
> git checkout v2.4.0

_tools フォルダへシンボリックリンク作成ツールを追加

go-symlink-creator.execreateSymlink.bat については同じ内容のため省略します。

SymlinkSettings.yaml は以下のようになります。

symlinks:
  - create-dest-folder: true # dest フォルダ (Assets\MRTK) が存在しなければ作成する
    include-meta-file: true
    src: ..\_external\MixedRealityToolkit-Unity\Assets\MRTK
    dest: ..\Assets\MRTK
    target:
      - Core
      - Providers
      - SDK
      - Services
      - Tools
      - Extensions
      # Examples を利用しない場合は削除する
      - Examples

シンボリックリンクを ignore する

Assets フォルダに .gitignore ファイルを作成し、以下の内容を記入します。

/MRTK
/MRTK.meta

おわりに

以上、自分が普段行っている Unity ライブラリを Git submodule で管理する手順の紹介でした。