# 条件付きでアセンブリを加える

> Use scripting symbols to conditionally include or exclude assemblies from compilation.

プリプロセッサシンボルを使って、ゲームやアプリケーションのビルド (エディターの再生モードを含む) にアセンブリをコンパイルして加えるかどうかを制御することができます。Assembly Definition オプションの **Define Constraints** リストで、アセンブリを使用するために定義しなければならないシンボルを指定することができます。

1. Assembly Definition を選択すると、アセンブリのプロパティが **Inspector** に表示されます。

2. **Define Constraints** セクションで、**+** ボタンをクリックすると、制限のリストに新しいシンボルが追加されます。


   **Frame:**
   ![](/api/media?file=/engine/6000.0/media/images/asmdef-7.png)

3. シンボル名を入力します。

   名前の前に感嘆符を付けることで、シンボルを否定することができます。例えば、`!UNITY_WEBGL` という制約は、`UNITY_WEBGL` が定義されていない場合にアセンブリを加えます。

4. **Apply** をクリックします。

以下の記号を制約条件として使用できます。

* **Project Settings** 内の **Player** セクションにある [Scripting Define Symbols](/engine/6000.0/manual/unity-editor/editor-features/comp-manager-group/class-player-settings.md) 設定で定義されたシンボル。**Scripting Define Symbols** は、プロジェクトの [Build Profiles](/engine/6000.0/manual/unity-editor/editor-features/build-settings/build-profiles.md) で現在設定されているプラットフォームに適用されます。複数のプラットフォーム用にシンボルを定義するには、それぞれのプラットフォームに切り替えて **Scripting Define Symbols** フィールドを個別に変更する必要があります。
* Unity で定義されているシンボル。[Unity スクリプトシンボルのリファレンス](/engine/6000.0/manual/scripting/compilation-and-code-reload/script-compilation/conditional-compilation/symbol-reference.md) を参照してください。
* Assembly Definition アセットの [Version Defines](#define-symbols) セクションで定義されたシンボル。

スクリプトで定義されたシンボルは、定義する際に制約が満たされているかどうかを考慮しません。

詳細は [Define Constraints](/engine/6000.0/manual/scripting/compilation-and-code-reload/script-compilation/assembly-definition-files/class-assembly-definition-importer.md#define-constraints) を参照してください。

## Unity とプロジェクトパッケージのバージョンに基づくシンボルの定義##defining-symbols-based-on-unity-and-project-package-versions

プロジェクトが特定の Unity またはパッケージのバージョンを使用しているかどうかに応じて、アセンブリに異なるコードをコンパイルする必要がある場合には、**Version Defines** リストにエントリーを追加できます。このリストには、シンボルを定義する際のルールが記載されています。バージョン番号の定義には、特定のバージョンまたはバージョンの範囲を確認する論理式を指定できます。

シンボルを条件付きで定義するには、以下のようにします。

1. Assembly Definition アセットを選択すると、アセンブリのプロパティが **Inspector** に表示されます。

2. **Version Defines** セクションで、**+** ボタンをクリックしてリストに新しいエントリーを追加します。

3. プロパティを設定します。

   * **Resource**: このシンボルを定義するために、インストールされている必要がある **Unity**、パッケージ、またはモジュールを選択します。
   * **Define**: シンボル名
   * **Expression**: 特定のバージョンまたはバージョンの範囲を評価する式。ルールは \[Version Define Expressions] を参照してください。

   **Expression outcome** は、その式がどのバージョンを評価するかを示しています。結果が **Invalid** と表示される場合は、式構文が正しくありません。

   以下の例では、プロジェクトが Timeline 1.3 を使用しているかを確かめるシンボル `USE_TIMELINE_1_3` を定義し、プロジェクトが Unity 2021.2.0a7 以降で開かれているかを確かめる `USE_NEW_APIS` を定義します。


   **Frame:**
   ![](/api/media?file=/engine/6000.0/media/images/asmdef-8.png)

4. **Apply** をクリックします。

Assembly Definition で定義されたシンボルは、その定義のために作成されたアセンブリ内のスクリプトに対してのみ適用されます。

**Version Defines** リストを使って定義したシンボルは、**Define Constraints** として使用できます。そのため、プロジェクトに任意のパッケージの特定のバージョンもインストールされている場合にのみアセンブリを使用するよう指定できます。

### バージョン定義の式##version-define-expressions

式を使って、正確なバージョンまたはバージョンの範囲を指定することができます。**Version Define** 式は、数学的な範囲表記を使用しています。

角かっこ "\[]" は、終点を含む範囲を示します。

> `[1.3,3.4.1]` は `1.3.0 &lt;= x &lt;= 3.4.1` を評価します。

かっこ () は、終点を除いた範囲であることを示します。

> `(1.3.0,3.4)` は `1.3.0 &lt; x &lt; 3.4.0` を評価します。

1 つの式の中で、両方の範囲タイプを混在させることができます。

> `[1.1,3.4)` は `1.1.0 &lt;= x &lt; 3.4.0` を評価します。

> `(0.2.4,5.6.2-preview.2]` は `0.2.4 &lt; x &lt;= 5.6.2.-preview.2` を評価します。

正確なバージョンを指定するには、角かっこに単一のバージョン指定子を示します。

> `[2.4.5]` は `x = 2.4.5` を評価します。

ショートカットとして、範囲かっこを付けずに単一のバージョンを入力すると、その式はそのバージョン以降を含むことを示します。

> `2.1.0-preview.7` は `x &gt;= 2.1.0-preview.7` を評価します。

\_\_注意\_\_式にはスペースは許可されません。ワイルドカード文字はサポートされません。

### Unity のバージョン番号##unity-versioning-scheme

Unity の現在のバージョン (および Assembly Definitions をサポートするすべてのバージョン) では、バージョン指定子は MAJOR.MINOR.REVISION の 3 つの部分で構成されています。例えば、 `2017.4.25f1`、`2018.4.29f1`、`2019.4.7f1` などです。

* MAJOR バージョンは、Unity `2022.x.z` 以前ではリリース年を表す 4 桁の数字、または Unity 6 (6000.x.z) 以降ではメジャー技術バージョンです。

* MINOR バージョンは、1、2、3、4 などターゲットリリースを 4 つに分けたものです。

* REVISION 指定子は、それ自体に 3 つの部分があります。形式は RRzNN で、以下の内容を表します。

  * RR は 1 桁または 2 桁の改訂番号です。

  * z はリリースタイプを示す文字です。

    * a = アルファリリース
    * b = ベータリリース
    * f = 通常の一般公開リリース
    * c = 中国リリースバージョン (f と同等)
    * p = パッチリリース
    * x = 実験的リリース

  * NN は 1 桁または 2 桁の増分番号です。

リリースタイプ指定子は以下のように比較されます。

> `a &lt; b &lt; f = c &lt; p &lt; x`

アルファリリースはベータリリースよりも前、ベータリリースは通常の (f) リリースや中国 (c) リリースより前とみなされます。パッチリリースは同じ改訂番号を持つ通常のリリースまたは中国のリリースよりも常に後であり、実験的リリースはすべてのリリースタイプの後になります。実験的リリースでは、最後の増分番号は使用しないため注意してください。

Unity のバージョン番号には、REVISION コンポーネントの後に `2019.3.0f11-Sunflower` などのサフィックスを付けることができます。サフィックスは、バージョンを比較する目的では無視されます。

例えば、以下の式には、2017 または 2018 バージョンの Unity が含まれますが、2019 以降のバージョンは含まれません。

```
[2017,2019)
```

### パッケージとモジュールのバージョン番号##package-and-module-version-numbers

パッケージとモジュールのバージョン指定子は、[セマンティックバージョニング](https://semver.org/) 形式に従って 4 つの部分に分かれています。MAJOR.MINOR.PATCH-LABEL です。最初の 3 つの部分は必ず数字ですが、ラベルは文字列です。プレビュー中の Unity パッケージは、文字列 `preview` または `preview.n` を使用します (`n > 0`)。パッケージのバージョン番号の詳細は、[パッケージのバージョン管理](/engine/6000.0/manual/upm-server.md) を参照してください。

例えば、以下の式は、3.2 から 6.1 までの MAJOR.MINOR バージョンを持つパッケージのすべてのバージョンを含みます。

```
[3.2,6.1]
```

## 追加リソース##additional-resources

* [アセンブリ定義の作成](/engine/6000.0/manual/scripting/compilation-and-code-reload/script-compilation/assembly-definition-files/assembly-definitions-creating.md)
* [アセンブリの参照](/engine/6000.0/manual/scripting/compilation-and-code-reload/script-compilation/assembly-definition-files/assembly-definitions-referencing.md)
* [アセンブリメタデータ](/engine/6000.0/manual/scripting/compilation-and-code-reload/script-compilation/assembly-definition-files/metadata.md)
* [Assembly Definition のプロパティ](/engine/6000.0/manual/scripting/compilation-and-code-reload/script-compilation/assembly-definition-files/class-assembly-definition-importer.md)
* [Assembly Definition Reference のプロパティ](/engine/6000.0/manual/scripting/compilation-and-code-reload/script-compilation/assembly-definition-files/class-assembly-definition-reference-importer.md)
* [Assembly Definition ファイル形式](/engine/6000.0/manual/scripting/compilation-and-code-reload/script-compilation/assembly-definition-files/file-format.md)
