

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

# コンポーネント
<a name="greengrass-development-kit-cli-component"></a>

Greengrass コンポーネントの作成、ビルド、パブリッシュには、AWS IoT Greengrass Development Kit Command-Line Interface (GDK CLI) の `component` コマンドを使用します。

**Topics**
+ [初期化](#greengrass-development-kit-cli-component-init)
+ [ビルド](#greengrass-development-kit-cli-component-build)
+ [公開](#greengrass-development-kit-cli-component-publish)
+ [リスト](#greengrass-development-kit-cli-component-list)

## 初期化
<a name="greengrass-development-kit-cli-component-init"></a>

コンポーネントテンプレートまたはコミュニティコンポーネントから Greengrass コンポーネントフォルダを初期化します。

<a name="gdk-cli-component-templates-community-components"></a>GDK CLI は、[Greengrass Software Catalog](greengrass-software-catalog.md) および [GitHub 上の AWS IoT Greengrass コンポーネントテンプレートリポジトリ](https://github.com/aws-greengrass/aws-greengrass-component-templates)のコンポーネントテンプレートからコミュニティコンポーネントを取得します。

**注記**  
<a name="gdk-cli-component-init-empty-folder-requirement"></a>GDK CLI v1.0.0 を使用している場合は、このコマンドは空のフォルダで実行する必要があります。GDK CLI がテンプレートまたはコミュニティコンポーネントを現在のフォルダにダウンロードします。  
<a name="gdk-cli-component-init-empty-folder-requirement-gdk-cli-v1.1.0"></a>GDK CLI v1.1.0 以降を使用する場合、`--name` 引数を使用して、GDK CLI がテンプレートまたはコミュニティコンポーネントをダウンロードするフォルダを指定することができます。この引数を使用する場合は、存在しないフォルダを指定します。GDK CLI によってフォルダが作成されます。この引数を指定しなかった場合、GDK CLI は現在のフォルダを使用しますが、このフォルダは空である必要があります。  
コンポーネントが [Zip ビルドシステム](gdk-cli-configuration-file.md#gdk-cli-configuration-file-build-system)を使用する場合、GDK CLI は、コンポーネントのフォルダ内の特定のファイルを、コンポーネントフォルダと同じ名前の zip ファイルに圧縮します。例えば、コンポーネントフォルダの名前が `HelloWorld` の場合、GDK CLI は `HelloWorld.zip` という名前の zip ファイルを作成します。コンポーネント recipe では、zip アーティファクト名はコンポーネントフォルダの名前と一致する必要があります。Windows デバイスで GDK CLI バージョン 1.0.0 を使用する場合、コンポーネントフォルダと zip ファイル名には小文字のみを含める必要があります。  
zip ビルドシステムを使用するテンプレートまたはコミュニティコンポーネントをテンプレートまたはコンポーネントとは異なる名前のフォルダに初期化する場合は、コンポーネント recipe で zip アーティファクト名を変更する必要があります。ZIP ファイル名がコンポーネントフォルダの名前と一致するように `Artifacts` および `Lifecycle` の定義を更新します。次の例では、`Artifacts` と `Lifecycle` の定義内の zip ファイル名を強調表示しています。  

```
{
  ...
  "Manifests": [
    {
      "Platform": {
        "os": "all"
      },
      "Artifacts": [
        {
          "URI": "s3://BUCKET_NAME/COMPONENT_NAME/COMPONENT_VERSION/HelloWorld.zip",
          "Unarchive": "ZIP"
        }
      ],
      "Lifecycle": {
        "Run": "python3 -u {artifacts:decompressedPath}/HelloWorld/main.py {configuration:/Message}"
      }
    }
  ]
}
```

```
---
...
Manifests:
  - Platform:
      os: all
    Artifacts:
      - URI: "s3://BUCKET_NAME/COMPONENT_NAME/COMPONENT_VERSION/HelloWorld.zip"
        Unarchive: ZIP
    Lifecycle:
      Run: "python3 -u {artifacts:decompressedPath}/HelloWorld/main.py {configuration:/Message}"
```

**概要**  

```
$ gdk component init
    [--language]
    [--template]
    [--repository]
    [--name]
```

**引数 (コンポーネントテンプレートから初期化)**  
+ `-l`、`--language` - 指定したテンプレートに使用するプログラミング言語。

  `--repository` または `--language` および `--template` を指定する必要があります。
+ `-t`、`--template` - ローカルコンポーネントプロジェクトに使用するコンポーネントテンプレート。利用可能なテンプレートを表示するには、[list](#greengrass-development-kit-cli-component-list) コマンドを使用します。

  `--repository` または `--language` および `--template` を指定する必要があります。
+ `-n`、`--name` - (オプション) GDK CLI がコンポーネントを初期化するローカルフォルダの名前。存在しないフォルダを指定します。GDK CLI によってフォルダが作成されます。

  この機能は GDK CLI v1.1.0 以降で利用できます。

**引数 (コミュニティコンポーネントから初期化)**  
+ `-r`、`--repository` - ローカルフォルダにチェックアウトするコミュニティコンポーネント。利用可能なコミュニティコンポーネントを表示するには、[list](#greengrass-development-kit-cli-component-list) コマンドを使用します。

  `--repository` または `--language` および `--template` を指定する必要があります。
+ `-n`、`--name` - (オプション) GDK CLI がコンポーネントを初期化するローカルフォルダの名前。存在しないフォルダを指定します。GDK CLI によってフォルダが作成されます。

  この機能は GDK CLI v1.1.0 以降で利用できます。

**出力**:  
次の例は、このコマンドを実行して Python Hello World テンプレートからコンポーネントフォルダを初期化したときに生成される出力を示しています。  

```
$ gdk component init -l python -t HelloWorld
[2021-11-29 12:51:40] INFO - Initializing the project directory with a python component template - 'HelloWorld'.
[2021-11-29 12:51:40] INFO - Fetching the component template 'HelloWorld-python' from Greengrass Software Catalog.
```
次の例は、このコマンドを実行してコミュニティコンポーネントからコンポーネントフォルダを初期化したときに生成される出力を示しています。  

```
$ gdk component init -r aws-greengrass-labs-database-influxdb
[2022-01-24 15:44:33] INFO - Initializing the project directory with a component from repository catalog - 'aws-greengrass-labs-database-influxdb'.
[2022-01-24 15:44:33] INFO - Fetching the component repository 'aws-greengrass-labs-database-influxdb' from Greengrass Software Catalog.
```

## ビルド
<a name="greengrass-development-kit-cli-component-build"></a>

AWS IoT Greengrass サービスにパブリッシュできる recipe とアーティファクトにコンポーネントのソースを構築します。GDK CLI は、[GDK CLI configuration file](gdk-cli-configuration-file.md) (GDK CLI 設定ファイル) で指定した `gdk-config.json` で構築システムを実行します。このコマンドは、`gdk-config.json` ファイルが存在するフォルダと同じフォルダで実行する必要があります。

このコマンドを実行すると、GDK CLI は、コンポーネントフォルダ内の `greengrass-build` フォルダに recipe とアーティファクトを作成します。GDK CLI は、recipe を `greengrass-build/recipes` フォルダに保存し、アーティファクトを `greengrass-build/artifacts/componentName/componentVersion` フォルダに保存します。

GDK CLI v1.1.0 以降を使用すると、コンポーネント recipe で S3 バケットには存在して、ローカルコンポーネントの構築フォルダには存在しないアーティファクトを指定できます。この機能を使用すると、機械学習モデルなどの大きなアーティファクトを有するコンポーネントを開発するときに、帯域幅の使用量を減らすことができます。

コンポーネントの構築後は、以下のいずれかの操作を実行すると Greengrass コアデバイス上でコンポーネントをテストできます。
+ AWS IoT Greengrass Core ソフトウェアの実行場所とは異なるデバイスで開発する場合、Greengrass コアデバイスにデプロイするには、コンポーネントをパブリッシュする必要があります。コンポーネントを AWS IoT Greengrass サービスにパブリッシュし、Greengrass コアデバイスにデプロイします。詳細については、「[パブリッシュ](#greengrass-development-kit-cli-component-build)コマンド」および「[デプロイの作成](create-deployments.md)」を参照してください。
+ AWS IoT Greengrass Core ソフトウェアを実行しているデバイスと同じデバイスで開発する場合、コンポーネントを AWS IoT Greengrass サービスにデプロイするか、ローカルデプロイを作成してコンポーネントをインストールして実行することができます。ローカルデプロイを作成するには、Greengrass CLI を使用します。詳細については、「[Greengrass コマンドラインインターフェイス](gg-cli.md)」および「[ローカルデプロイで AWS IoT Greengrass コンポーネントをテストする](test-components.md)」を参照してください。ローカルデプロイを作成するときは、`greengrass-build/recipes` を recipe フォルダとして、`greengrass-build/artifacts` をアーティファクトフォルダとして使用します。

**概要**  

```
$ gdk component build
```

**引数**:  
なし

**出力**:  
次の例は、このコマンドを実行したときに生成される出力を示しています。  

```
$ gdk component build
[2021-11-29 13:18:49] INFO - Getting project configuration from gdk-config.json
[2021-11-29 13:18:49] INFO - Found component recipe file 'recipe.yaml' in the  project directory.
[2021-11-29 13:18:49] INFO - Building the component 'com.example.PythonHelloWorld' with the given project configuration.
[2021-11-29 13:18:49] INFO - Using 'zip' build system to build the component.
[2021-11-29 13:18:49] WARNING - This component is identified as using 'zip' build system. If this is incorrect, please exit and specify custom build command in the 'gdk-config.json'.
[2021-11-29 13:18:49] INFO - Zipping source code files of the component.
[2021-11-29 13:18:49] INFO - Copying over the build artifacts to the greengrass component artifacts build folder.
[2021-11-29 13:18:49] INFO - Updating artifact URIs in the recipe.
[2021-11-29 13:18:49] INFO - Creating component recipe in 'C:\Users\MyUser\Documents\greengrass-components\python\HelloWorld\greengrass-build\recipes'.
```

## 公開
<a name="greengrass-development-kit-cli-component-publish"></a>

このコンポーネントを AWS IoT Greengrass サービスにパブリッシュします。このコマンドは、構築したアーティファクトを S3 バケットにアップロードし、recipe 内のアーティファクト URI を更新し、recipe からコンポーネントの新しいバージョンを作成します。GDK CLI は S3 バケットと、[GDK CLI configuration file](gdk-cli-configuration-file.md) (GDK CLI 設定ファイル) の `gdk-config.json` で指定した AWS リージョンを使用します。このコマンドは、`gdk-config.json` ファイルが存在するフォルダと同じフォルダで実行する必要があります。

<a name="gdk-cli-s3-bucket-name-formation"></a>GDK CLI v1.1.0 以降を使用する場合、`--bucket` 引数を指定して、GDK CLI がコンポーネントのアーティファクトをアップロードする S3 バケットを指定します。<a name="gdk-cli-s3-bucket-name-formation-format"></a>この引数を指定しない場合、GDK CLI は名前が `bucket-region-accountId` である S3 バケットにアップロードします。ここでは、`gdk-config.json` で指定する値は *bucket* と *region* であり、*accountId* は AWS アカウント ID です。GDK CLI は、バケットが存在しない場合に作成します。

GDK CLI v1.2.0 以降を使用する場合には、`--region` パラメータを使用して、GDK CLI 設定ファイル内で指定されている AWS リージョン を上書きできます。`--options` パラメータを使用すると、追加のオプションを指定することも可能です。使用可能なオプションのリストについては、「[Greengrass Development Kit CLI 設定ファイル](gdk-cli-configuration-file.md)」を参照してください。

このコマンドを実行すると、GDK CLI は、recipe で指定したバージョンでコンポーネントをパブリッシュします。`NEXT_PATCH` を指定した場合、GDK CLI は、まだ存在しない次のパッチバージョンを使用します。セマンティックバージョンは、major.minor.patch という番号方式になっています。詳細については、「[セマンティックバージョンの仕様](https://semver.org/)」を参照してください。

**注記**  
GDK CLI v1.1.0 以降を使用する場合、このコマンドを実行すると、GDK CLI はコンポーネントが構築されているかどうかをチェックします。コンポーネントが構築されていない場合は、GDK CLI はコンポーネントをパブリッシュする前に[コンポーネントを構築](#greengrass-development-kit-cli-component-build)します。

**概要**  

```
$ gdk component publish
    [--bucket] [--region] [--options]
```

**引数**:  
+ `-b`,`--bucket` - (オプション) GDK CLI がコンポーネントアーティファクトを公開する先の S3 バケットの名前を指定します。

   <a name="gdk-cli-s3-bucket-name-formation-format"></a>この引数を指定しない場合、GDK CLI は名前が `bucket-region-accountId` である S3 バケットにアップロードします。ここでは、`gdk-config.json` で指定する値は *bucket* と *region* であり、*accountId* は AWS アカウント ID です。GDK CLI は、バケットが存在しない場合に作成します。

  GDK CLI は、バケットが存在しない場合に作成します。

  この機能は GDK CLI v1.1.0 以降で利用できます。
+ `-r`、`--region` – (オプション) コンポーネントを作成する際の、送り先となる AWS リージョン の名前を指定します。この引数は、GDK CLI 設定内にあるリージョン名を上書きしま

  この機能は GDK CLI v1.2.0 以降で利用できます。
+ `-o`、`--options` (オプション) コンポーネントを公開するためのオプションのリストを指定します。この引数は、有効な JSON 文字列か、公開オプションが記載されている JSON ファイルへのファイルパスにする必要があります。この引数は、GDK CLI 設定内のオプションよりも優先されます。

  この機能は GDK CLI v1.2.0 以降で利用できます。

**出力**:  
次の例は、このコマンドを実行したときに生成される出力を示しています。  

```
$ gdk component publish
[2021-11-29 13:45:29] INFO - Getting project configuration from gdk-config.json
[2021-11-29 13:45:29] INFO - Found component recipe file 'recipe.yaml' in the  project directory.
[2021-11-29 13:45:29] INFO - Found credentials in shared credentials file: ~/.aws/credentials
[2021-11-29 13:45:30] INFO - Publishing the component 'com.example.PythonHelloWorld' with the given project configuration.
[2021-11-29 13:45:30] INFO - No private version of the component 'com.example.PythonHelloWorld' exist in the account. Using '1.0.0' as the next version to create.
[2021-11-29 13:45:30] INFO - Uploading the component built artifacts to s3 bucket.
[2021-11-29 13:45:30] INFO - Uploading component artifacts to S3 bucket: {bucket}. If this is your first time using this bucket, add the 's3:GetObject' permission to each core device's token exchange role to allow it to download the component artifacts. For more information, see https://docs.aws.amazon.com/greengrass/v2/developerguide/device-service-role.html.
[2021-11-29 13:45:30] INFO - Not creating an artifacts bucket as it already exists.
[2021-11-29 13:45:30] INFO - Updating the component recipe com.example.PythonHelloWorld-1.0.0.
[2021-11-29 13:45:30] INFO - Creating a new greengrass component com.example.PythonHelloWorld-1.0.0
[2021-11-29 13:45:30] INFO - Created private version '1.0.0' of the component in the account.'com.example.PythonHelloWorld'.
```

## リスト
<a name="greengrass-development-kit-cli-component-list"></a>

利用可能なコンポーネントテンプレートとコミュニティコンポーネントのリストを取得します。

<a name="gdk-cli-component-templates-community-components"></a>GDK CLI は、[Greengrass Software Catalog](greengrass-software-catalog.md) および [GitHub 上の AWS IoT Greengrass コンポーネントテンプレートリポジトリ](https://github.com/aws-greengrass/aws-greengrass-component-templates)のコンポーネントテンプレートからコミュニティコンポーネントを取得します。

このコマンドの出力を [init](#greengrass-development-kit-cli-component-init) コマンドにパスすることで、テンプレートとコミュニティコンポーネントからコンポーネントリポジトリを初期化できます。

**概要**  

```
$ gdk component list
    [--template]
    [--repository]
```

**引数**:  
+ `-t`、`--template` - (オプション) 利用可能なコンポーネントテンプレートを一覧表示するには、この引数を指定します。このコマンドは、各テンプレートの名前と言語を `name-language` の形式で出力します。たとえば、`HelloWorld-python` の場合、テンプレート名は `HelloWorld` そして言語は `python` になります。
+ `-r`、`--repository` - (オプション) 利用可能なコミュニティコンポーネントリポジトリを一覧表示するには、この引数を指定します。

**出力**:  
次の例は、このコマンドを実行したときに生成される出力を示しています。  

```
$ gdk component list --template
[2021-11-29 12:29:04] INFO - Listing all the available component templates from Greengrass Software Catalog.
[2021-11-29 12:29:04] INFO - Found '2' component templates to display.
1. HelloWorld-python
2. HelloWorld-java
```