Edited at

git worktreeを使ってUnityのプラットフォーム切り替えを楽にする

More than 1 year has passed since last update.


はじめに

以前Unityのクライアントサイドの仕事をしていたときに、地味に時間がかかっていたのがAndroidとiOSのプラットフォームの切り替えでした。

切り替え時間を高速化する正攻法は、Cache Serverを導入することであり、現在のUnityでは簡単にLocal Cache Serverを有効にすることが出来ます。しかしながら、SDKの組み込み等AndroidとiOSの切り替えを頻繁にすることがあったので、より楽できないかと考えたのがgit worktreeを使う方法です。

今回は、Android用の作業ディレクトリとiOS用の作業ディレクトリを分け、それぞれのプラットフォームに設定したUnityを2つ立ち上げることにします。

Unityを2つ起動するためには、作業ディレクトリも2つ用意する必要があります。


git worktree

通常は1つの作業ディレクトリのみ使用しているため、作業中に別のプラットフォームに切り替えたい場合は

時間の掛かるプラットフォーム切り替えを行わなければいけませんでした。

作業用ディレクトリ2個用意するためなら、同じリポジトリから別の作業用ディレクトリにcloneするのが一番簡単ですが


  • 容量を2倍食う

  • .gitディレクトリが別物なので、それぞれの作業ディレクトリでfetch/pullする必要がある

というデメリットがあります。

git worktreeはgitの作業ディレクトリを複数作成することができるコマンドで、.gitディレクトリは共有されており上記のデメリットが解消されています。

参考: 複数の作業ディレクトリを作成する git worktree

コマンド例

$ git branch dev_android # 作業用ブランチ作成

$ git worktree add ../Android dev_android # 作業ディレクトリ追加

同じブランチを複数の作業ディレクトリでチェックアウトすることは出来ないので、まず作業用ディレクトリを作り、そのブランチを指定して新しい作業ディレクトリを追加します。

この作業ディレクトリを指定してターミナルからUnityを起動すれば、同時に2つのプラットフォームで作業することができます。確認したいときも時間の掛かるプラットフォーム切り替えをする必要はありません。


git stash

git worktreeによる複数の作業ディレクトリは、.git以下を共有しています。(worktreeで作成した作業ディレクトリの.gitを見てみたところ

シンボリックリンクを張っているのではなく、元の.git以下を参照するようなgitdir指定がされています。)

これによる地味ながら、たまーに便利だなと思うのがstash listを共有している、ということです。

Unityを2つ起動してUIなどを調節したいが、commitしてamendを繰り返すのもちょっと面倒…という非常に狭い範囲ではありますが作業ディレクトリ間でstash listが共有されているので簡単に変更を受け渡すことができます。