A beginner’s guide to Unity CLI and the Pipeline package
Thomas Krogh-Jacobsen - Unity Technologies
Senior Technical Content Marketing Manager
このウェブページは、お客様の便宜のために機械翻訳されたものです。翻訳されたコンテンツの正確性や信頼性は保証いたしかねます。翻訳されたコンテンツの正確性について疑問をお持ちの場合は、ウェブページの公式な英語版をご覧ください。
先日Unity CLIをリリースしましたが、非常に好評をいただいており、刺激的なユースケースが次々と生まれています。しかし、もしあなたが多くの人と同じように、コマンドラインツールをビット難しく感じたり、プログラマーというよりデザイナーのような感覚を持っていたり、あるいは単にまだ試してみる時間がなかったりするなら、このガイドはあなたのために作られたものです。
Unity CLIとは何ですか?
Unityエディターの最大の強みの一つはGUIであり、複雑なプロジェクトを視覚的に簡単に管理できる点です。エディターでは、プレハブの検査、マテリアル値の微調整、テストの実行、ライティングのベイク処理、コンソールエラーの追跡など、すべてマウスを数回クリックするだけで行えます。このワークフローは20年近くにわたってユーザーに利用されてきたが、反復作業、自動化、そしてAI駆動型(エージェント型)ワークフローにおけるボトルネックとなっている。AIエージェントはクリック操作や視覚情報のみのインターフェースを操作するできますが、そのためにはネイティブではない余分なの視覚解釈レイヤーが必要となり、処理速度が低下し、不要なオーバーヘッドが発生してトークンを急速に消費します。
ここで、新しいUnity CLIと実験的Unity Pipelineパッケージが登場します。
Unity CLI は、その名前が示すとおり、 Unity を管理するためのコマンドラインインターフェイスです。グラフィカルユーザーインターフェース (GUI)を持たないため、自動化やエージェントによるワークフローに非常に適しています。これは、実行、管理、およびUnityとのインターフェースに必要なものをすべて含んだ自己完結型のバイナリ(アプリケーション)として機能します。つまり、端末からUnityと直接通信するコマンドを実行できるため、マウスのクリックレイヤーやHubまたはエディターでのワークフロー全体を置き換えることができます。
注意: 新機能や改善点が頻繁に追加されています。執筆時点では、 Unity CLI の 1.0.0-beta.6 バージョンとcom.unity. パイプラインパッケージの 0.5.0-exp.1、およびUnity 6000.6.0b9 を組み合わせたものが最新の設定です。問題が発生した場合は、 Unity CLI のドキュメントを参照してください: https://docs.unity.com/en-us/unity-cli/use-unity-cli
Unity CLIとPipelineパッケージの連携方法
スタンドアロンのUnity CLI バイナリは環境設定 (エディタやモジュールのインストール、ライセンスの管理など) を処理しますが、真の価値はUnity Pipelineパッケージ( パイプライン ) と組み合わせたときに発揮されます。

このUnity Pipelineパッケージは、基本的に実行中のエディタをローカルHTTPサーバーに変換します。エディターは背景で起動したままになるため、読み込まれたシーンとアセットデータベースはシステムメモリ内で「ウォーム」状態に保たれます。すべてを事前にロードしておくことで、エンジンを冷えたステートから起動する際の煩わしい起動オーバーヘッドを完全にバイパス。端末(またはAIエージェント)からエディタを即座に操作して、テストの実行、シーンのロード、GameObjectsの変更を行うことができます。
このシステムは、悪名高いドメインリロードのボトルネックにも対応しています。Pipelineパッケージが登場する以前は、ユーザーまたはAIエージェントがディスク上のC#スクリプトに直接変更を加えるたびに、 Unityがプロジェクトをリビルドしてドメインをリロードまで待つ必要がありました。操作によっては、処理を進める前にエディター内の何かにフォーカスを合わせたり、クリックしたりする必要がある場合もあります。
しかし、Pipelineパッケージのローカルサーバーは、そのコンパイルプロセスを完全に非同期的に処理します。コンパイル中は接続が安定してアクティブな状態を維持するため、エディタが背景で再読み込みされている間も、端末セッションが切断されたりタイムアウトしたりすることはありません。
evalコマンドを使ってコードを動的に実行すると、さらに高速化できます。ここで、エディターの Pipelineパッケージは、インスタント トランスレーターのように機能し、C# スニペットをその場でコンパイルして、Unity のメインスレッドに直接渡します。この動的実行は完全に自己完結型であるため、プロジェクト全体の再コンパイルとドメインのリロードのプロセスを完全に回避します。面倒な待ち時間は一切スキップで、結果はミリ秒単位で返ってきます。
つまり、バック背景で大規模なプロジェクトのコンパイルが行われているからといって、負荷の高い自動化スクリプトがクラッシュしたり接続が切断されたりすることはありません。一方で、素早い端末コマンドはほぼ遅延なく実行されます。安定性とスピードを全く同じツールで実現できます。
MCPからUnity CLIへの移行
「 Unityの公式モデルコンテキストプロトコル(MCP)サーバーはどうなっているのか?」と疑問に思うかもしれません。なぜそれをそのまま使ったり、使い続けたりしてはいけないのですか?
簡潔に言うと、MCPのサポートを終了する予定はありません。しかし、 Unity CLIとPipelineパッケージは、MCPと同じユースケースをすべて処理できるだけでなく、さらに多くのユースケースに対応しており、しかもはるかに優れた性能と速度で処理します。
より詳しい説明は、アーキテクチャに帰着する。従来の MCP 設定では、AIエージェントとUnityの間の翻訳者として機能するアクティブなクライアント ハーネス (Claude Desktop や Cursor など) が必要です。しかし、Claude Codeのような最新の端末ネイティブエージェントは、標準的なシェルコマンドを直接実行することに既に非常に優れています。unity コマンドやunity evalのような直接CLI入力を使用することで、MCPサーバーの設定やメンテナンスに伴うオーバーヘッドを完全にバイパス。エージェントは、統一された超高速ローカルHTTPサーバーを介してUnityと直接通信できます。これは、よりクリーンな設定を記述でき、接続ソケットのデバッグに費やす時間を減らし、AIを純粋なネイティブ端末スピードで動作させることができることを意味します。
さらに、古い機能のMCPサーバーは、 C#パッケージとしてエディタープロセス内で直接実行されていました。これは、接続ブリッジ自体がUnityのメインスレッドとメモリスペースに縛られていることを意味していた。コードをコンパイルしたり、ドメインのリロードをトリガーしたりすると、 Unity はメモリをフラッシュするため、接続ソケットが切断されたり、 null例外が発生したり、エージェントがループの途中でストールことが頻繁にありました。
現在のcom.unity. パイプラインパッケージもエディタ内で実行される C#パッケージですが、HTTP サーバーと REST API (ソケットブリッジではない) を公開しているため、ドメインの再読み込みに対してより耐性があります。このローカルサーバーはコマンドを非同期で処理するため、コンパイルやドメインのリロードといった負荷の高い処理中でも、端末接続は完全に安定した状態を保ちます。
サマリーと、 Unity CLIに移行することで、接続の切断やトークンの無駄遣いを完全に回避できます。最後に、特定の用途でMCPを使用したい場合のために、CLIにはMCPモードも用意されています。
CLIおよびパイプラインパッケージのインストール
最新バージョンでは、CLIおよびPipelineパッケージのインストールはUnity Hubによって自動的に行われます。この記事執筆時点では、 Unity CLIをインストールする方法は複数存在するため、最新のソースについては必ずドキュメントを参照してください。
何らかの理由でまだインストールされていない場合は、端末コマンドを使用してインストールするのが最も簡単な方法です。動画をご覧いただくか、以下の手順に従ってください。
Unity CLIをインストールするには、使用しているプラットフォームに応じて、端末から以下のコマンドを実行するだけです。# macOS or Linux
curl -fsSL https://public-cdn.cloud.unity3d.com/hub/prod/cli/install.sh | UNITY_CLI_CHANNEL=beta bash
# Windows
$env:UNITY_CLI_CHANNEL='beta'; irm https://public-cdn.cloud.unity3d.com/hub/prod/cli/install.ps1 | iex
次のステップは、 Unity Pipelineパッケージをインストールすることです。Unity パイプラインのインストール
両方ともインストールが完了したら、正常に動作しているかどうかを再度確認できます。
インストールの確認
インストールを確認するには、以下のコマンドを実行してください。統一状態
以下のような結果が返されるはずです。Unity エディター (ポート7800): readyProject: /Users/thomaskr/Github/UnityProjects/MyAwesomeProjectVersion:6000.6.0b7PID: 85009
最初の行の横に「準備ステート」と表示されている場合、エディタが稼働中でアクセス可能であることを意味します。また、エディタがどのポートを使用しているか、プロジェクトのパス、エディタのバージョン、およびプロセス識別子(PID)も確認します。
次に、アクセスが認証されたことを確認するために、以下のコマンドを実行してください。
Unity認証ログイン
これにより、 UnityアカウントへのOAuthサインインのためにブラウザーが開きます。認証が完了すると、CLI は認証情報をシステムキーリングに保存するため、認証が必要な今後のコマンド ( unity projects リスト、unity ビルド、unity license、unity cloudなど) は、再プロンプトなしで自動的に実行されます。
いくつかの基本的なコマンドを実行する
CLIとPipelineパッケージのインストールが完了したので、さらにいくつかのコマンドを試してみましょう。まずは、` unity -- ヘルプコマンドから開始ましょう。このコマンドを使うと、できることの概要を簡単に確認できます。
unity --help
unity -- ヘルプコマンドを実行すると、利用可能なすべての基本コマンドのリストと、それぞれの概要および利用可能なオプションが表示されます。

最初は選択肢のビットに圧倒されるかもしれませんが、CLIの構文は非常に論理的で一貫性のあるパターンに従っています。
先ほど例として使ったコマンドを、今度はオプション付きで使ってみましょう。
unity auth login --non-interactive
左から右へ順に:
unity はUnity CLI を起動するため、メインコマンドとなります。auth loginはサブコマンドです。これらは、メインプログラムに具体的にどのようなアクションを行うべきかを指示する動詞のようなものだと考えてください。ここで、authはCLIを認証システムに誘導し、loginはログインするように指示します。--non-interactiveがオプションです。オプションはパラメータに似ていると考えてください。これらは、コマンドの動作方法を指示する修飾子です。この場合、CLIに対して、視覚的なブラウザーウィンドウを開くのではなく、端末経由で直接ログインするように指示します。オプションは、オン/オフのオプションの文脈で使用される場合、「フラグ」と呼ばれることもあります。
また、日常の端末ワークフローで素早く入力できるように設計された、1文字のショートカットもあります。
ヘルプオプション( ヘルプ )に戻りますが、 unity ヘルプを実行する代わりに、unity -hを使用することもできます。どちらも同じ結果になります。unity --help # 長いフラグバージョン(読みやすさ向上) unity -h # 短いフラグバージョン(日常的に高速)
短いフラグは単一のハイフン(-)を使用し、ショートカットとして設計されています。一方、長いフラグは二重ハイフン(--)を使用し、読みやすさを考慮して設計された、同等の完全な単語による説明です。
ヘルプコマンドは、ツールキットの中で最も重要なツールです。ネストされたコマンドのどのレベルにも追加して、すばやくドキュメントを取得できます。先ほど説明した認証コマンドの例をいくつかご紹介します。
#認証コマンドのヘルプ
unity auth --help
# loginコマンドに関するヘルプ
unity auth login --help
すべてのヘルプ画面には、コマンドが何をするのか、利用可能なオプション、そしてどのような引数を必要とするのかが即座に出力ます。迷ったときは、コマンド自体に聞いてみましょう!
別の例として、 releasesコマンドを試してみましょう。
Unityのリリース
これにより、この記事執筆時点で利用可能なUnityの全バージョンを一覧できるという、非常に便利な情報が得られます。

それでは、 -- ヘルプオプションを追加しましょう。
unity releases --help
Unity Releases ヘルプコマンドを実行すると、 Unityのバージョン検索を絞り込むために追加できるさまざまなオプションの説明が表示されます。

例えば、この記事を書いている時点では、 Unity 6.6b7のベータ版を使用しており、最新のベータ版をインストールしたいと考えています。基本的なUnity インストールコマンドを使用すると、シンプルなビジュアルインターフェースが表示され、そこで必要なバージョンを選択できます。
Unityのインストール

b9バージョンを選択しましょう。これにより、インストーラーがバック背景で実行開始れ、完了までに数分かかります。
インストールウィザードを使用する代わりに、 -- ヘルプコマンドを使用してすべてのコマンドの概要を確認することもできます。
unity install --help
これにより、以下のような概要が表示されます。

リストを見ると、インストールしたいUnityのバージョンを引数として渡すことができることがわかります。つまり、特定のバージョンをインストールしたい場合は、以下のコマンドを1つ使用して実行できます。#使用したいバージョンに置き換えるだけです
Unity インストール 6000.5.9f1
一方、新しいバージョンのエディタがインストールされたので、次はプロジェクトをアップグレードする必要があります。そのためには、プロジェクトを開く特定のバージョンを追加してください。これは、ハブにアクセスしてプロジェクトごとに別のエディターバージョンを選択してアップグレードプロジェクトをトリガーした場合と同じです。
Unity open --version 6000.6.0b9
先ほども触れたように、PipelineパッケージはUnity エディター内でできることのほぼすべてを網羅した巨大なツールボックスを提供します(ベータ版の成熟に伴い、新しいコマンドが継続的に追加されています)。
現在のプロジェクトで使用可能なコマンドを確認するには、以下を実行してください。
統一リスト
このコマンドを実行すると、各コマンドの名前、グループ、簡単な説明を示す高レベルの表が表示されます。これは、 eval 、 add_animator_layer 、 ビルド 、 find_assetsなど、数百ものビルトインコマンドを素早く閲覧するための出発点として非常に役立ちます。

入力データの形式方法を正確に知りたい場合。実行できます:
ユニティコマンド

引数なしでこれを実行すると、 Unityコマンドの詳細な「設計図」が表示され、登録されているすべてのコマンドのドキュメント(オプション(コマンドが期待する正確なフラグとデータ型)を含む)が提供されます。
どちらのコマンドも同じ接続されたエディタプロセスと通信しますが、返される情報の詳細度が異なります。カスタム自動化スクリプトの作成や、 Unityの内部動作を制御するエージェントワークフローの設定を開始すると、クリーンで自動化された呼び出しを構築するための最も頻繁に参照するツールとして、 unity コマンドがすぐに利用されるようになるでしょう。
最後に、 evalコマンドと、 Unityコンソール内で簡単なDebug.Log ( “Hello World” )テストを実行する方法を見て締めくくりましょう。eval は Pipelineパッケージコマンド(そして、おそらく 140 をビルトインコマンドの中で最もエキサイティングなもの) であり、Editor プロセスで C#コードを動的にコンパイルして実行します。以下のコマンドを実行してみてください。
unity command eval --code 'Debug.Log("hello from unity cli");'
これにより、JSON が「success」: true を返す以下のが得られます。これは、成功した場合です。

エディターでは、コンソールウィンドウでこれが実際に機能したことを確認できます。

コマンドを分解してみましょう。
unity command eval --code 'Debug.Log("hello from unity cli");'
左から右へ読む:
UnityはUnity CLIツールを実行します。コマンドは、「接続されているエディタと通信する」ように指示するサブコマンドです。evalは「私のためにコードを評価(実行)する」という意味のサブコマンドです。-- コード は、「実行するコードがここにあります」ということを示すオプション(またはフラグ)です。'Debug.Log("hello from unity cli");'は-- コードの値です。これは実際に実行されるコードです。
LLMとつながる
いくつかの基本的なコマンドを覚えておくと、 Unityのインストールに関するメンテナンス作業をスピードヘルプできますが、真価を発揮するのは、エージェントワークフローの自動化と統合を開始ときです。
Unity CLIとPipelineパッケージを使用すれば、お好みのエージェントを接続できます。つまり、Claude、Codex、Copilot、ローカルモデルなど、どのモデルを使用している場合でも、CLIは既存の好みの設定と統合するように設計されており、余分なの設定なしで接続できるはずです。
端末を開き、(cd コマンドを使用して) Unityプロジェクトディレクトリに直接操作する、「claude」(またはエージェントのコマンド) と入力してエージェントを開始。接続が確立されているかどうかは、エージェントに以下のな質問をすることで確認できます。
bashで「unity コマンド」を実行して、それが何ができるか教えてください。それから、簡単な「eval」コマンドをテストしてください。
MCPを使用してLLMを接続する
Unity はcom.unity.ai.assistantパッケージ内のエディター内 MCP サーバーを非推奨にしました。これは、 Unity Pipelineパッケージによって動作するUnity CLI のビルトインMCP サーバー ( unity mcp ) に置き換えられました。同じプロトコルを使用するため、クライアントはシームレスに接続できます。MCPモードは、任意のシェルコマンドを実行できない、またはコマンドライン構成に問題を抱えるエージェント向けに、引き続き完全にサポートされます。
MCPを使用するには、以下のコマンドを実行してください。
Unity MCP の設定
このコマンドは、設定をエージェントの設定に直接自動的に挿入します。LLMが接続されているかどうかをテストするには、LLMツールに以下のようなコマンドを実行するように促す簡単なテストを実行してください。
現在開いているシーンの中央に、2×2×2のキューブを作成してください。次に、3つの軸すべてを中心に毎秒45度の速度で連続的に回転スクリプトを作成します。
クロード・コードが答えたのは以下の通りです。

完了すると、再生モードに入り、シーンが実行されるので、キューブが正しく回転していることを確認できます。

独自のカスタムコマンドを追加して拡張する
CLIにビルトイン一連の機能は、再生モードの切り替え、再コンパイル、単位の実行など、基本的な操作をすべて網羅しています。しかし、このアーキテクチャの真の強みは、その拡張性にある。カスタムコマンドを簡単に作成することで、AIエージェントにプロジェクト固有のコンテキストや、ゲーム専用に構築された一意のツールを提供できます。
カスタムコマンドの作成は非常に簡単です。必要なのは、標準的な静的C#メソッドを作成し、 [CliCommand]属性と[CliArg]属性で装飾することだけです。
Pipelineパッケージはコンパイル時にこれらの属性を自動的に検出するため、手動での設定や登録ファイルは一切不要です。引数なしでunity コマンド を実行すると、CLI は組み込みコマンドと並んで利用可能なすべてのカスタムコマンドを動的に一覧表示します。
注:[CliCommand]属性を使用すると、コマンドをCLI経由で検出および呼び出しできるようになります。パラメータ付き実行の場合、CLIスタイルのフラグを渡すのではなく、C#構文の`eval`コマンドを使用してメソッドを直接コール。
それでは、簡単な「Hello World」カスタムコマンドのアクションを外観ましょう。
HelloWorldCommand.csという名前の新しい C#スクリプトを作成します。クラスとメソッドが静的であることを確認し、 Unity名前空間を含めてください。
using UnityEngine;
using Unity.Pipeline.Commands;
public static class HelloWorldCommand
{
[CliCommand("hello-world", "A simple hello world command")]
public static void SayHello()
{
Debug.Log("Hello, World!これはカスタムCLIコマンドです。);
}
}
新しいコマンドを実行するには、端末を起動して以下のコマンドを実行してください。
Unityコマンドhello-world
端末は次のような外観になるはずです。

コンソールログは次のようになります。

[CliArg]属性を使用してパラメータを渡す必要がある場合は、この特徴を拡張することもできます。
using UnityEngine;
using Unity.Pipeline.Commands;
public static class HelloWorldCommand
{
[CliCommand("hello-world", "A simple hello world command")]
public static void SayHello(
[CliArg("name", "Who to greet")] string name)
{
Debug.Log($"こんにちは、{name}!これはカスタムCLIコマンドです。);
}
}
新しいコマンドを実行するには、端末を起動して以下を実行してください。
unity command hello-world --name "thomas"
Unity Agentプラグインのインストール
Unityは公式のゲーム開発プラグインも提供しており、この記事執筆時点では、Claude Code、Codex、Grokに対応している。ゲーム開発とパフォーマンス最適化のための厳選されたスキルを提供します。一度インストールすれば、上記のいずれかのUnityプロジェクトで作業する際に、スキルは自動的にロード。Claudeにインストールするには、以下のコマンドを実行するだけです。
claude plugin marketplace add Unity-Technologies/unity-agent-plugin
github.com/Unity-Technologies/unity-agent-plugin
Claude Codeユーザーで新しいプロジェクトを開始する場合のもう1つの簡単なヒントは、初期化フェーズを実行することです。これにより、 claude.mdファイルが作成され、プロジェクトに関する基本的なコンテキストがClaudeに設定されます。これは、プロジェクトフォルダーのルートルートに存在するマークダウンファイルで、Claude Codeがセッション開始時に毎回読み込むファイルです。
/init # このコマンドをClaude Code内で実行
そうすることで、例えばUIとしてUI ToolkitよりもuGUIを好む、古いInput Managerよりも新しいInput Systemを好むなど、あなたが好む技術スタックについてClaudeに知らせることができます。また、シングルトンではなくサービスロケーターパターンを採用したり、UIデザインにMVPを採用したりするなど、アーキテクチャ決定にも活用できます。
Claudeは動作中に自動的に記憶を構築し、ユーザーが何も記述しなくてもセッション間で学習内容を保存しますが、Claude.mdファイルは特定のプロジェクトの全体的な向きを定めるのに役立ちます。
プロセスを進めていくにつれて、コードスタイルガイドなど、より詳細なカスタム指示を追加することを検討できます。AIアシスタントのカスタム指示におけるこの仕組みについて記事を書きましたが、Claude Codeでも原理は全く同じなので、もっと詳しく知りたい方はそちらをご覧ください。
次の一手
この導入が、ヘルプのスタートに役立つものであったことを願っています。エージェントワークフローをさらに最適化することに関心がある場合は、 Unity C#コードスタイルガイドの定義を含む、LLM用のカスタム指示の設定に関する記事をご覧ください。
こちらの動画をご覧ください。