

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# データモデルコードジェネレーター
<a name="managedintegrations-sdk-device-codegen"></a>

データモデルにコードジェネレーターを使用する方法について説明します。生成されたコードを使用して、クラウドとデバイスの間で交換されるデータモデルをシリアル化および逆シリアル化できます。

プロジェクトリポジトリには、C コードデータモデルハンドラーを作成するためのコード生成ツールが含まれています。以下のトピックでは、コードジェネレーターとワークフローについて説明します。

**Topics**
+ [コード生成プロセス](#managedintegrations-sdk-codegen-intro)
+ [環境設定](managedintegrations-sdk-codegen-env.md)
+ [デバイスのコードを生成する](managedintegrations-sdk-codegen-generate.md)

## コード生成プロセス
<a name="managedintegrations-sdk-codegen-intro"></a>

コードジェネレーターは、3 つの主要な入力から C ソースファイルを作成します。 AWS Zigbee クラスターライブラリ (ZCL) アドバンストプラットフォームからの Matter データモデル (.matter ファイル) の実装、前処理を処理する Python プラグイン、およびコード構造を定義する Jinja2 テンプレートです。生成中、Python プラグインはグローバル型定義を追加し、依存関係に基づいてデータ型を整理し、テンプレートレンダリングの情報をフォーマットすることで、.matter ファイルを処理します。

次の図は、C ソースファイルを作成するコードジェネレーターを示しています。

![End device SDK コードジェネレーターとその仕組み。](http://docs.aws.amazon.com/ja_jp/iot-mi/latest/devguide/images/iot-managedintegrations-sdk-codegen.png)


End device SDK には、 [https://github.com/project-chip/connectedhomeip/tree/master](https://github.com/project-chip/connectedhomeip/tree/master)プロジェクト[https://github.com/project-chip/connectedhomeip/blob/master/scripts/codegen.py](https://github.com/project-chip/connectedhomeip/blob/master/scripts/codegen.py)で と連携する Python プラグインと Jinja2 テンプレートが含まれています。この組み合わせにより、.matter ファイルの入力に基づいて、クラスターごとに複数の C ファイルが生成されます。

**Topics**
+ [Python プラグイン](#managedintegrations-sdk-codegen-plugin)
+ [Jinja2 テンプレート](#managedintegrations-sdk-codegen-jinja)
+ [(オプション) カスタムスキーマ](#managedintegrations-sdk-codegen-schema)

### Python プラグイン
<a name="managedintegrations-sdk-codegen-plugin"></a>

コードジェネレーター は`codegen.py`、.matter ファイルを解析し、その情報を Python オブジェクトとしてプラグインに送信します。プラグインファイルは、このデータを`iotmi_data_model.py`前処理し、提供されたテンプレートを使用してソースをレンダリングします。前処理には以下が含まれます。

1. グローバルタイプなど`codegen.py`、 から利用できない情報の追加

1. データ型に対してトポロジーソートを実行して正しい定義の順序を確立する
**注記**  
トポロジソートにより、元の順序に関係なく、依存関係の後に依存関係のタイプが定義されます。

### Jinja2 テンプレート
<a name="managedintegrations-sdk-codegen-jinja"></a>

エンドデバイス SDK は、データモデルハンドラーと低レベルの C 機能用にカスタマイズされた Jinja2 テンプレートを提供します。


**Jinja2 テンプレート**  

| テンプレート | 生成されたソース | 解説 | 
| --- | --- | --- | 
| cluster.h.jinja | iotmi\_device\_<cluster>.h | 低レベルの C 関数ヘッダーファイルを作成します。 | 
| cluster.c.jinja | iotmi\_device\_<cluster>.c | データモデルハンドラーにコールバック関数ポインタを実装して登録します。 | 
| cluster\_type\_helpers.h.jinja | iotmi\_device\_type\_helpers\_<cluster>.h | データ型の関数プロトタイプを定義します。 | 
| cluster\_type\_helpers.c.jinja | iotmi\_device\_type\_helpers\_<cluster>.c | クラスター固有の列挙、ビットマップ、リスト、構造のデータ型関数プロトタイプを生成します。 | 
| iot\_device\_dm\_types.h.jinja | iotmi\_device\_dm\_types.h | グローバルデータ型の C データ型を定義します。 | 
| iot\_device\_type\_helpers\_global.h.jinja | iotmi\_device\_type\_helpers\_global.h | グローバルオペレーションの C データ型を定義します。 | 
| iot\_device\_type\_helpers\_global.c.jinja | iotmi\_device\_type\_helpers\_global.c | ブール値、整数、浮動小数点、文字列、ビットマップ、リスト、構造などの標準データ型を宣言します。 | 

### (オプション) カスタムスキーマ
<a name="managedintegrations-sdk-codegen-schema"></a>

 エンドデバイス SDK は、標準化されたコード生成プロセスをカスタムスキーマと組み合わせます。これにより、デバイスとデバイスソフトウェアの Matter Data Model を拡張できます。カスタムスキーマは、デバイスdevice-to-cloud通信のデバイス機能を記述するのに役立ちます。

 形式、構造、要件など、マネージド統合データモデルの詳細については、「」を参照してください[マネージド統合データモデル](managedintegrations-data-model.md)。

 `codegen.py` ツールを使用して、次のようにカスタムスキーマの C ソースファイルを生成します。

**注記**  
 各カスタムクラスターには、次の 3 つのファイルに対して同じ**クラスター ID** が必要です。
+  クラウドに新しいカスタムクラスターを作成する機能レポート用のクラスターの表現を提供する `JSON`形式のカスタムスキーマを作成します。サンプルファイルは にあります`codegen/custom_schemas/custom.SimpleLighting@1.0`。
+  カスタムスキーマと同じ情報を含む`XML`形式で ZCL (Zigbee クラスターライブラリ) 定義ファイルを作成します。ZAP ツールを使用して、ZCL XML から Matter IDL ファイルを生成します。サンプルファイルは にあります`codegen/zcl/custom.SimpleLighting.xml`。
+  ZAP ツールからの出力は `Matter IDL File (.matter)`であり、カスタムスキーマに対応する Matter クラスターを定義します。これは、エンドデバイス SDK の C ソースファイルを生成するための`codegen.py`ツールの入力です。サンプルファイルは にあります`codegen/matter_files/custom-light.matter`。

 カスタムマネージド統合データモデルをコード生成ワークフローに統合する方法の詳細については、「」を参照してください[デバイスのコードを生成する](managedintegrations-sdk-codegen-generate.md)。