# ローカルデプロイの自動化

> Automate the deployment of your Cloud Code module with the Unity Gaming Services CLI or project file.

このガイドでは、Unity Gaming Services (UGS) CLI またはプロジェクトファイルを使用して Cloud Code モジュールのデプロイを自動化する方法について説明します。

デプロイを CI/CD パイプラインに統合する場合は、[CI/CD とのインテグレーション](./automation.md) を参照してください。

## 前提条件##prerequisites

ローカルデプロイを自動化するには、Cloud Code モジュールと UGS CLI が必要です。

1. [Cloud Code モジュール](../getting-started) を作成します。
2. [CLI のインストール](https://services.docs.unity.com/guides/ugs-cli/latest/general/get-started/install-the-cli/) (Unity Gaming Services CLI) のステップに従って、UGS CLI をインストール、設定、および認証します。

## UGS CLI を使用した自動化##automate-with-the-ugs-cli

UGS CLI には、ソリューションをデプロイするために使用できる `deploy` コマンドが用意されています。`deploy` コマンドは、モジュールを圧縮し、Cloud Code サービスにデプロイします。

デプロイするには、プロジェクトディレクトリの端末から以下のコマンドを実行します。

```bash
ugs deploy <path_to_solution>
```

> **Note:**
>
> **ノート**: コンパイルをサポートするには、ソリューションに [メインプロジェクト](./module-structure.md#main-project) の発行プロファイルが含まれる必要があります。詳細については、[C# ソリューションのデプロイ](./write-modules/cli.md#deploy-c-solutions) を参照してください。

## プロジェクトファイルを使用した自動化##automate-using-the-project-file

ビルド時にプロジェクトを公開、圧縮、デプロイするようにプロジェクトファイルを設定した場合は、プロジェクトファイルを使用して Cloud Code モジュールのデプロイを自動化できます。

> **Note:**
>
> **ノート**: これは上級者向けのワークフローです。ほとんどの場合、UGS CLI の [Deploy コマンド](#automate-with-the-ugs-cli) で十分です。

詳細については、Microsoft ガイドの [プロジェクトファイルについて](https://learn.microsoft.com/en-us/aspnet/web-forms/overview/deployment/web-deployment-in-the-enterprise/understanding-the-project-file) を参照してください。

スクリプトでは、[UGS CLI Deploy](./write-modules/cli.md#deploy-modules) コマンドを使用します。

### プロジェクトファイル設定##project-file-configuration

以下のプロジェクトファイル設定を使用して、Cloud Code モジュールのデプロイを自動化できます。

```xml
<Target Name="RemoveDirectory">
    <RemoveDir Directories="$(OutDir)Module/" />
 </Target>
<Target Name="PublishModule" DependsOnTargets="RemoveDirectory">
    <Exec Command="dotnet publish -r linux-x64 --no-self-contained -o $(OutDir)Module/$(AssemblyName)" />
</Target>
<Target Name="ZipModule" DependsOnTargets="PublishModule">
    <ZipDirectory SourceDirectory="$(OutDir)Module/$(AssemblyName)" DestinationFile="$(OutDir)Module/$(AssemblyName).ccm" />
</Target>
<Target Name="DeployModule" DependsOnTargets="ZipModule">
    <Exec Command="ugs deploy $(OutDir)/Module/$(AssemblyName).ccm" />
</Target>
```

上記の設定をコピーしてプロジェクトファイルに貼り付けます。

* `RemoveDirectory` ターゲットは `Module` ディレクトリを `OutDir` ディレクトリから削除します。
* `PublishModule` ターゲットはモジュールを `Module` ディレクトリに公開し、必要なアセンブリを生成します。
* `ZipModule` ターゲットは `Module` ディレクトリを圧縮します。
* `DeployModule` ターゲットは、モジュールを Cloud Code サービスにデプロイします。

#### Ready to Run コンパイル (任意)##ready-to-run-compilation-optional

Ready to Run コンパイルは、Cloud Code モジュールのコールドスタート時間を改善するオプションの機能です。このオプションがモジュールに与える影響を確認するには、\[Ready to Run]\(./package-code.mdx#ready-to-run-r2r-compilation を参照してください。

Ready to Run コンパイルを有効にするには、`PublishModule` ターゲットを変更して `PublishReadyToRun` プロパティを加えます。

```xml
<Target Name="PublishModule" DependsOnTargets="RemoveDirectory">
    <Exec Command="dotnet publish -r linux-x64  -p:PublishReadyToRun=true --no-self-contained -o $(OutDir)Module/$(AssemblyName)" />
 </Target>
```

### ターゲットの実行##running-targets

ターゲットを実行するには、プロジェクトディレクトリの端末から以下のコマンドを実行します。

```bash
msbuild /t:DeployModule
```

`msbuild ` コマンドが見つからない場合は、`msbuild` パスを `PATH` 環境変数に追加することが必要な場合があります。

> **Note:**
>
> **ノート**: `DeployModule` を別のターゲット名に置き換えると、他の任意のターゲットを個別に実行できます。ターゲットは相互に依存するため、実行されるターゲットはそれが依存するターゲットも実行します。

### 予想される出力##expected-output

デプロイに成功した場合は、以下の出力が表示されます。

```text
Deployed:
    ExampleModule.ccm
```
