Unity CLIは、Unity Hubのデスクトップアプリを使わずに、ターミナルからUnityを操作するための単独のコマンドラインツールです。

Editorのインストールやプロジェクトを開く操作を、コマンド一発で実行できます。

公式ドキュメントはこちらです。

Unity CLIとは?

Unity CLIは、Unity Editorのインストールやプロジェクトの起動といった作業を、コマンドラインから実行できるツールです。

これまでこうした操作はUnity Hubのデスクトップアプリから行うのが基本でしたが、Unity CLIは単独の実行ファイルとして配布され、Hubアプリなしで動作します。

そのため、GUIを持たないCIサーバーやビルドエージェント、ターミナル中心の環境と相性がいいのが特徴です。

ただし、大事な注意点がひとつあります。

Unity CLIは現在 experimental(実験的) な機能で、バージョンも 1.0.0-beta 系のベータ版です(本記事執筆時点の最新は 1.0.0-beta.3)。 仕様やコマンドは今後のリリースで変わる可能性があるため、本番の運用に組み込む前に公式ドキュメントで最新の状態を確認してください。

batchmodeでのビルド・テストとUnity CLI

Unityでビルドやテストを自動化するとき、よく使われてきたのがbatchmodeです。

Editorをヘッドレス(画面なし)で起動し、自分で書いた静的メソッドを-executeMethodで呼び出す方法ですね。

なお、batchmodeは今も有効な手段で、Unity CLIがこれを置き換えるわけではありません。

Unity CLIは、その一部の操作を専用コマンドとして扱いやすくしたもの、と考えると分かりやすいです。

# 従来:batchmode で自作メソッドを呼び、ビルドを実行する
Unity -batchmode -quit -projectPath /path/to/Project \
  -executeMethod BuildScript.PerformBuild \
  -logFile -

この方法では、ビルドやテストのためにBuildScript.PerformBuildのような入り口メソッドを自分で用意し、結果はログファイルを解析して判断する必要がありました。

Unity CLIでは、こうした操作の一部が専用コマンドとして用意されています。

例えばテストの実行は、unity testコマンドで直接呼び出せます。

# Edit Mode テストを実行し、結果を NUnit 形式の XML で出力する
unity test ./MyProject --mode editmode --output test-results.xml

結果はtest-results.xmlのようなNUnit形式のXMLで出力され、テストが失敗したときは終了コードで判断できます。

ビルドやスクリプト実行についても、バッチ処理を行うunity run、Pipeline経由でC#式を評価するunity eval、起動中のEditorへコマンドを送るunity commandなどが用意されています。

# Pipeline 経由で C# の式を評価する
unity eval 'UnityEngine.Application.unityVersion'

これらは比較的新しいベータで追加されたコマンドなので、実際のオプションはunity --helpや各コマンドの--helpで確認するのが確実です。

出力と終了コードが扱いやすい

Unity CLIは、自動化での扱いやすさを意識した作りになっています。

対話的なターミナルでは人が読みやすい形式、パイプへ渡したいときはtsv--format jsonを付ければJSON形式、というように出力を切り替えられます。

# 出力を JSON 形式にする
unity install lts --format json

ログ解析に頼っていたbatchmodeと比べると、結果をスクリプトで判定しやすくなっています。

Hub CLIからの移行

なお、Unity Hubにも従来から--headlessという構文のCLI機能(Hub CLI)がありました。

このHub CLIはUnity Hub 3.18.0以降で非推奨(deprecated)となり、Unity CLIへの移行が案内されています。

既存のスクリプトがある場合は、公式リファレンスの「Migrate from the Hub CLI」に移行表があるので参照してください。

Unity CLIでできること

Unity CLIには、Editorやプロジェクトを扱うためのコマンドが一通り用意されています。

インストールとセットアップ

まずはUnity CLI自体をインストールします。

macOSとLinuxでは、次のコマンドでインストールできます(UNITY_CLI_CHANNEL=betaでベータチャンネルを指定します)。

curl -fsSL <https://public-cdn.cloud.unity3d.com/hub/prod/cli/install.sh> | UNITY_CLI_CHANNEL=beta bash

インストールできたら、バージョンを表示して動作を確認します。

unity --version

コマンドが見つからない場合は、インストール先ディレクトリをPATHに追加するか、ターミナルを開き直してください。

Windowsの場合はPowerShellからinstall.ps1を使う方法が用意されています(正確なコマンドは公式ドキュメントのWindows向けタブを確認してください)。

CLI自体を最新版へ更新するときはunity upgradeを使います。

unity upgrade

Editor・モジュールをインストールする

Editorのインストールはunity installコマンドで行います。

# バージョンを指定してインストール
unity install 6000.3.7f1

# 最新の LTS をインストール
unity install lts

# Android モジュールも一緒にインストールする
unity install 6000.3.7f1 -m android --cm
  • mで追加するモジュールを指定し、-cm-childModules)を付けると子モジュールも同時に入ります。

バージョンは具体的な番号のほか、次のような別名(alias)でも指定できます。

Alias意味
latest最新リリース
lts最新のLTSリリース
default設定済みのデフォルトバージョン
62022 などそのメジャー系列の最新リリース

すでにインストール済みのEditorへ、あとからモジュールを追加したいときはunity install-modulesを使います。

# 既存の Editor に iOS と Android モジュールを追加する
unity install-modules -e 6000.3.7f1 -m ios android

# 追加できるモジュールの一覧を表示する
unity install-modules -e 6000.3.7f1 -l

ひとつ注意点として、手動でインストールしたEditorにはモジュールを追加できません。Hubまたはこのunity install経由で入れたEditorが対象です。

プロジェクトを開く

プロジェクトを開くにはunity openコマンドにパスを渡します。

unity open ./MyProject

第一引数がパスの場合はopenを省略でき、次のように書いても同じ意味になります。

unity ./MyProject

プロジェクトは、そのプロジェクトに記録されているEditorバージョンで開かれます。

その他のできること

Editorやプロジェクトの操作以外にも、いくつかのコマンドがあります。

サインイン関係はunity authでまとめられています。

unity auth login    # サインイン
unity auth status   # 状態の確認
unity auth logout   # サインアウト

インストール済みのEditorや利用可能なリリースの確認はunity editorsで行います。

unity editors -i    # インストール済みの Editor 一覧
unity editors -r    # 利用可能なリリース一覧

このほか、Hubが認識しているプロジェクトを管理するunity projects、CLIの表示言語を変えるunity languageなども用意されています。

使うときの注意

冒頭でも触れたとおり、Unity CLIはexperimentalかつベータ版です。

コマンドやオプションはリリースごとに追加・変更されているため、本記事のコマンドも将来変わる可能性があります。実際に使うときはunity --helpと公式のリリースノートで最新の状態を確認してください。

従来のHub CLIを使ったスクリプトがある場合は、非推奨になっている点をふまえて、早めに移行を検討しておくとよいでしょう。

まとめ

今回はUnityの新しいコマンドラインツール、Unity CLIについて説明しました。

Unity Hubアプリなしで、Editorやモジュールのインストール、プロジェクトを開く操作、さらにはテストの実行までターミナルから行えるのが大きな利点です。

構造化された出力と予測しやすい終了コードのおかげで、CIやビルド自動化にも組み込みやすくなっています。

まだexperimentalな段階なので、まずは検証用の環境でunity installunity openあたりから試してみてください。