(57)【要約】デバイスをビルドするためにコードモジュールを提供するための技術が記載されている。デバイスを設計する時に、使用されるハードウェアコンポーネントの指示が受信されてもよい。デバイスのユースケースが受信されてもよい。ハードウェアコンポーネントと互換性があるコードモジュールのリストが提供されてもよい。コードモジュールのリストはデバイスのユースケースに基づいてもよい。コードモジュールの選択は、ハードウェアコンポーネントと互換性があるコードモジュールのリストから受信されてもよい。コードモジュールはデバイスを設計する際に使用するために提供されてもよい。【選択図】図１Ｂ
2021500686.tif 000002
【特許請求の範囲】
【請求項１】
１つまたは複数のプロセッサによって実行される命令が具現化されている非一時的な機械可読記憶媒体であって、前記命令は、
サービスプロバイダ環境において動作するデバイス構成サービスから、デバイスを設計する時に利用可能なハードウェアコンポーネントのリストを提供することと、
前記ハードウェアコンポーネントのリストからハードウェアコンポーネントの選択を受信することと、
前記デバイスのユースケースを定義するデバイス機能定義を受信することと、
選択されたハードウェアコンポーネントと互換性があるコードモジュールのリストを提供することであって、前記コードモジュールのリストは前記デバイスの前記ユースケースに基づいてフィルタリングされる、前記コードモジュールのリストを提供することと、
前記コードモジュールのリストからコードモジュールの選択を受信することであって、前記コードモジュールは、前記ハードウェアコンポーネントのリストから選択される前記ハードウェアコンポーネントを前記デバイスにおいて動作できるようにする、前記コードモジュールの選択を受信することと、
前記デバイスを設計するために前記コードモジュールを提供することと、
を含む、前記非一時的な機械可読記憶媒体。
【請求項２】
前記デバイスの前記ユースケースに部分的に基づいて前記コードモジュールに対する構成パラメータのセットを識別することと、
前記構成パラメータのセットに前記コードモジュールを提供することと、
をさらに含む、請求項１に記載の非一時的な機械可読記憶媒体。
【請求項３】
前記デバイスでの使用のために前記コードモジュールを自動的に選択する従属関係ツリーを生成することをさらに含む、請求項１に記載の非一時的な機械可読記憶媒体。
【請求項４】
制約されたハードウェア機能を有するデバイスを設計する際に使用されるハードウェア仕様を受信することと、
前記デバイスのデバイス構成を受信することであって、前記デバイス構成は前記デバイスのユースケースを含む、前記デバイス構成を受信することと、
前記デバイスの前記制約されたハードウェア機能及び前記デバイス構成を満足させる前記ハードウェア仕様と互換性があるコードモジュールのリストを判断することと、
前記コードモジュールのリストを提供することと、
前記コードモジュールのリストからコードモジュールの選択を受信することと、
前記デバイスを設計する際に使用するために前記コードモジュールのリストから選択される前記コードモジュールを提供することと、
を含む、方法。
【請求項５】
サービスプロバイダ環境におけるデバイス画像ビルドサービスを使用して前記コードモジュールを含むデバイス画像を生成することと、
前記デバイスでの配信及びインストールのために前記デバイス画像を提供することと、
をさらに含み、
前記デバイスで使用される前記コードモジュールは、前記デバイスで実行するリアルタイム動作システム（ＲＴＯＳ）と互換性がある、請求項４に記載の方法。
【請求項６】
前記デバイスの前記デバイス構成を定義するデバイス機能定義を受信することであって、前記デバイス構成は前記デバイスにロードされる対象のコードモジュールに関する入力をさらに含む、前記デバイス機能定義を受信することと、
前記デバイスで使用される前記コードモジュールの選択を可能にするユーザインターフェースを提供することと、
をさらに含む、請求項４に記載の方法。
【請求項７】
前記デバイスを設計する時に利用可能である複数のコードモジュールに含まれるコードモジュールの間のインターフェースをテストすることであって、前記コードモジュールの間の前記インターフェースは、前記複数のコードモジュールに対して適切な機能性を保証するためにテストされる、前記インターフェースをテストすることをさらに含む、請求項４に記載の方法。
【請求項８】
前記コードモジュールのリストから選択される前記コードモジュールから補助デバイス画像を作成することであって、前記補助デバイス画像はサービスプロバイダ環境において動作する更新サービスにアップロードされる、前記補助デバイス画像を作成することと、
前記更新サービスから、前記デバイスでインストールするための更新として前記補助デバイス画像を提供することであって、前記補助デバイス画像は前記デバイスに対して先に受信したデバイス画像の機能を増強させる、前記補助デバイス画像を提供することと、をさらに含む、請求項４に記載の方法。
【請求項９】
前記デバイスに対する前記構成に部分的に基づいて前記コードモジュールに対する構成パラメータのセットを修正することと、
前記構成パラメータのセットに前記コードモジュールを与えることと、
をさらに含む、請求項４に記載の方法。
【請求項１０】
サービスプロバイダ環境において動作するデバイス構成サービスから前記コードモジュールを提供すること、または、
前記デバイスでの使用のために前記コードモジュールを自動的に選択する従属関係ツリーを、前記従属関係ツリーにおいて定義されるソフトウェア従属関係に従って生成すること、をさらに含み、
前記デバイスに対する前記コードモジュールは、マイクロコントローラモジュール、デジタル信号処理（ＤＳＰ）モジュール、通信モジュール、センサモジュール、カメラモジュール、トランシーバモジュール、または電力管理モジュールの１つまたは複数を含む、請求項４に記載の方法。
【請求項１１】
少なくとも１つのプロセッサと、
少なくとも１つのメモリデバイスと、を備える、システムであって、
前記少なくとも１つのメモリデバイスは、実行される時、前記システムに、
前記デバイスに対するデバイス機能定義を受信することであって、前記デバイス機能定義は前記デバイスのユースケースを表す、前記デバイス機能定義を受信することと、
前記デバイスをビルドするためにハードウェアコンポーネント及び互換性があるコードモジュールを指示するデバイスパッケージを推奨することであって、前記デバイスに対して推奨される前記デバイスパッケージは、前記デバイスの前記ユースケースに対応する、以前に使用されたデバイスパッケージから識別される、前記デバイスパッケージを推奨することと、
前記デバイスパッケージの選択を受信することと、
前記デバイスでの使用のために前記デバイスパッケージと関連付けられた前記コードモジュールを提供することと、
を行わせる複数のデータ及び命令を記憶するデータストアを含む、前記システム。
【請求項１２】
前記複数のデータ及び命令は、実行される時、前記システムに、
前記デバイスパッケージと関連付けられていない代替的なコードモジュールに対する要求と共に前記デバイスパッケージの選択を受信することと、
前記デバイスを設計する際に使用するために前記代替的なコードモジュールを提供することと、
を行わせる、請求項１１に記載のシステム。
【請求項１３】
前記複数のデータ及び命令は、実行される時、前記システムに、
デバイス画像を、前記コードモジュールから生成しかつ前記デバイスにインストールすることを可能にするように前記コードモジュールを提供すること、または、
前記デバイスパッケージの選択を可能にするユーザインターフェースを提供すること、
を行わせる、請求項１１に記載のシステム。
【請求項１４】
前記複数のデータ及び命令は、実行される時、前記システムに、
サービスプロバイダ環境で動作するデバイス構成サービスにおいて、前記デバイスに対する補助コードモジュールの選択を受信することと、
前記デバイスでの使用のために前記補助コードモジュールを提供することであって、前記補助コードモジュールを使用して、前記サービスプロバイダ環境において動作する更新サービスにアップロードされる補助デバイス画像を作成する、前記補助コードモジュールを提供することと、
前記更新サービスから、前記デバイスでインストールするための更新として前記補助デバイス画像を提供することであって、前記補助デバイス画像は前記デバイスに対して、先に受信したデバイス画像の機能を増強させる、前記補助デバイス画像を提供することと、
を行わせる、請求項１１に記載のシステム。
【請求項１５】
前記複数のデータ及び命令は、実行される時、前記システムに、
前記デバイスの前記ユースケースに部分的に基づいて前記コードモジュールに対する構成パラメータのセットを識別することと、
前記構成パラメータのセットに前記コードモジュールを与えることと、
を行わせる、請求項１１に記載のシステム。
【発明の詳細な説明】
【背景技術】
【０００１】
電子デバイス及びコンピューティングシステムは、社会の多くの側面において絶えず存在するものになっている。デバイスは、職場、家庭、または学校で見出され得る。コンピューティングシステムは、データを処理しかつ記憶するためのコンピューティング及びデータストレージシステムを含み得る。いくつかのコンピューティングシステムは、費用全体の低減、可用性の改善、スケーラビリティの改善、及び、新しい応用を展開する時間の低減を行い得るサービスプロバイダ環境として既知の集中型仮想コンピューティングオプションを供給し始めている。
【０００２】
通信技術の進展は、コンピュータネットワークを介して他のデバイス及びコンピューティングシステムと通信するための比較的簡易な電子デバイスさえも可能にしている。例えば、モノのインターネット（ＩｏＴ）は、既存のインターネットインフラストラクチャを使用する全世界に散在しているコンピューティングデバイスの相互接続である。このようなデバイスは、データをキャプチャ可能にしてもよく、さらにまた、デバイスは、集中コンピューティングサービス（例えば、サービスプロバイダ環境）にネットワークを介してデータを安全に通信し得る。
【０００３】
電子デバイス（例えば、ＩｏＴデバイスまたは組み込みデバイス）は、産業機器、農業機械、家庭電化製品、製造デバイス、産業用プリンタ、自動車、サーモスタット、スマート交通信号、車両、ビルなど、さまざまな物理デバイスまたは製品に含まれてもよい。これらの物理デバイスは、組み込み電子機器、ソフトウェア、センサ、及び、これらの物理デバイスがデータを収集しかつ送ることを可能にするネットワーク接続性を有してもよい。電子デバイス（例えば、ＩｏＴデバイスなど）は、環境モニタリング、農業経営、インフラ管理、工業的応用、ビル及びホームオートメーション、エネルギー管理、医療及び健康管理システム、輸送システムなど、いくつかの応用に有用である場合がある。
【図面の簡単な説明】
【０００４】
【図１Ａ】本技術の一例によるデバイスを設計するためにコードモジュールを提供するためのシステム及び関連の動作を示す図である。
【図１Ｂ】本技術の一例による、サービスプロバイダ環境におけるデバイス画像ビルドサービスによってデバイスを設計するためにデバイス画像を提供するためのシステム及び関連の動作を示す図である。
【図２】本技術の一例によるデバイスを設計するためにコードモジュールを提供するためのネットワーク化システムの説明図である。
【図３】本技術の一例によるデバイスを設計するためにコードモジュールを提供するためのシステム及び関連の動作を示す図である。
【図４】本技術の一例による、コードモジュールをテストするためのシステム及び関連の動作を示す図である。
【図５】本技術の一例による、補助デバイス画像のために無線による（ＯＴＡ）更新を行うためのシステム及び関連の動作を示す図である。
【図６】コードモジュールを提供するための例示の方法のフローチャートである。
【図７】コードモジュールを提供するための別の例示の方法のフローチャートである。
【図８】コードモジュールを提供するためのさらに別の例示の方法のフローチャートである。
【図９】本技術の一例による、サービスプロバイダ環境のブロック図である。
【図１０】本技術において用いられてもよいコンピューティングデバイスの例証を提供するブロック図である。
【発明を実施するための形態】
【０００５】
ＩｏＴデバイスなどのデバイスにコードモジュールを提供するための技術について説明する。コードモジュールは、デバイスのための設計プロセス時にデバイスに対して選択されてもよい。コードモジュール（例えば、ソフトウェアモジュール、プログラムモジュール、機能モジュール、実行可能ファイル）は、デバイスに含まれるハードウェアコンポーネントに対応し得る。選択後、コードモジュールは、（例えば、デバイス画像で）デバイスに送られ、かつデバイス上でインストールされてもよい。コードモジュールは、デバイスに含まれるハードウェアコンポーネントが正確に機能できるようにしてもよい。１つの例では、コードモジュールは、デバイスにおけるハードウェアコンポーネントが、デバイス上で実行する、リアルタイム動作システム（ＲＴＯＳ）または別のタイプの組み込みオペレーティングシステムと正確にインターフェース接続できるようにしてもよい。
【０００６】
１つの構成では、デバイス構成サービスは、ハードウェアコンポーネントのリストからデバイス画像に含まれるハードウェアコンポーネントを判断してもよく、ハードウェアコンポーネントは設計されているデバイスに含まれてもよい。デバイス構成サービスに利用可能なそれぞれのハードウェアコンポーネントは、承認権限（例えば、コンピューティングサービスプロバイダ）によって認定されかつ事前承認を受ける場合があり、認定されないハードウェアコンポーネントはデバイス構成サービスによって選択可能にならない場合がある。認定されたハードウェアコンポーネントは、デバイス構成サービスからロード可能な適切なコードモジュールを有するとして認定され得る。ハードウェアコンポーネントは、マイクロコントローラ、デジタル信号処理（ＤＳＰ）チップ、センサ、トランシーバ、カメラ、マイクロホン、スピーカなどを含んでもよい。１つの例では、デバイス構成サービスは、ユーザが、デバイスに含まれるハードウェアコンポーネントを選択できるようにするサービスプロバイダ環境を介してアクセス可能なユーザインターフェースを介してハードウェアコンポーネントのリストを提供してもよい。それゆえに、デバイス構成サービスを使用して、ユーザインターフェースを介して受信されるユーザ選択に基づいてハードウェアコンポーネントを判断してもよい。
【０００７】
代替的には、デバイス構成サービスは、ユーザインターフェースを介してデバイスのためのデバイス機能定義を受信してもよく、デバイス機能定義は、デバイスのユースケースを表してもよい。デバイスのユースケースは、サーモスタット、降雨センサ、ビデオストリーミング、画像キャプチャ、運動センサなどであってよい。デバイス機能定義に基づいて、デバイス構成サービスは、デバイスに含まれるハードウェアコンポーネント（例えば、ビデオエンコーダ、高解像度（ＨＤ）カメラ、温度センサなど）を推奨してもよい。
【０００８】
１つの構成では、デバイス構成サービスは、選択されたハードウェアコンポーネントと互換性があるコードモジュールのリストを提供してもよい。コードモジュールのリストは、デバイス機能定義に基づいて生成されてもよい。コードモジュールのリストは、ユーザがコードモジュールを選択できるようにするユーザインターフェースを介して提供されてもよい。デバイス構成サービスに利用可能なそれぞれのコードモジュールは、特定のハードウェアコンポーネントと互換性があるとして認定されてもよい。さらに、特定の認定されたコードモジュールは、個々のハードウェアコンポーネントと互換性がある場合があり、かつ、異なっている、同じ機能性を有するハードウェアコンポーネント（別のモデルタイプまたは別の製造業者のハードウェアコンポーネント）と互換性がない場合がある。コードモジュールは、マイクロコントローラモジュール、デジタル信号処理（ＤＳＰ）モジュール、センサモジュール、トランシーバモジュール、カメラモジュール、マイクロホンモジュール、スピーカモジュールなどを含んでもよい。コードモジュールは、ファームウェア、デバイスドライバ、実行可能コード、ライブラリ、構成ファイルなどを含んでもよい。代替的な構成では、デバイス構成サービスは、選択されたハードウェアコンポーネントに基づいてコードモジュールを自動的に検出してもよい。
【０００９】
１つの構成では、デバイス構成サービスは、デバイスにダウンロードするために選択された認定済みコードモジュールを提供してもよい。例えば、デバイス構成サービスは、ユーザコンピューティングデバイスにコードモジュールを提供してもよい。ユーザコンピューティングデバイスは、コードモジュールをアセンブルしてデバイス画像を生成してもよく、このデバイス画像はデバイスにインストールされてもよい。デバイス画像は、コンピュータファイル、または、（デバイスに含まれるハードウェアコンポーネントに対応する）コードモジュールを含む画像であってよい。デバイス画像のインストールは、デバイスに、サービスプロバイダ環境において実行しているサービスに接続するための能力（例えば、ＩｏＴサービスに接続するための無線ネットワーキング機能性）など、デバイスハードウェアに合うデバイス機能性を提供してもよい。代替的には、デバイス画像のインストールは、デバイスが、ローカル無線ネットワークにおけるコンピューティングハブに接続できるようにしてもよく、コンピューティングハブは、サービスプロバイダ環境において実行しているサービスに接続されてもよい。
【００１０】
図１Ａは、デバイス１３０（例えば、ＩｏＴデバイス）を設計するためにコードモジュール１１４を提供するための例示のシステム及び関連の動作を示す。コードモジュール１１４は、サービスプロバイダ環境１００において動作するデバイス構成サービス１１０から提供されてもよい。デバイス構成サービス１１０は、設計プロセスの選択可能要素としてハードウェアコンポーネント１３６及びコードモジュール１１４（例えば、ソフトウェアモジュール、プログラムモジュール、機能モジュール、実行可能モジュール、）を使用してデバイス１３０を設計かつ構成するためのプラットフォームを提供してもよい。デバイス構成サービス１１０は、デバイス構成サービス１１０から受信されるようにユーザインターフェース１２２（例えば、ブラウザベースインターフェースにおけるデバイス構成ユーザインターフェース）を提示するためにユーザコンピューティングデバイス１２０と通信していてもよい。代替的には、デバイス構成サービス１１０は、ユーザコンピューティングデバイス１２０上にロードされたアプリケーションと通信していてよく、アプリケーションは、デバイス構成サービス１１０から受信されるようなユーザインターフェース１２２を提示してもよい。
【００１１】
デバイス構成サービス１１０は、ユーザインターフェース１２２を介してユーザコンピューティングデバイス１２０から受信される入力に基づいてデバイス１３０にコードモジュール１１４を提供してもよい。ユーザコンピューティングデバイス１２０は有線または無線接続を介してデバイス１３０に接続されてもよい。デバイス１３０は、リアルタイム動作システム（ＲＴＯＳ）１３２（例えば、ＦｒｅｅＲＴＯＳ）または別のタイプの組み込みオペレーティングシステムを実行するように構成されてもよい。ＲＴＯＳ１３２は、ハードウェアリソース及びホストアプリケーションの管理、ならびにバッファ遅延を低減させたリアルタイムの着信データの処理を行ってもよい。さらに、デバイス１３０は、デバイス構成サービス１１０から受信されるコードモジュール１１４に基づいて構成されてもよいハードウェアコンポーネント１３６を含んでもよく、コードモジュール１１４は、デバイス１３０上で実行するＲＴＯＳ１３２と互換性があってよい。
【００１２】
１つの構成では、デバイス構成サービス１１０は、デバイス１３０を設計しかつビルドする時に利用可能なハードウェアコンポーネントのリスト１１２を提供してもよい。デバイス構成サービス１１０は、ユーザインターフェース１２２を介してハードウェアコンポーネントのリスト１１２をユーザコンピューティングデバイス１２０に提供してもよい。ハードウェアコンポーネントのリスト１１２は、デバイス１３０を設計しかつビルドする時に利用可能である、さまざまなタイプのマイクロコントローラ、センサ、トランシーバ、カメラ、マイクロホン、スピーカ、Ｉ／Ｏインターフェース（例えば、ＵＳＢコントローラ）、デバイス周辺機器などを含んでもよい。
【００１３】
１つの例では、デバイス構成サービス１１０は、ユーザインターフェース１２２を介して受信された基準（例えば、キーワード検索またはデバイスタイプ）に基づいてハードウェアコンポーネントのリスト１１２をフィルタリングしてもよい。例えば、デバイス構成サービス１１０は、ユーザインターフェース１２２を介して受信されるフィードバックに基づいて、定義されたメモリ及び／またはプロセッサ機能を有するマイクロコントローラ、ある特定のタイプのセンサ（例えば、環境光センサ）、または、ある特定の解像度の高解像度（ＨＤ）画像をキャプチャするカメラのタイプなど、ハードウェアコンポーネントのリストを提供してもよい。デバイス構成サービス１１０は、ユーザがさまざまなタイプのハードウェアコンポーネント１３６を比較できるようにする定義されたフォーマット（例えば、テーブルフォーマットまたはリスティングフォーマット）におけるハードウェアコンポーネントのリスト１１２を提供してもよい。
【００１４】
１つの例では、構成サービス１１０は、デバイス機能定義によって指定されるようなデバイスのユースケースに基づいてハードウェアコンポーネントのリスト１１２をフィルタリングしてもよい。例えば、ユーザは、ユーザインターフェース１２２を介してデバイス１３０のデバイス機能定義を定義してもよく、デバイス機能定義は、設計されかつビルドされているデバイス１３０の意図されたユースケースに対応し得る。ユーザインターフェース１２２に提示されるハードウェアコンポーネントのリスト１１２は、それに応じてデバイス機能定義に基づいてフィルタリングされてもよい。
【００１５】
代替的には、デバイス構成サービス１１０は、ユーザインターフェース１２２を介してユーザコンピューティングデバイス１２０に提示されるハードウェアコンポーネントのリスト１１２をフィルタリングしなくてもよい。換言すれば、デバイス構成サービス１１０は、デバイス構成サービス１１０によってサポートされる全てのハードウェアコンポーネントのリスト１１２を提供してもよい。
【００１６】
１つの例では、デバイス構成サービス１１０は、ハードウェアコンポーネントのリスト１１２からハードウェアコンポーネント１３６の選択を受信してもよい。デバイス構成サービス１１０は、ユーザインターフェース１２２を介してユーザコンピューティングデバイス１２０からの選択を受信してもよい。選択されたハードウェアコンポーネント１３６は、使用されることが予想されるハードウェアコンポーネント１３６、またはデバイス１３０をビルドするために使用されているハードウェアコンポーネントを指示し得る。
【００１７】
１つの例では、選択されたハードウェアコンポーネント１３６は、デバイス機能定義によって指定されるように、デバイス１３０のユースケースに対応し得る。換言すれば、デバイス機能定義において指示されるように、デバイス１３０の用途または目的（例えば、ビデオストリーミング、工場モニタリング）に応じて、適切なハードウェアコンポーネント１３６（例えば、ビデオを符号化するためのハードウェアエンコーダ、温度センサ、環境光センサ）は、ユーザインターフェース１２２を介してデバイス１３０に対して選択または識別され得る。従って、ユーザは、設計かつビルドされているデバイス１３０のタイプに応じて、適切なハードウェアコンポーネント１３６を選択してもよい。
【００１８】
１つの例では、デバイス構成サービス１１０は、選択されたハードウェアコンポーネント１３６と互換性があるコードモジュール１１４のリストを提供してもよい。ハードウェアコンポーネント１３６の選択に基づいて、デバイス構成サービス１１０は、デバイス１３０に対して選択されたハードウェアコンポーネント１３６に対応するコードモジュール１１４を識別し得る。デバイス構成サービス１１０は、ユーザインターフェース１２２を介して提示するためにユーザコンピューティングデバイス１２０にコードモジュール１１４のリストを提供してもよい。コードモジュール１１４は、マイクロコントローラモジュール、センサモジュール、トランシーバモジュール、無線通信モジュール（例えば、Ｂｌｕｅｔｏｏｔｈ及びＷｉ−Ｆｉ）、メッセージングモジュール（例えば、メッセージキューテレメトリトランスポート（ＭＱＴＴ）、伝送制御プロトコル及びインターネットプロトコル（ＴＣＰ／ＩＰ）、ハイパーテキスト転送プロトコル（ＨＴＴＰ））、カメラモジュール、マイクロホンモジュール、スピーカモジュールなどを含んでもよい。コードモジュール１１４は、ファームウェア、デバイスドライバ、実行可能コード、ライブラリ、構成ファイル、動作システムなどを含んでもよい。それぞれのコードモジュール１１４は、対応するハードウェアコンポーネント１３６にリンクされてもよく（例えば、特定のハードウェアコンポーネント１３６によって使用可能な１つまたは複数のコードモジュール１１４があってよい）、コードモジュール１１４は、デバイス１３０において動作するように対応するハードウェアコンポーネント１３６を構成してもよい。デバイス構成サービス１１０は、ユーザインターフェース１２２を介して提示するために提供されるコードモジュール１１４が互いに互換性があるように保証し得る。
【００１９】
１つの例では、ユーザインターフェース１２２を介してユーザコンピューティングデバイス１２０に提供されるコードモジュール１１４のリストは、デバイス機能定義において指示されるように、デバイス１３０のユースケースに左右されるものであり得る。例えば、コードモジュール１１４のリストは、デバイス１３０のユースケースに基づいてフィルタリングされてもよい。さらに、デバイス構成サービス１１０は、コードモジュール１１４についてのコンテキスト情報を提供してもよい。例えば、デバイス構成サービス１１０は、コードモジュール１１４のそれぞれに対するチップセット上で使用されるメモリ量についての情報を提供してもよい。これによって、設計者は、コードモジュール１１４がデバイス画像サイズの制約内に適合し得るかどうかを判断できるようになり得る。１つの例では、デバイス構成サービス１１０は、ユーザによって利用されるコードモジュール１１４を含むユーザに対する（Ｇｉｔレポジトリなどの）バージョン管理システムレポジトリを作成してもよく、バージョン管理システムレポジトリは、バージョン管理システムレポジトリに含まれるコードモジュール１１４が他のユーザにアクセス可能にできるようにクローンまたは複製され得る。
【００２０】
１つの例では、デバイス構成サービス１１０は、コードモジュール１１４のリストからコードモジュール１１４の選択を受信してもよい。さらに、デバイス構成サービス１１０は、デバイス１３０のユースケースに基づいて選択されたコードモジュール１１４に対する構成パラメータ１１５のセットを識別してもよい。例えば、デバイス機能定義によって指定されるようなユースケースに基づいて、デバイス構成サービス１１０は、選択されたコードモジュール１１４に対するある特定の構成パラメータ１１５を推奨し得る。推奨された構成パラメータ１１５は、デバイス１３０に対して選択された、特定のハードウェアコンポーネント１３６及びコードモジュール１１４と関連付けられてもよい。構成サービス１１０は、ユーザインターフェース１２２を介してユーザコンピューティングデバイス１２０からある特定の構成パラメータ１１５の選択を受信してもよい。従って、デバイス１３０に対してコードモジュール１１４を単に選択するのではなく、コードモジュール１１４は、デバイス１３０のユースケースに応じてある特定の構成パラメータ１１５によって構成されてもよい。
【００２１】
一例として、顧客は、サービスプロバイダ環境１００においてホストされるアプリケーションと通信するように構成されるネットワーク接続されたサーモスタット素子についての一般化された仕様をデバイス構成サービス１１０に提供してもよい。顧客によって提供される仕様は、温度センサ及びネットワーキングデバイスと共に、マイクロコントローラ、及びマイクロコントローラと互換性があるＲＴＯＳ１３２など、ネットワーク接続されたサーモスタット素子に対して使用され得るハードウェアコンポーネント１３６を識別するために使用されてもよい。
【００２２】
１つの例では、デバイス構成サービス１１０は、ユーザコンピューティングデバイス１２０にコードモジュール１１４及び構成パラメータ１１５を提供してもよい。ユーザコンピューティングデバイス１２０を使用している開発者は、デバイス１３０に追加のカスタムコードを提供してもよく、カスタムコードは、コードモジュール１１４及び構成パラメータ１１５に追加されてもよい。さらにまた、ユーザコンピューティングデバイス１２０は、選択されたコードモジュール１１４を選択された構成パラメータ１１５とアセンブルしてデバイス画像１１６を生成してもよい。ユーザコンピューティングデバイス１２０は、選択されたコードモジュール１１４及び選択された構成パラメータ１１５をアセンブル（例えば、コンパイル、リンク、または組み合わせ）して、ユーザコンピューティングデバイス１２０で実行している統合開発環境（ＩＤＥ）を使用してデバイス画像１１６を生成してもよい。デバイス画像１１６は、選択されたコードモジュール１１４及び構成パラメータ１１５を有するコンピュータファイル（例えば、デジタル画像、インストール画像、または、ＺＩＰファイルまたはファイルグループなどの圧縮ファイル）であってよい。アセンブルまたはコンパイル後、デバイス画像１１６は、有線または無線接続によってユーザコンピューティングデバイス１２０からデバイス１３０に送信されてもよい。デバイス画像１１６を利用して、デバイス１３０において、ソフトウェアコンポーネントをインストールし、かつ選択されたハードウェアコンポーネント１３６を構成してもよい。例えば、デバイス画像１１６に基づいて、ハードウェアコンポーネント１３６は、デバイス１３０上で実行しているＲＴＯＳ１３２とインターフェース接続するように構成されてもよい。デバイス画像１１６は、基本ビルドパッケージであってよい、またはハードウェアコンポーネント１３６、及びデバイス１３０上で実行しているＲＴＯＳ１３２にコア機能性を提供するためのパッケージをインストールしてもよい。従って、デバイス画像１１６がデバイス１３０上にロードされた後、ユーザコンピューティングデバイス１２０上で実行しているＩＤＥを利用して、デバイス１３０によって行われるべき特定の機能または動作にリンクされる追加のカスタムコードを開発してもよい。
【００２３】
１つの例では、デバイス構成サービス１１０は、チップセットベースでデバイス１３０に対して選択可能な構成を判断してもよい。デバイス１３０に対して選択されたハードウェアコンポーネント１３６に応じて、デバイス構成サービス１１０は、デバイス１３０においてハードウェアコンポーネント１３６を動作可能にするのに適切なソフトウェアコンポーネントを選択してもよい。デバイス構成サービス１１０は、完全にモジュール式のダウンロード可能なソフトウェアスタックを提供してもよく、ここで、適切なソフトウェアは要求に応じてハードウェアコンポーネント１３６に対して構成される。
【００２４】
１つの例では、ユーザコンピューティングデバイス１２０上で実行しているＩＤＥを利用して、デバイス構成サービス１１０によって認定されていない追加のコードモジュールを開発してもまたは組み込んでもよい。この例では、ＩＤＥを利用して、追加のコードモジュールに対するＳｈｉｍ層を作成しても（すなわち、このプログラミングを可能にしても）よく、これによって、追加のコードモジュールが、デバイス１３０上で実行しているＲＴＯＳと互換性があるようにしてもよい。
【００２５】
さらに、デバイス構成サービス１１０は、その後テストされかつ認定され得るコードモジュールをサブミットするためのオープンソースプラットフォームを提供してもよい。これらのコードモジュールは、デバイス構成サービス１１０によって提供される既存のコードモジュールに対してテストされ得る（例えば、新しく作成されたＳｈｉｍのインターフェースはデバイス構成サービス１１０によってテストされ得る）。認定された後、これらのコードモジュールは、デバイス１３０を設計しかつビルドしている他の顧客に対してデバイス構成サービス１１０によって利用可能にされてもよい。
【００２６】
図１Ｂは、サービスプロバイダ環境１００におけるデバイス画像ビルドサービス１４０によってデバイス１３０を設計するために、デバイス画像１１６を提供するための例示のシステム及び関連の動作を示す。例えば、デバイス構成サービス１１０は、ハードウェアコンポーネントのリスト１１２からハードウェアコンポーネントの選択を受信してもよい。デバイス構成サービス１１０は、コードモジュール１１４及び構成パラメータ１１５の選択を受信してもよい。コードモジュール１１４及び構成パラメータ１１５は、デバイス画像１１６を生成し得るデバイス画像ビルドサービス１４０に提供されてもよい。デバイス画像１４２はユーザコンピューティングデバイス１２０に提供されてもよい。ユーザコンピューティングデバイス１２０はデバイス画像１１６をデバイス１３０に送ってもよく、デバイス画像１１６はデバイス１３０にインストールされてもよい。代替的には、デバイス画像１４２は、デバイス画像ビルドサービス１４０からデバイス１３０に直接提供されてもよい。
【００２７】
過去の解決策では、デバイス開発者（例えば、ＩｏＴデバイス開発者）は、デバイス、及びデバイスを動作させるためのソフトウェア層を設計しかつビルドするのに必要以上の時間を費やす可能性がある。例えば、デバイス開発者は、典型的には、デバイスにおいて使用されるべきチップセット（複数可）についてのコードを書き込むのに３〜６か月を費やす場合がある。デバイス開発者は、デバイスに実装されていたハードウェアコンポーネントに応じて、個々のハードウェア仕様書を参考にしなければならない場合がある。デバイス開発者はさらにまた、デバイスを設計しかつビルドする時にさまざまなハードウェアコンポーネント間の互換性を保証するのにさらなる時間を費やす場合がある。一般に、デバイス開発者は、デバイスの用途または目的に応じて、カスタム機能を開発するために費やされた時間を含まない基本機能（例えば、メモリ割り当て、ＣＰＵスケジューリング、ベース周辺機器（例えば、ＵＳＢ、カメラなど））を得るために、必要以上の時間を費やすことが考えられる。その結果、過去の解決策では、デバイス開発は、厄介なものであって、時間及びリソースの増大を伴うものであった。
【００２８】
さらに、過去の解決策では、デバイスにおいて使用されるチップセット（複数可）のためのコードは、種々のハードウェアコンポーネントがデバイスの新しいバージョンで使用された時手動でリライトされなければならなかった。例えば、ハードウェアコンポーネントベンダが変更され、かつ種々のハードウェアコンポーネントが結果としてデバイスの新しいバージョンで使用されることになっていた時（デバイスの機能性がデバイスのバージョン間で同じままであった場合でも）、デバイスにおけるコードは、新しいハードウェアコンポーネントに適応させるために手動でリライトされなければならず、このことは、デバイス開発者に過度の厄介な処理を行わせることになる。
【００２９】
本技術では、デバイス構成サービスまたはデバイス開発者は、ハードウェアコンポーネントのリストから選択し得る。ハードウェアコンポーネントはデバイス構成サービスによって先に承認され得る。デバイス構成サービスまたはデバイス開発者は、ハードウェアコンポーネントと互換性があるコードモジュールのリストから選択してもよく、コードモジュールのリストはデバイスのユースケースに適合させてもよい。例えば、デバイス開発者は、ユーザインターフェースを介して、選択されたハードウェアコンポーネントとの互換性、及び開発されているデバイスのユースケースに応じてコードモジュールを選択してもよい。それぞれのコードモジュールは特定のハードウェアコンポーネントにリンクされるコードを含んでもよい。コードモジュールが選択された後、デバイス画像はコードモジュールを含むように生成されてもよく、さらにまた、デバイス画像はデバイスにダウンロード及びインストールされてもよい。従って、デバイス開発者は、デバイスにおけるそれぞれのハードウェアコンポーネントのためのコードの手動の書き込みを回避し得る。もっと正確に言えば、デバイス開発者は、承認されたハードウェアコンポーネントのリストからハードウェアコンポーネントを選択した後、これらのハードウェアコンポーネントに対応するコードモジュールを自動的に得てもよい。その結果、デバイス開発プロセスは、簡略化され得、かつ時間の低減を伴う場合がある。
【００３０】
図２は、サービスプロバイダ環境２００における本技術の例示のコンポーネントを示す。サービスプロバイダ環境２００はデバイス構成サービス２１０を動作させてもよい。デバイス構成サービス２１０は、デバイス２８０（例えば、ＩｏＴデバイス）にコードモジュール２４４を提供するために１つまたは複数のコンピューティングインスタンス２２０及びデータストア（複数可）２４０を利用してもよい。デバイス構成サービス２１０は、ユーザコンピューティングデバイス２７０を介してデバイス２８０でのダウンロード及びインストールのためにコードモジュール２４４を提供してもよい。デバイス構成サービス２１０は、ネットワーク２６０を介してユーザコンピューティングデバイス２７０と通信していてもよい。ユーザコンピューティングデバイス２７０は、ユーザが、デバイス２８０での使用のために、さまざまなコードモジュール２４４及び構成パラメータ２４６を選択できるようにするユーザインターフェース２７２を含んでもよい。
【００３１】
１つの例では、データストア２４０はハードウェアコンポーネントのリスト２４２を含んでもよい。ハードウェアコンポーネントのリスト２４２は、デバイス構成サービス２１０によって提供されるハードウェアコンポーネント２８２を含んでもよく、これらのハードウェアコンポーネント２８２は、デバイス２８０を設計しかつビルドする時に使用され得る。例えば、ハードウェアコンポーネント２８２は、対応するコードモジュールがデバイス構成サービス２１０によって既にテストされかつ認定されているハードウェアコンポーネントを含んでもよい。ハードウェアコンポーネントのリスト２４２は、対応するコードモジュールがデバイス構成サービス２１０によってテストされかつ認定されていないハードウェアコンポーネントを含まない場合がある。ハードウェアコンポーネントのリスト２４２は、デバイス２８０を設計する時に使用されてもよいハードウェアコンポーネント２８２のさまざまなクラスを含んでもよい。例えば、ハードウェアコンポーネントのリスト２４２は、Ｗｉ−Ｆｉチップセット、超低電力Ｗｉ−Ｆｉチップセット、Ｂｌｕｅｔｏｏｔｈチップセット、Ｂｌｕｅｔｏｏｔｈ低エネルギー（ＢＬＥ）チップセット、ＺｉｇＢｅｅチップセット、またはＬｏｎｇ  Ｔｅｒｍ  Ｅｖｏｌｕｔｉｏｎ（ＬＴＥ）チップセットなどの無線通信コンポーネントを含んでもよい。ハードウェアコンポーネントのリスト２４２は、さまざまなレベルの処理及びメモリ機能を有するさまざまなタイプの組み込みマイクロコントローラ及びシステムオンチップ（ＳｏＣ）を含んでもよい。ハードウェアコンポーネントのリスト２４２は、温度センサ、近接センサ、位置センサ、光センサ、水分／湿度センサ、運動センサ、加速度及び方位センサ、マイクロホン、化学／ガスセンサなどを含んでもよい。ハードウェアコンポーネントのリスト２４２は、さまざまなタイプのカメラ及びビデオレコーダーを含んでもよい。さらに、ハードウェアコンポーネントのリスト２４２は、さまざまなタイプのディスプレイスクリーン、スピーカシステム、電源装置（例えば、バッテリ）、及びデバイス２８０に含まれてもよい他のハードウェアコンポーネント２４２を含んでもよい。
【００３２】
１つの例では、データストア２４０は、コードモジュール２４４（例えば、ソフトウェアモジュール、プログラムモジュール、機能モジュール、実行可能ファイル）を含んでもよい。コードモジュール２４４はデバイス構成サービス２１０によって提供されてもよく、コードモジュール２４４はデバイス２８０を設計しかつビルドするのに利用可能なハードウェアコンポーネント２８２に対応し得る。コードモジュール２４４はデバイス２８０にインストールされるようにモジュール式ソフトウェアコンポーネントであってよい。コードモジュール２４４はハードウェアコンポーネント２８２の特定のタイプ及び／またはモデルに対応してもよい。コードモジュール２４４はファームウェア、デバイスドライバ、実行可能コード、ライブラリ、構成ファイルなどを含んでもよい。コードモジュール２４４は、対応するハードウェアコンポーネント２８２がデバイス２８０において正確に機能できるようにデバイス２８０にインストールまたはコピーされてもよい。コードモジュール２４４は、無線通信モジュール（例えば、ＢｌｕｅｔｏｏｔｈモジュールまたはＷｉ−Ｆｉモジュール）、メッセージングプロトコル（例えば、ＭＱＴＴ、ＴＣＰ／ＩＰ、またはＨＴＴＰ）のサポートを可能にするためのメッセージングモジュール、マイクロコントローラモジュール、センサモジュール、カメラモジュール、ビデオレコーダーモジュール、ディスプレイスクリーンモジュール、スピーカシステムモジュール、電力管理モジュール、または、デバイス２８０に含まれ得るハードウェアコンポーネント２８２（例えば、基本ハードウェアまたはハードウェア周辺機器）の機能性を可能にする他のタイプのソフトウェアを含んでもよい。
【００３３】
１つの例では、データストア２４０は構成パラメータ２４６を含んでもよい。構成パラメータ２４６はコードモジュール２４４と関連付けられてもよい。例えば、構成パラメータ２４６は、コードモジュール２４４において定義される、さまざまな設定、パラメータ、構成、変数などを含んでもよい。構成パラメータ２４６はデバイス２８０に対するデバイス機能定義２５０に基づいて定義されてもよい。それゆえに、構成パラメータ２４６はデバイス２８０のユースケースに基づいて定義されてもよい。１つの例では、デバイス構成サービス２１０はユーザインターフェース２７２を介してユーザコンピューティングデバイス２７０に一連の問い合わせを提供してもよく、コードモジュール２４４に対する構成パラメータ２４６はユーザコンピューティングデバイス２７０から受信されるユーザ入力に基づいて選択または構成されてもよい。一例として、コードモジュール２４４に対する構成パラメータ２４６は、デバイス２８０における対応するハードウェアコンポーネント２８２が、温度センシング、ビデオストリーミング、農業機械などをサポートするために使用されるかどうかに左右される場合がある。
【００３４】
１つの例では、データストア２４０は依存関係ツリー２４８を含んでもよい。依存関係ツリー２４８は、複数のコードモジュール２４４を、デバイス２８０を設計する時に互換性がある複数のハードウェアコンポーネント２８２にマッピングしてもよい。依存関係ツリー２４８はまた、どのコードモジュール２４４が、定義されたハードウェアコンポーネント２８２と互換性があるのかを指示し得る。さらに、依存関係ツリー２４８は、どのコードモジュール２４４が、他のコードモジュール２４４と互換性があるまたはこれらに左右されるのかを指示してもよい。これは、どのコードモジュール２４４が、デバイス２８０で動作させるために複数の依存関係を有するのかを指示し得るものである。依存関係ツリー２４８における特定のコードモジュール２４４間に依存関係リンクがないことは、これらの特定のコードモジュール２４４が互いに互換性がないことを指示し得る。従って、コードモジュール２４４は、依存関係ツリー２４８に従ってデバイス画像２４８に含まれるように選択されなくてもよい。
【００３５】
非限定的な例として、依存関係ツリー２４８は、マイクロコントローラがある特定のＢｌｕｅｔｏｏｔｈチップセット及びある特定のセンサと互換性があることで、マイクロコントローラコードモジュールが対応するＢｌｕｅｔｏｏｔｈコードモジュール及びセンサコードモジュールと互換性があることを指示し得る。依存関係ツリー２４８はまた、Ｂｌｕｅｔｏｏｔｈモジュール及びセンサモジュールが互いに互換性があることを指示し得る。代替的には、依存関係ツリー２４８は、Ｂｌｕｅｔｏｏｔｈモジュール及びセンサモジュールがそれぞれ、マイクロコントローラコードモジュールと互換性がある一方、Ｂｌｕｅｔｏｏｔｈモジュール及びセンサモジュールが互いに互換性がないことを指示し得る。従って、この場合、この特定のＢｌｕｅｔｏｏｔｈチップセットは、デバイス２８０を設計する時にこの特定のセンサと組み合わせて使用されない場合がある。
【００３６】
１つの例では、データストア２４０はデバイス機能定義２５０を含んでもよい。デバイス機能定義２５０は、デバイス２８０のデバイス機能及びユースケースを定義してもよい。デバイス２８０のデバイス機能定義２５０は、ユーザコンピューティングデバイス２７０でユーザインターフェース２７２を介して受信され得る。デバイス機能定義２５０は、デバイス２８０と関連付けられた、ユースケース、用途、または目的（例えば、温度の捕捉、水分センシング、侵入検出、オーディオストリーミング、ビデオストリーミング、画像キャプチャ）を定義してもよい。デバイス機能定義２５０は、ユーザインターフェース２７２を介してデバイス構成サービス２１０からユーザコンピューティングデバイス２７０に提供される一連の問い合わせに応答して受信されるユーザ入力に基づいて定義されてもよい。デバイス機能定義２５０は、デバイス２８０が使用されることになる場所または設定のタイプ（例えば、農場、工場、家庭）を定義してもよい。デバイス機能定義２５０は、デバイス２８０によって収集されかつアップロードされるデータのタイプ（例えば、温度データ、水分データ、運動データ、及び画像データ）を定義してもよく、デバイス機能定義２５０は、データを収集しかつアップロードするための周期性を定義してもよい。デバイス機能定義２５０はまた、デバイス２８０が特定の場所において同様のデバイス２８０のグループ内で機能するかどうかを定義してもよい。
【００３７】
デバイス構成サービス２１０によって動作させるコンピューティングインスタンス（複数可）２２０は、デバイス２８０にコードモジュール２４４を提供するためにいくつかのモジュールを利用してもよい。コンピューティングインスタンス（複数可）２２０は、ハードウェアコンポーネント選択モジュール２２２、コード選択モジュール２２４、コード配信モジュール２２６、及び詳細に論じられない、他のアプリケーション、サービス、プロセス、システム、エンジン、または機能性を含んでもよい。
【００３８】
ハードウェアコンポーネント選択モジュール２２２は、設計されているデバイス２８０に対してハードウェアコンポーネント２８２を識別するように構成されてもよい。ハードウェアコンポーネント選択モジュール２２２は、ユーザインターフェース２７２を介してユーザコンピューティングデバイス２７０から受信される選択に基づいてハードウェアコンポーネント２８２を識別してもよい。例えば、ユーザは、デバイス２８０の目的またはユースケースを達成するためにハードウェアコンポーネント２８２の選択を提供し得る。代替的には、ハードウェアコンポーネント選択モジュール２２２は、ユーザインターフェース２７２を介してユーザコンピューティングデバイス２７０から受信されるデバイス機能定義２５０及びユースケースに基づいて、ある特定のハードウェアコンポーネント２８２を推奨または自動的に選択してもよい。
【００３９】
コード選択モジュール２２４は、設計されているデバイス２８０に対するコードモジュール２４４を識別するように構成されてもよい。コード選択モジュール２２４は、デバイス２８０に対して選択されたハードウェアコンポーネント２８２と関連付けられたコードモジュール２４４を自動的に識別し得る。代替的には、コード選択モジュール２２４は、既に選択されたハードウェアコンポーネント２８２と互換性があるコードモジュール２４４のリストを提供してもよく、コード選択モジュール２２４は、ユーザインターフェース２７２を介してユーザコンピューティングデバイス２７０から受信されるユーザ入力に基づいて、固有のコードモジュール２４４を識別してもよい。ユーザコンピューティングデバイス２７０に提供されるコードモジュール２４４のリストは、デバイス機能定義２５０において定義されるように、デバイス２８０のユースケースに基づいて適合またはフィルタリングされてもよい。さらに、コード選択モジュール２２４は、ユーザインターフェース２７２を介してユーザコンピューティングデバイス２７０から受信されるユーザ入力に基づいてコードモジュール２４４に対するさまざまな構成パラメータ２４６を選択し得る。例えば、コード選択モジュール２２４は、デバイス機能定義２５０において定義されるように、デバイス２８０のユースケースに適合させるように構成パラメータ２４６を選択してもよい。
【００４０】
コード配信モジュール２２６は、ネットワーク２６０を介してユーザコンピューティングデバイス２７０に、選択されたコードモジュール２４４及び選択された構成パラメータ２４６を提供してもよい。コード配信モジュール２２６は、ユーザコンピューティングデバイス２７０を使用する開発者が、コードモジュール２４４及び構成パラメータ２４６からデバイス画像を設計しかつ生成することができるように、コードモジュール２４４及び構成パラメータ２４６を提供してもよい。さらにまた、デバイス画像はデバイス２８０にロードされてもよい。
【００４１】
ユーザインターフェース２７２を有するユーザコンピューティングデバイス２７０は、例えば、プロセッサベースシステムであってよい。ユーザコンピューティングデバイス２７０は、デスクトップコンピュータ、ラップトップもしくはノードブックコンピュータ、タブレットコンピュータ、ハンドヘルドコンピュータ、ワークステーション、ネットワークコンピュータ、または同様の機能を有する他のデバイスを含んでもよいがこれらに限定されない。
【００４２】
デバイス２８０（例えば、ＩｏＴデバイス）は、例えば、プロセッサベースシステムまたは組み込みシステムであってよい。非限定的な例として、デバイス２８０は、消費者製品（例えば、炊飯器、テレビ、プリンタ、またはスキャナ）、ホームオートメーション製品（例えば、スマートサーモスタット、スマート冷蔵庫、暖房装置、空調など）、製造装置、飼育装置、工場装置、工業用金属プレス加工装置、工業ロボット、センサ、ドローン、または、一意の識別子がアサインされ、かつネットワーク２６０を介してデータを通信することが可能な他のデバイスを含んでもよい。商用デバイスはまた、商用印刷機、商用冷凍庫、商用窯、商用ミキサ、または他の商用機器を含む、デバイス２８０の定義に含まれてもよい。デバイス２８０は、機械またはシステムに電子制御を提供する他のタイプの組み込みデバイスであってよい。
【００４３】
サービスプロバイダ環境２００内に含有されるさまざまなプロセス及び／または他の機能性は、１つまたは複数のメモリモジュールと通信している１つまたは複数のプロセッサで実行されてもよい。サービスプロバイダ環境２００は、例えば、１つまたは複数のサーババンク、コンピュータバンク、または他の配置構成において配置されるいくつかのコンピューティングデバイスを含んでもよい。コンピューティングデバイスは、ハイパーバイザ、仮想マシンマネージャ（ＶＭＭ）、及び他の仮想化ソフトウェアを使用するコンピューティング環境をサポートしてもよい。
【００４４】
「データストア」という用語は、データの、記憶、アクセス、整理、及び／または取得を行うことが可能な任意のデバイスまたはデバイスの組み合わせを指す場合がある。該デバイスは、任意の集中型、分散、またはクラスタ環境における、データサーバ、リレーショナルデータベース、オブジェクト指向型データベース、クラスタストレージシステム、データストレージデバイス、データウェアハウス、フラットファイル、及びデータストレージ構成の任意の組み合わせ及び数を含んでもよい。データストアのストレージシステムコンポーネントは、ＳＡＮ（ストレージエリアネットワーク）、仮想化ストレージネットワーク、揮発性もしくは不揮発性ＲＡＭ、光媒体、またはハードドライブ型媒体などのストレージシステムを含んでもよい。データストアは、理解できるような複数のデータストアを代表するものであってよい。
【００４５】
ネットワーク２６０は、イントラネット、インターネット、ローカライズされたネットワーク、広域ネットワーク、無線データネットワーク、もしくは、任意の他のこのようなネットワーク、またはこれらの組み合わせを含む、任意の有用なコンピューティングネットワークを含んでもよい。このようなシステムに利用されるコンポーネントは、選択されたネットワーク及び／または環境のタイプに少なくとも部分的に左右される場合がある。ネットワークを介した通信は、有線または無線接続、及びこれらの組み合わせによって可能にされてもよい。
【００４６】
図２は、ある特定の処理モジュールがこの技術に関連して論じられ得、かつこれらの処理モジュールがコンピューティングサービスとして実装され得ることを示す。１つの例示の構成では、モジュールは、サーバまたは他のコンピュータハードウェアで実行する１つまたは複数のプロセスによるサービスとみなされ得る。このようなサービスは、要求を受信し、かつ出力を他のサービスまたは消費者デバイスに提供し得る、一元的にホストされる機能性またはサービスアプリケーションであってよい。例えば、サービスを提供するモジュールは、サーバ、仮想化サービス環境、グリッド、またはクラスタコンピューティングシステムにおいてホストされるオンデマンドコンピューティングとみなされ得る。ＡＰＩは、第２のモジュールが要求を送り、かつ第１のモジュールから出力を受信することを可能にするためにそれぞれのモジュールに提供されてもよい。このようなＡＰＩはまた、サードパーティが、モジュールとインターフェース接続し、要求を行い、出力をモジュールから受信することを可能にしてもよい。図２は上記の技法を実施し得るシステムの例を示すが、多くの他の同様のまたは異なる環境も可能である。上で論じられかつ示される例示の環境は、単に代表的なものであり、限定されるものではない。
【００４７】
図３は、デバイス３３０（例えば、ＩｏＴデバイス）をビルドするためにコードモジュール３１６を提供するための例示のシステム及び関連の動作を示す。コードモジュール３１６は、サービスプロバイダ環境３００において動作するデバイス構成サービス３１０から提供されてもよい。デバイス構成サービス３１０は、デバイス構成サービス３１０から受信されるようなユーザインターフェース３２２（例えば、デバイス構成ユーザインターフェース）を提示するためにユーザコンピューティングデバイス３２０と通信していてもよい。代替的には、デバイス構成サービス３１０は、ユーザコンピューティングデバイス３２０で実行しているアプリケーションと通信していてよく、アプリケーションは、デバイス構成サービス３１０から受信されるようなユーザインターフェース３２２を提示してもよい。デバイス構成サービス３１０は、ユーザインターフェース３２２を介してユーザコンピューティングデバイス３２０から受信されるユーザ入力に基づいてデバイス３３０にコードモジュール３１６を提供してもよい。
【００４８】
１つの例では、デバイス構成サービス３１０は、ユーザインターフェース３２２を介してユーザコンピューティングデバイス３２０からデバイス機能定義３１２を受信してもよい。デバイス機能定義３１２はデバイス３３０のユースケースを定義してもよい。例えば、デバイス機能定義３１２は、デバイス３３０が、温度センシング、ビデオストリーミング、工場モニタリングなどに使用されることを指示してもよい。
【００４９】
それゆえに、デバイス構成サービス３１０は、デバイス３３０を設計しかつビルドするためにハードウェアコンポーネント３３６及び互換性があるコードモジュール３１６を指示するデバイスパッケージを推奨し得る。例えば、デバイス構成サービス３１０は、以前に使用されたデバイスパッケージ３１８のデータストア３１７にアクセスすることに基づいて推奨されるデバイスパッケージを識別してもよい。他のユーザは、データストア３１７に（特定のユースケースに対して以前に使用されたハードウェアコンポーネント及びコードモジュールを指示する）これらのデバイスパッケージをアップロードしてもよく、この情報はデバイス構成サービス３１０に対してアクセス可能であってよい。例えば、デバイス構成サービス３１０は、ユーザによって利用された（コードモジュールを含んでもよい）以前に使用されたデバイスパッケージ３１８を含む、ユーザに対する（Ｇｉｔレポジトリなどの）バージョン管理システムレポジトリを作成してもよく、バージョン管理システムレポジトリは、バージョン管理システムレポジトリに含まれる（コードモジュールを含み得る）以前に使用されたデバイスパッケージ３１８を、他のユーザに対してアクセス可能にできるようにクローンまたは複製され得る。デバイス構成サービス３１０は、デバイス機能定義３１２における機能性によって定義されるように、デバイス３３０のユースケースに対応する以前に使用されたデバイスパッケージ３１８を検索してもよい。デバイス構成サービス３１０が（例えば、デバイスパッケージと関連付けられた、タグ、フィールド、キーワード、または他の記述子に基づいて）デバイス３３０のユースケースにマッチするまたはこれと同様のデータストア３１７において以前に使用されたデバイスパッケージ３１８を識別する時、デバイス構成サービス３１０は、デバイス３３０を設計しかつビルドする時に同様のデバイスパッケージを推奨してもよい。換言すれば、デバイス構成サービス３１０によって推奨されるデバイスパッケージは、デバイスパッケージ３３０の固有のユースケースに適合させるハードウェアコンポーネント３３６及び互換性があるコードモジュール３１６を指示してもよい。例えば、これらの推奨されたハードウェアコンポーネント３３６は、デバイス３３０のための処理及びメモリ仕様、デバイス３３０のためのセンサ仕様（例えば、温度センサ、運動検出器）、デバイス３３０のための無線通信仕様（例えば、Ｂｌｕｅｔｏｏｔｈ、Ｗｉ−Ｆｉ）、デバイス３３０のためのメッセージングまたはネットワーキング仕様（ＭＱＴＴ、ＴＣＰ／ＩＰ）などを考慮し得る。デバイス構成サービス３１０は、デバイス機能定義３１２を考慮してハードウェアコンポーネント３３６及びコードモジュール３１６の強み及び弱みに関する情報を提供してもよい。
【００５０】
１つの例では、デバイス構成サービス３１０は、ユーザコンピューティングデバイス３２０によって指定される実装定義に基づいて推奨されたハードウェアコンポーネント３３６を定義するためにデバイスパッケージを選択してもよい。例えば、デバイス構成サービス３１０は、実施態様に基づく高性能のハードウェアコンポーネント３３６（例えば、向上した処理及びメモリ機能を有するハードウェアコンポーネント）を選択してもよい、または代替的には、デバイス構成サービス３１０は、実施態様に基づく低性能のハードウェアコンポーネント３３６（例えば、費用が低減したハードウェアコンポーネント）を選択してもよい。
【００５１】
１つの例では、デバイス構成サービス３１０は、ユーザコンピューティングデバイス３２０に推奨されるデバイスパッケージを提供してもよい。デバイス構成サービス３１０は、ユーザインターフェース３２２を介してユーザコンピューティングデバイス３２０から推奨されるデバイスパッケージの選択を先に受信していてもよい。この例では、デバイス構成サービス３１０は、デバイス３３０での使用のためのデバイスパッケージと関連付けられたコードモジュール３１６を提供してもよい。
【００５２】
代替的な例では、デバイス構成サービス３１０は、デバイスパッケージと関連付けられていない代替的なコードモジュール３１６の要求と共に、ユーザコンピューティングデバイス３２０から推奨されるデバイスパッケージの選択を受信してもよい。この例では、デバイス構成サービス３１０は、デバイス３３０での使用のための代替的なコードモジュール３１６を提供してもよい。換言すれば、ユーザコンピューティングデバイス３２０は、ユーザインターフェース３２２を介してデバイスパッケージと関連付けられたコードモジュール３１６を承認してもよく、代替的には、ユーザコンピューティングデバイス３２０は、ユーザインターフェース３２２を介してデバイスパッケージと関連付けられたコードモジュール３１６の一部を修正してもよい。さらに、ユーザは、推奨されるデバイスパッケージと関連付けられたハードウェアコンポーネント３３６の一つ一つを使用することに限定されない場合がある。もっと正確に言えば、ユーザは、デバイスパッケージにおいて指示されるある特定のハードウェアコンポーネント３３６を使用し、かつある特定のデバイスパッケージに含まれない代替的なハードウェアコンポーネント３３６を選択してもよく、それによって、推奨されるデバイスパッケージはデバイス３３０を設計しかつビルドするための始点を提供し得る。
【００５３】
図４は、コードモジュール４４０をテストするための例示のシステム及び関連の動作を示す。コードモジュール４４０は、サービスプロバイダ環境４００で動作するデバイス構成サービス４１０においてテストモジュール４２０を使用してテストされてもよい。１つの例では、何百ものコードモジュール４４０は、デバイスを設計しかつビルドする時に顧客によって選択かつ利用されてもよい。コードモジュール４４０は、デバイス構成サービス４１０のデータストア４３０に記憶される依存関係ツリー４３２においてマッピングされてもよい。依存関係ツリー４３２はコードモジュール４４０間の依存関係をマッピングしてもよい。コードモジュール４４０の数が時間と共に大きくなるにつれ、コードモジュール４４０をテストすることと関連している複雑さも増大する。従って、コードモジュール４４０は、複雑さを低減するテストマトリックスを使用してテストされながら、コードモジュール４４０のある特定の組み合わせが機能的である可能性を改善し得る。１つの例では、コードモジュール４４０がテストモジュール４２０によるテストを成功させた時、これらのコードモジュール４４０は、認定され、かつデバイス構成サービス４１０によって利用可能にされてもよい。テストされるコードモジュール４４０の数が増大すると、依存関係ツリー４３２は増加したコードモジュール４４０を含む場合がある。
【００５４】
１つの例において、コードモジュール４４０のそれぞれの組み合わせをテストするのではなく、テストモジュール４２０は、依存関係ツリー４３２において指示されるように、互いに依存している選択されたコードモジュール４４０の間のインターフェース４５０をテストしてもよい。選択されるコードモジュール４４０は、デバイスを設計しかつビルドする時に利用可能である複数のコードモジュール４４０に含まれてもよい。コードモジュール４４０の間のインターフェース４５０は、コードモジュール４４０の適切な機能性を保証するためにテストされてもよい。１つの代替的な例では、テストモジュール４２０は、コードモジュール４４０の間のインターフェース４５０をランダムにサンプル化してもよく、テストモジュール４２０は、増加したコードモジュールの組み合わせが経時的にテストされることを保証するためにサンプリングを経時的に回転させてもよい。テストモジュール４２０は、コードモジュール４４０のテストに基づいてテストメトリックス４２２を生成してもよく、このテストメトリックス４２２は、どのコードモジュール４４０が認定され、かつどのコードモジュール４４０が認定されていないかを指示し得る。
【００５５】
一例として、第１のコードモジュール（例えば、イーサネットドライバ、ＴＣＰ／ＩＰライブラリ、ＩＰ層、ＭＱＴＴ層）は、特定のチップセットによって使用される時、５つの依存関係（例えば、第１のコードモジュールに依存している５つの他のコードモジュール）を有してもよい。この例では、テストモジュール４２０は、第１のコードモジュールと、５つの他のコードモジュールのそれぞれとの間のインターフェースをテストして、第１のコードモジュールと、５つの依存するコードモジュールのそれぞれとの間の互換性及び有用性を保証し得る。別の例として、第１のコードモジュール（例えば、ＭＱＴＴ層）は、第２のコードモジュール（例えば、イーサネットドライバ）を直接呼び出さなくてもよい。もっと正確に言えば、第１のコードモジュール（例えば、ＭＱＴＴ層）は、第３のコードモジュール（例えば、ＴＣＰ／ＩＰ層）を呼び出してもよいが、第２のコードモジュール（例えば、イーサネットドライバ）を直接呼び出す他のモジュール（例えば、ＴＣＰ／ＩＰ層）がある場合がある。従って、テストモジュール４２０は、互いに依存するモジュール（例えば、第１のコードモジュール及び第３のコードモジュール、ならびに第２のコードモジュール及び第３のコードモジュール）の間のインターフェースをテストしてもよい。
【００５６】
図５は、補助デバイス画像５３４に対する無線による（ＯＴＡ）更新を行うための例示のシステム及び関連の動作を示す。ＯＴＡ更新では、サービスプロバイダ環境５００において動作する更新サービス５３０が行われてもよい。ＯＴＡ更新は、デバイス５７０（例えば、ＩｏＴデバイス）のエージェント５７２にデータストア５３２に記憶された補助デバイス画像５３４を提供することを伴ってもよく、補助デバイス画像５３４はデバイス５７０にインストールされてもよい。補助デバイス画像５３４は、サービスプロバイダ環境５００及び（デバイス５７０がサービスプロバイダ環境５００にアクセスするためのエントリポイントとみなされ得る）デバイスゲートウェイ５５０においてパブリッシュ／サブスクライブデバイス画像ブローカー５４０を介してデバイス５７０に提供されてもよい。例えば、デバイス５７０は、更新サービス５３０がデバイス５７０への配信のために補助デバイス画像５３０をパブリッシュし得るパブリッシュ／サブスクライバデバイス画像ブローカー５４０によって作成されるトピック５４２に対するサブスクリプションを有してもよい。
【００５７】
１つの例では、サービスプロバイダ環境５００におけるデバイス構成サービス５１０はコードモジュール５１２の選択を受信してもよい。デバイス構成サービス５１０はユーザコンピューティングデバイス５６０からの選択を受信してもよい。デバイス構成サービス５１０は、コードモジュールをユーザコンピューティングデバイス５６０に提供してもよい。ユーザコンピューティングデバイス５６０はコードモジュール５１２をアセンブルして補助デバイス画像５３４を生成してもよい。補助デバイス画像５３４は、デバイス５７０に新しい機能性を提供し得る、もしくはデバイス５７０の既存の機能性を増強し得る、または、補助デバイス画像５３４はデバイス５７０における既存の問題を解決し得る。
【００５８】
ユーザコンピューティングデバイス５６０は、サービスプロバイダ環境５００におけるデータストア５３２に対して補助デバイス画像５３４をアップロードしてもよい。更新サービス５３０は、デバイス５７０での使用またはインストールのために補助デバイス画像５３４を安全に配信し得る。更新サービス５３０は、補助デバイス画像５３４を、デバイス５７０によって無線で受信可能であるデータブロックに分割することによって、ダウンロード（またはプッシュ送信）のための補助デバイス画像５３４を提供してもよい。個々のデータブロックはパブリッシュ／サブスクライバブローカー５４０を介してメッセージとして送り出され得る。補助デバイス画像５３４は、補助デバイス画像５３４が信頼できるソースからのものであることを保証するためのコード署名証明書を使用して署名されてもよい。デバイス５７０は、更新サービス５３０から生じる補助デバイス画像５３４を受信してもよく、その後、補助デバイス画像５３４をインストールして、新しい機能性を得ること、既存の機能性を増強すること、問題を解決することなどを行ってもよい。
【００５９】
図６は、デバイス（例えば、ＩｏＴデバイス）をビルドするためにコードモジュールを提供する方法の例を示す。ブロック６１０にあるように、デバイスを設計する時に利用可能であるハードウェアコンポーネントのリストが提供されてもよい。ハードウェアコンポーネントのリストは、サービスプロバイダ環境において動作するデバイス構成サービスから受信されてもよい。ハードウェアコンポーネントのリストに含まれるハードウェアコンポーネントは、デバイス構成サービスによって先に認定されていてもよい。デバイス構成サービスは、ハードウェアコンポーネントのリストに含まれないハードウェアコンポーネントを提供しない場合がある。
【００６０】
ブロック６２０にあるように、ハードウェアコンポーネントのリストからのハードウェアコンポーネントの選択が受信されてもよい。デバイス構成サービスは、ハードウェアコンポーネントのリストからのハードウェアコンポーネントの選択を可能にするユーザインターフェースを提供してもよい。例として、ユーザは、デバイスタイプに基づくデバイス（例えば、電気掃除機、スマートホームメータ）に対するユーザインターフェースを介して適切なハードウェアコンポーネントを選択し得る。
【００６１】
ブロック６３０にあるように、デバイスのユースケースを定義するデバイス機能定義が受信されてもよい。デバイス機能定義は、サービスプロバイダ環境において動作するデバイス構成サービスから受信されてもよい。デバイス機能情報はユーザコンピューティングデバイスから受信されてもよい。デバイス機能定義は、ビルドされるデバイスの本来の用途または目的を表してもよい。
【００６２】
ブロック６４０にあるように、選択されるハードウェアコンポーネントと互換性があるコードモジュールのリストが提供されてもよい。認定されたコードモジュールのリストは、デバイス機能定義に指示されるように、デバイスのユースケースに基づいてフィルタリングされてもよい。さらに、リスト上の認定されたコードモジュールは、ユーザインターフェースを介して先に選択されたハードウェアコンポーネントと互換性がある場合がある。コードモジュールは、ファームウェア、デバイスドライバ、実行可能コード、ライブラリ、構成ファイルなどを含んでもよい。
【００６３】
ブロック６５０にあるように、コードモジュールのリストからのコードモジュールの選択は受信されてもよい。例えば、デバイス構成サービスによって提供されるユーザインターフェースは、コードモジュールのリストからのコードモジュールの選択を可能にしてもよい。コードモジュールは、ハードウェアコンポーネントがデバイスにおいて動作できるようにしてもよい。換言すれば、固有のコードモジュールは、デバイスにおける固有の対応するハードウェアコンポーネントの動作及び／またはこれとのインターフェースを可能にしてもよい。
【００６４】
ブロック６６０にあるように、コードモジュールはデバイスを設計するために提供されてもよい。例えば、デバイス構成サービスは、ラップトップまたはパーソナルコンピュータなどのユーザコンピューティングデバイスにコードモジュールを提供してもよい。ユーザコンピューティングデバイスは、コードモジュールからデバイス画像を生成後、デバイス画像を、ＩｏＴデバイスなどのデバイスにロードしてもよい。デバイス画像は、デバイスにおけるハードウェアコンポーネントが正確に機能できるようにし得るデバイスでインストールされてもよい。さらに、構成パラメータのセットはコードモジュールが与えられてもよい。構成パラメータのセットは、デバイス機能定義において指示されるように、デバイスのユースケースに基づいて選択されてもよく、構成パラメータのセットはデバイス画像を生成する時に使用されてもよい。
【００６５】
図７は、デバイス（例えば、ＩｏＴデバイス）をビルドするためにコードモジュールを提供する方法の例を示す。ブロック７１０にあるように、デバイスに対するデバイス機能定義が受信されてもよい。例えば、サービスプロバイダ環境において動作するデバイス構成サービスは、デバイス機能定義を受信可能にするユーザインターフェースを提供してもよい。デバイス機能定義は、デバイスのユースケースを表してもよい。換言すれば、デバイス機能定義は、デバイスが設計されている時にデバイスの意図されるユースケースを定義し得る。
【００６６】
ブロック７２０にあるように、ハードウェアコンポーネントおよび互換性があるコードモジュールを指示するデバイスパッケージは、デバイスをビルドするために推奨されてもよい。デバイス構成サービスは、デバイス機能定義に指示されるように、デバイスのユースケースに合う、以前に使用されたデバイスパッケージからのデバイスに対して推奨されるデバイスパッケージを識別してもよい。換言すれば、デバイス構成サービスは、現在設計されているデバイスと比較して同様のユースケースによるデバイスパッケージを識別してもよく、デバイス構成サービスは、これらのデバイスパッケージと関連付けられる、ハードウェアコンポーネント及び互換性があるコードモジュールを推奨してもよい。デバイス構成サービスは、デバイス機能定義に基づいてデバイスに適している特徴または特性を有する、ハードウェアコンポーネント及び互換性があるソフトウェアコンポーネントによるデバイスパッケージを推奨してもよい。
【００６７】
ブロック７３０にあるように、デバイスパッケージの選択が受信されてもよい。例えば、デバイス構成サービスによって提供されるユーザインターフェースは、デバイスを設計しかつビルドしているユーザによる推奨されるデバイスパッケージの選択を可能にしてもよい。デバイスパッケージを選択することによって、ユーザは、デバイスパッケージと関連付けられる、ハードウェアコンポーネント及び互換性があるコードモジュールを選択してもよい。コードモジュールはハードウェアコンポーネントがデバイスにおいて動作できるようにしてもよい。換言すれば、固有のコードモジュールは、デバイスにおける固有の対応するハードウェアコンポーネントの動作及び／またはこれによるインターフェース接続を可能にし得る。
【００６８】
ブロック７４０にあるように、デバイスパッケージと関連付けられたコードモジュールは、デバイスのダウンロード及びインストールのために提供されてもよい。例えば、デバイス構成サービスは、ラップトップまたはパーソナルコンピュータなどのユーザコンピューティングデバイスにコードモジュールを提供してもよい。ユーザコンピューティングデバイスは、コードモジュールからデバイス画像を生成後、ＩｏＴなどのデバイスにデバイス画像をロードしてもよい。
【００６９】
図８は、デバイス（例えば、ＩｏＴデバイス）をビルドするためにコードモジュールを提供する方法の例を示す。ブロック８１０にあるように、制約されたハードウェア機能を有するデバイスを設計する際に使用されるハードウェア仕様が受信されてもよい。ハードウェア仕様は、設計されているデバイスにおいて使用される１つまたは複数のハードウェアコンポーネントを定義してもよい。さらに、デバイスの制約されたハードウェア機能は、デバイスの処理及びメモリ機能の限定のみならず、デバイスにある特定のハードウェア機能がないこと（例えば、Ｗｉ−Ｆｉ機能、Ｂｌｕｅｔｏｏｔｈ機能、デジタル信号処理（ＤＳＰ）機能などがないこと）を指す場合がある。
【００７０】
ブロック８２０にあるように、デバイスのデバイス構成が受信されてもよい。デバイス構成はデバイスのユースケースを含んでもよい。さらに、デバイス構成は、デバイスにロードされる対象のコードモジュールに関する入力を含んでもよい。ユースケースは、デバイスの特定の用途、またはデバイスによって獲得される固有の特徴を表してもよい。コードモジュールに関する入力はユーザから受信されてもよい。例えば、入力は、デバイスを設計する時にユーザにとって関心がある特定のコードモジュールに関する入力を表してもよい。
【００７１】
ブロック８３０にあるように、デバイスの制約されたハードウェア機能及びデバイスのデバイス構成を満足させるハードウェア仕様と互換性があるコードモジュールのリストが判断されてもよい。換言すれば、コードモジュールのリストは、デバイスの制約されたハードウェア機能を満足させるコードモジュール（例えば、デバイスに含まれるものより多い処理及びメモリを消費しないコードモジュール）を含むように、かつデバイスのデバイス構成（例えば、対象のコードモジュールに関するユースケース及び／またはユーザ入力）に合うことはもとより、ハードウェア仕様と互換性があるように判断されてもよい。
【００７２】
ブロック８４０にあるように、コードモジュールのリストが提供されてもよい。例えば、コードモジュールのリストはユーザインターフェースを介して提供されてもよい。コードモジュールは、ファームウェア、デバイスドライバ、実行可能コード、ライブラリ、構成ファイルなどを含んでもよい。ブロック８５０において、コードモジュールのリストからのコードモジュールの選択が受信されてもよい。コードモジュールの選択はユーザインターフェースを介して受信されてもよい。ブロック８６０にあるように、コードモジュールのリストから選択されたコードモジュールは、デバイスを設計する際に使用するために提供されてもよい。例えば、選択されたコードモジュールを使用してデバイス画像を生成してもよく、デバイス画像はデバイスにロードされてもよい。
【００７３】
図９は、本技術が実行し得るいくつかのコンピューティングインスタンス９０４ａ〜ｄを実行かつ管理するために使用され得る例示のコンピューティングサービス９００を示すブロック図である。とりわけ、示されるコンピューティングサービス９００は、本明細書に説明される技術が使用され得る１つの環境を示す。コンピューティングサービス９００は、例えば、ホストコンピューティングインスタンス９０４ａ〜ｄに対して使用されてもよいさまざまな仮想化サービスリソースを含む１つのタイプの環境であってよい。
【００７４】
コンピューティングサービス９００は、最終受信者のコミュニティに対するソフトウェアサービスとして、計算、記憶、及びネットワーキング機能の配信を可能にしてもよい。１つの例では、コンピューティングサービス９００は、組織によってまたはこの代理として組織のために確立されてもよい。すなわち、コンピューティングサービス９００は「プライベートクラウド環境」を供給し得る。別の例では、コンピューティングサービス９００はマルチテナント環境をサポートしてもよく、ここで、複数の顧客は独立して動作してもよい（すなわち、パブリッククラウド環境）。一般的に言えば、コンピューティングサービス９００は、以下のモデル、Ｉｎｆｒａｓｔｒｕｃｔｕｒｅ  ａｓ  ａ  Ｓｅｒｖｉｃｅ（「ＩａａＳ」）、Ｐｌａｔｆｏｒｍ  ａｓ  ａ  Ｓｅｒｖｉｃｅ（「ＰａａＳ」）、及び／またはＳｏｆｔｗａｒｅ  ａｓ  ａ  Ｓｅｒｖｉｃｅ（「ＳａａＳ」）を提供してもよい。他のモデルが提供され得る。ＩａａＳモデルについて、コンピューティングサービス９００は物理または仮想マシン及び他のリソースとしてコンピュータを供給してもよい。仮想マシンは、さらに後述されるように、ハイパーバイザによってゲストとして実行され得る。ＰａａＳモデルは、オペレーティングシステム、プログラミング言語実行環境、データベース、及びウェブサーバを含んでもよいコンピューティングプラットフォームを配信する。
【００７５】
アプリケーション開発者は、基礎を成すハードウェア及びソフトウェアを買い求めかつ管理する費用を負担することなくコンピューティングサービスプラットフォームでこれらのソフトウェアソリューションを開発しかつ実行し得る。ＳａａＳモデルによって、コンピューティングサービス９００におけるアプリケーションソフトウェアのインストール及び動作が可能になる。最終顧客は、例えば、ウェブブラウザまたは他の軽量クライアントアプリケーションを実行する、デスクトップコンピュータ、ラップトップ、タブレット、スマートフォンなど、ネットワーククライアントデバイスを使用してコンピューティングサービス９００にアクセスしてもよい。当技術に精通した者は、コンピューティングサービス９００が「クラウド」環境として説明され得ることを認識するであろう。
【００７６】
詳細に示されるコンピューティングサービス９００は、複数のサーバコンピュータ９０２ａ〜ｄを含んでもよい。サーバコンピュータ９０２ａ〜ｄはまた、物理ホストとして既知であり得る。４つのサーバコンピュータが示されるが、任意の数が使用され得、大規模なデータセンタは何千ものサーバコンピュータを含む場合がある。コンピューティングサービス９００は、コンピューティングインスタンス９０４ａ〜ｄを実行するためのコンピューティングリソースを提供してもよい。コンピューティングインスタンス９０４ａ〜ｄは、例えば、仮想マシンであってよい。仮想マシンは、物理マシンのようなアプリケーションを実行するマシン（すなわち、コンピュータ）のソフトウェア実施態様のインスタンスであってよい。仮想マシンの例では、サーバコンピュータ９０２ａ〜ｄのそれぞれは、インスタンスを実行することが可能なインスタンスマネージャ９０８ａ〜ｄを実行するように構成されてもよい。インスタンスマネージャ９０８ａ〜ｄは、ハイパーバイザ、仮想マシンマネージャ（ＶＭＭ）、または、単一サーバで複数のコンピューティングインスタンス９０４ａ〜ｄの実行を可能にするように構成される別のタイプのプログラムであってよい。さらに、コンピューティングインスタンス９０４ａ〜ｄのそれぞれは１つまたは複数のアプリケーションを実行するように構成されてもよい。
【００７７】
サーバ９１４は、本技術を実装する、またはコンピューティングサービス９００及びコンピューティングインスタンス９０４ａ〜ｄの動作を管理するためのソフトウェアコンポーネントを実行するために予約されてもよい。例えば、サーバコンピュータ９１４はデバイス構成サービス９１５を実行してもよい。デバイス構成サービス９１５は、デバイスを設計する時に使用されるハードウェアコンポーネントの指示を受信してもよい。デバイス構成サービス９１５は、ハードウェアコンポーネントと互換性があるコードモジュールのリストを提供してもよい。コードモジュールのリストは、デバイスのユースケースに基づいてもよい。デバイス構成サービス９１５は、ハードウェアコンポーネントのリストから選択されるハードウェアコンポーネントと互換性があるコードモジュールのリストからのコードモジュールの選択を受信してもよい。デバイス構成サービス９１５は、デバイスでの使用のためにコードモジュールを提供し得る。
【００７８】
サーバコンピュータ９１６は管理コンポーネント９１８を実行してもよい。顧客は、管理コンポーネント９１８にアクセスして、顧客によって購入されたコンピューティングインスタンス９０４ａ〜ｄの動作のさまざまな態様を構成してもよい。例えば、顧客は、コンピューティングインスタンス９０４ａ〜ｄをセットアップし、かつコンピューティングインスタンス９０４ａ〜ｄの構成に対して変更を行ってもよい。
【００７９】
展開コンポーネント９２２を使用して、コンピューティングインスタンス９０４ａ〜ｄの展開時に顧客を支援してもよい。展開コンポーネント９２２は、アカウント所有者名、クレジットカード情報、所有者の国など、コンピューティングインスタンス９０４ａ〜ｄと関連付けられたアカウント情報にアクセスしてもよい。展開コンポーネント９２２は、コンピューティングインスタンス９０４ａ〜ｄがどのように構成され得るかを表すデータを含む、顧客からの構成を受信してもよい。例えば、構成は、オペレーティングシステムを含み、コンピューティングインスタンス９０４ａ〜ｄにインストールされる１つまたは複数のアプリケーションを提供し、コンピューティングインスタンス９０４ａ〜ｄを構成するために実行されるスクリプト及び／または他のタイプのコードを提供し、アプリケーションキャッシュがどのように準備されるかを指定するキャッシュロジック、及び他のタイプの情報を提供してもよい。展開コンポーネント９２２は、顧客提供の構成及びキャッシュロジックを利用して、コンピューティングインスタンス９０４ａ〜ｄを、構成、用意、及び起動し得る。構成、キャッシュロジック、及び他の情報は、管理コンポーネント９１８にアクセスする顧客によって、またはこの情報を展開コンポーネント９２２に直接提供することによって指定されてもよい。
【００８０】
顧客アカウント情報９２４は、マルチテナント環境の顧客と関連付けられたいずれの所望される情報も含んでもよい。例えば、顧客アカウント情報は、顧客、顧客の住所、課金情報、ライセンス情報、インスタンスを起動するためのカスタマイズパラメータ、スケジューリング情報などのための一意の識別子を含んでもよい。上述されるように、顧客アカウント情報９２４はまた、ＡＰＩ要求に対する非同期応答の暗号化の際に使用されるセキュリティ情報を含んでもよい。「非同期」とは、ＡＰＩ応答が、最初の要求後の、及び異なるネットワーク接続によるどんな時にも行われてもよいことを意味する。
【００８１】
ネットワーク９１０は、コンピューティングサービス９００及びサーバコンピュータ９０２ａ〜ｄ、９１６を相互接続するために利用されてもよい。ネットワーク９１０は、ローカルエリアネットワーク（ＬＡＮ）であってもよく、かつ、広域ネットワーク（ＷＡＮ）９１２またはインターネットに接続されてもよく、それによって、最終顧客はコンピューティングサービス９００にアクセスし得る。さらに、ネットワーク９１０は、サーバ９０２ａ〜ｄ間の通信を提供するために物理ネットワークにオーバーレイされる仮想ネットワークを含んでもよい。図９に示されるネットワークトポロジは、より多くのネットワーク及びネットワーキングデバイスが本明細書に開示されるさまざまなコンピューティングシステムを相互接続するために利用され得るため、簡略化されている。
【００８２】
図１０は、この技術のモジュールまたはコードコンポーネントが実行し得るコンピューティングデバイス１０１０を示す。該技術の高水準の例が実行され得るコンピューティングデバイス１０１０が示されている。コンピューティングデバイス１０１０は、メモリデバイス１０２０と通信している１つまたは複数のプロセッサ１０１２を含み得る。コンピューティングデバイスは、コンピューティングデバイスにおけるコンポーネントに対するローカル通信インターフェース１０１８を含んでもよい。例えば、ローカル通信インターフェースは、要望に応じて、ローカルデータバス及び／または任意の関連のアドレスもしくは制御バスであってよい。
【００８３】
メモリデバイス１０２０は、モジュール１０２４、または、プロセッサ（複数可）１０１２によって実行可能なコードコンポーネント、及びモジュール１０２４についてのデータを含有し得る。モジュール１０２４は先述した機能を実行してもよい。データストア１０２２はまた、プロセッサ（複数可）１０１２によって実行可能であるオペレーティングシステムと共にモジュール１０２４及び他のアプリケーションに関連しているデータを記憶するためにメモリデバイス１０２０に位置していてもよい。
【００８４】
他のアプリケーションはまた、メモリデバイス１０２０に記憶されてもよく、プロセッサ（複数可）１０１２によって実行可能であってよい。本明細書に論じられるコンポーネントまたはモジュールは、混成した方法を使用して、コンパイル、解釈、または実行される高水準プログラミング言語を使用するソフトウェアの形態で実装されてもよい。
【００８５】
コンピューティングデバイスはまた、コンピューティングデバイスによって使用可能であるＩ／Ｏ（入力／出力）デバイスにアクセスしてもよい。Ｉ／Ｏデバイスの例は、コンピューティングデバイスからの出力を表示するために利用可能なディスプレイスクリーンである。他の既知のＩ／Ｏデバイスは、必要に応じてコンピューティングデバイスによって使用され得る。ネットワーキングデバイス１０１６及び同様の通信デバイスはコンピューティングデバイスに含まれてもよい。ネットワーキングデバイス１０１６は、インターネット、ＬＡＮ、ＷＡＮ、または他のコンピューティングネットワークに接続する有線または無線ネットワーキングデバイスであってよい。
【００８６】
メモリデバイス１０２０に記憶されるように示されているコンポーネントまたはモジュールは、プロセッサ１０１２によって実行されてもよい。「実行可能な」という用語は、プロセッサ１０１２によって実行され得る形態にあるプログラムファイルを意味し得る。例えば、高水準言語のプログラムは、メモリデバイス１０２０のランダムアクセス部分にロードされ、かつプロセッサ１０１２によって実行され得るフォーマットにおける機械語にコンパイルされてもよい、または、ソースコードは、別の実行可能プログラムによってロードされ、かつプロセッサによって実行されるメモリのランダムアクセス部分において命令を生成するために解釈されてもよい。実行可能プログラムは、メモリデバイス１０２０の任意の部分またはコンポーネントに記憶されてもよい。例えば、メモリデバイス１０２０は、ランダムアクセスメモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、フラッシュメモリ、ソリッドステートドライブ、メモリカード、ハードドライブ、光ディスク、フロッピーディスク、磁気テープ、または任意の他のメモリコンポーネントであってよい。
【００８７】
プロセッサ１０１２は複数のプロセッサを代表するものであってもよく、メモリ１０２０は処理回路に並列に動作する複数のメモリユニットを代表するものであってよい。これによって、システムにおけるプロセス及びデータに対する並列処理チャネルが提供され得る。ローカルインターフェース１０１８は、複数のプロセッサのいずれかと複数のメモリのいずれかとの間の通信を容易にするためのネットワークとして使用されてもよい。ローカルインターフェース１０１８は、負荷バランシング、大量データ転送、及び同様のシステムなどの通信を調整するように設計される追加のシステムを使用してもよい。
【００８８】
この技術に対して提示されるフローチャートは、固有の実行順序を含意する場合があり、この実行順序は示されるものと異なっていてもよい。例えば、もう２つのブロックの順序は、示される順序に対して再配置されてもよい。さらに、連続して示される２つ以上のブロックは、並列にまたは部分的な並列化で実行されてもよい。いくつかの構成では、フローチャートに示される１つまたは複数のブロックは省略またはスキップされてもよい。任意の数のカウンタ、状態変数、警告セマフォー、またはメッセージは、ユーティリティプログラム、会計、性能、測定、及びトラブルシューティングを向上させる目的でまたは同様の理由で論理フローに追加される場合がある。
【００８９】
本明細書において説明される機能ユニットのいくつかは、これらの実施態様の独立性をより詳細に強調するために、モジュールとしてラベル設定されている。例えば、モジュールは、カスタムＶＬＳＩ回路もしくはゲートアレイ、ロジックチップなどの既製の半導体、トランジスタ、または他の個別部品を含むハードウェア回路として実装されてもよい。モジュールはまた、フィールドプログラマブルゲートアレイ、プログラマブルアレイロジック、またはプログラマブルロジックデバイスなどのプログラマブルハードウェアデバイスにおいて実装されてもよい。
【００９０】
モジュールはまた、さまざまなタイプのプロセッサによる実行のためにソフトウェアにおいて実装されてもよい。実行可能コードの識別されたモジュールは例えば、オブジェクト、手順、または関数として整理され得るコンピュータ命令の１つまたは複数のブロックを含んでもよい。それにもかかわらず、識別されたモジュールの実行可能ファイルは、共に物理的に位置する必要はないが、モジュールを含み、かつ共に論理的に結合される時のモジュールの表明された目的を達成する種々の位置に記憶される本質的に異なる命令を含んでもよい。
【００９１】
実際は、実行可能コードのモジュールは単一の命令または多くの命令であってもよく、さらには、いくつかの種々のコードセグメントで、種々のプログラムの間で、及び数個のメモリデバイスにわたって分散されてもよい。同様に、運用データは、モジュール内で本明細書において識別されかつ示され得、任意の適した形態で組み込まれ、かつ任意の適したタイプのデータ構造内に整理されてもよい。運用データは、単一のデータセットとして収集されてもよい、または種々のストレージデバイスを含む種々の場所で分散されてもよい。モジュールは、所望の機能を実行するように動作可能であるエージェントを含んで、受動的または能動的であってよい。
【００９２】
本明細書に説明される技術はまた、コンピュータ可読命令、データ構造、プログラムモジュール、または他のデータなどの情報の記憶のための任意の技術によって実装される、揮発性及び不揮発性、取り外し可能及び取り外し不可能な媒体を含むコンピュータ可読記憶媒体に記憶可能である。コンピュータ可読記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ、もしくは他のメモリ技術、ＣＤ−ＲＯＭ，デジタル多用途ディスク（ＤＶＤ）、もしくは他の光学式記憶、磁気カセット、磁気テープ、磁気ディスクストレージ、もしくは他の磁気ストレージデバイス、または、所望の情報及び所望の技術を記憶するために使用可能である任意の他のコンピュータ記憶媒体を含むが、これらに限定されない。
【００９３】
本明細書に説明されるデバイスはまた、通信接続またはネットワーキング装置、及びデバイスが他のデバイスと通信できるようにするネットワーキング接続を含有してもよい。通信接続は通信媒体の例である。通信媒体は典型的には、コンピュータ可読命令、データ構造、プログラムモジュール、及び搬送波または他の移送機構などの変調データ信号における他のデータを具現化し、かつ任意の情報配信媒体を含む。「変調データ信号」は、この特性セットの1つまたは複数を有する、または信号における情報を符号化するように変更されていることを意味する。限定ではなく例として、通信媒体は、有線ネットワークまたは直接有線接続、及び音響、無線周波数、赤外線、及び他の無線媒体などの無線媒体を含む。本明細書に使用されるようなコンピュータ可読媒体という用語は、通信媒体を含む。
【００９４】
図面に示される例を参照し、本明細書においてこれら例を説明するために固有の言語が使用された。それにもかかわらず、これらによって本技術の範囲の限定は意図されないことは理解されるであろう。当業者が本開示を把握すると、本明細書に示される特徴の改変及びさらなる修正、ならびに、本明細書に示される例の追加的応用に想到するであろうが、それらは本開示の範囲内と見なされるものとする。
【００９５】
上述の事項は、以下の条項を考慮してより良く理解され得る。
１.１つまたは複数のプロセッサによって実行される命令が具現化されている非一時的な機械可読記憶媒体であって、前記命令は、
サービスプロバイダ環境において動作するデバイス構成サービスから、デバイスを設計する時に利用可能なハードウェアコンポーネントのリストを提供することと、
前記ハードウェアコンポーネントのリストからハードウェアコンポーネントの選択を受信することと、
前記デバイスのユースケースを定義するデバイス機能定義を受信することと、
選択されたハードウェアコンポーネントと互換性があるコードモジュールのリストを提供することであって、前記コードモジュールのリストは前記デバイスの前記ユースケースに基づいてフィルタリングされる、前記コードモジュールのリストを提供することと、
前記コードモジュールのリストからコードモジュールの選択を受信することであって、前記コードモジュールは、前記ハードウェアコンポーネントのリストから選択される前記ハードウェアコンポーネントを前記デバイスにおいて動作できるようにする、前記コードモジュールの選択を受信することと、
前記デバイスを設計するために前記コードモジュールを提供することと、
を含む、前記非一時的な機械可読記憶媒体。
【００９６】
２．前記デバイスの前記ユースケースに部分的に基づいて前記コードモジュールに対する構成パラメータのセットを識別することと、
前記構成パラメータのセットに前記コードモジュールを提供することと、
をさらに含む、条項１に記載の非一時的な機械可読記憶媒体。
【００９７】
３．前記デバイスでの使用のために前記コードモジュールを自動的に選択する従属関係ツリーを生成することをさらに含む、条項１に記載の非一時的な機械可読記憶媒体。
【００９８】
４．制約されたハードウェア機能を有するデバイスを設計する際に使用されるハードウェア仕様を受信することと、
前記デバイスのデバイス構成を受信することであって、前記デバイス構成は前記デバイスのユースケースを含む、前記デバイス構成を受信することと、
前記デバイスの前記制約されたハードウェア機能及び前記デバイス構成を満足させる前記ハードウェア仕様と互換性があるコードモジュールのリストを判断することと、
前記コードモジュールのリストを提供することと、
前記コードモジュールのリストからコードモジュールの選択を受信することと、
前記デバイスを設計する際に使用するために前記コードモジュールのリストから選択される前記コードモジュールを提供することと、
を含む、方法。
【００９９】
５．サービスプロバイダ環境におけるデバイス画像ビルドサービスを使用して前記コードモジュールを含むデバイス画像を生成することと、
前記デバイスでの配信及びインストールのために前記デバイス画像を提供することと、
をさらに含む、条項４に記載の方法。
【０１００】
６．前記デバイスの前記デバイス構成を定義するデバイス機能定義を受信することであって、前記デバイス構成は前記デバイスにロードされる対象のコードモジュールに関する入力をさらに含む、前記デバイス機能定義を受信することと、
をさらに含む、条項４に記載の方法。
【０１０１】
７．前記デバイスで使用される前記コードモジュールは、前記デバイスで実行するリアルタイム動作システム（ＲＴＯＳ）と互換性がある、条項４に記載の方法。
【０１０２】
８．前記デバイスで使用される前記コードモジュールの選択を可能にするユーザインターフェースを提供することをさらに含む、条項４に記載の方法。
【０１０３】
９．前記デバイスを設計する時に利用可能である複数のコードモジュールに含まれるコードモジュールの間のインターフェースをテストすることであって、前記コードモジュールの間の前記インターフェースは、前記複数のコードモジュールに対して適切な機能性を保証するためにテストされる、前記インターフェースをテストすることをさらに含む、条項４に記載の方法。
【０１０４】
１０．前記コードモジュールのリストから選択される前記コードモジュールから補助デバイス画像を作成することであって、前記補助デバイス画像はサービスプロバイダ環境において動作する更新サービスにアップロードされる、前記補助デバイス画像を作成することと、
前記更新サービスから、前記デバイスでインストールするための更新として前記補助デバイス画像を提供することであって、前記補助デバイス画像は前記デバイスに対して先に受信したデバイス画像の機能を増強させる、前記補助デバイス画像を提供することと、
をさらに含む、条項４に記載の方法。
【０１０５】
１１．前記デバイスに対する前記構成に部分的に基づいて前記コードモジュールに対する構成パラメータのセットを修正することと、
前記構成パラメータのセットに前記コードモジュールを提供することと、
をさらに含む、条項４に記載の方法。
【０１０６】
１２．サービスプロバイダ環境において動作するデバイス構成サービスから前記コードモジュールを提供することをさらに含む、条項４に記載の方法。
【０１０７】
１３．前記デバイス上での使用のために前記コードモジュールを自動的に選択する従属関係ツリーを、前記従属関係ツリーにおいて定義されるソフトウェア従属関係に従って生成することをさらに含む、条項４に記載の方法。
【０１０８】
１４．前記デバイスに対する前記コードモジュールは、マイクロコントローラモジュール、デジタル信号処理（ＤＳＰ）モジュール、通信モジュール、センサモジュール、カメラモジュール、トランシーバモジュール、または電力管理モジュールの１つまたは複数を含む、条項４に記載の方法。
【０１０９】
１５．少なくとも１つのプロセッサと、
少なくとも１つのメモリデバイスと、を備えるシステムであって、
前記少なくとも１つのメモリデバイスは、実行される時、前記システムに、
前記デバイスに対するデバイス機能定義を受信することであって、前記デバイス機能定義は前記デバイスのユースケースを表す、前記デバイス機能定義を受信することと、
前記デバイスをビルドするためにハードウェアコンポーネント及び互換性があるコードモジュールを指示するデバイスパッケージを推奨することであって、前記デバイスに対して推奨される前記デバイスパッケージは、前記デバイスの前記ユースケースに対応する、以前に使用されたデバイスパッケージから識別される、前記デバイスパッケージを推奨することと、
前記デバイスパッケージの選択を受信することと、
前記デバイスでの使用のために前記デバイスパッケージと関連付けられた前記コードモジュールを提供することと、
を行わせる複数のデータ及び命令を記憶するデータストアを含む、前記システム。
【０１１０】
１６．前記複数のデータ及び命令は、実行される時、前記システムに、
前記デバイスパッケージと関連付けられていない代替的なコードモジュールに対する要求と共に前記デバイスパッケージの選択を受信することと、
前記デバイスを設計する際に使用するために前記代替的なコードモジュールを提供することと、
を行わせる、条項１５に記載のシステム。
【０１１１】
１７．前記複数のデータ及び命令は、実行される時、前記システムに、
デバイス画像を、前記コードモジュールから生成しかつ前記デバイスにインストールすることを可能にする前記コードモジュールを提供させる、条項１５に記載のシステム。
【０１１２】
１８．前記複数のデータ及び命令は、実行される時、前記システムに、
サービスプロバイダ環境で動作するデバイス構成サービスにおいて、前記デバイスに対する補助コードモジュールの選択を受信することと、
前記デバイスでの使用のために前記補助コードモジュールを提供することであって、前記補助コードモジュールを使用して、前記サービスプロバイダ環境において動作する更新サービスにアップロードされる補助デバイス画像を作成する、前記補助コードモジュールを提供することと、
前記更新サービスから、前記デバイスでインストールするための更新として前記補助デバイス画像を提供することであって、前記補助デバイス画像は前記デバイスに対して、先に受信したデバイス画像の機能を増強させる、前記補助デバイス画像を提供することと、
を行わせる、条項１５に記載のシステム。
【０１１３】
１９．前記複数のデータ及び命令は、実行される時、前記システムに、
前記デバイスの前記ユースケースに部分的に基づいて前記コードモジュールに対する構成パラメータのセットを識別することと、
前記構成パラメータのセットに前記コードモジュールを提供することと、
を行わせる、条項１５に記載のシステム。
【０１１４】
２０．前記複数のデータ及び命令は、実行される時、前記システムに、
前記デバイスパッケージの選択を可能にするユーザインターフェースを提供することを行わせる、条項１５に記載のシステム。
【０１１５】
さらに、説明した特徴、構造、または特性は、１つまたは複数の例において任意の適したやり方で組み合わせられてもよい。前述の説明において、説明した技術の例を十分理解してもらうためのさまざまな構成の例など、多数の具体的詳細が提供された。しかしながら、この技術が、この具体的詳細の１つまたは複数がなく、または他の方法、コンポーネント、デバイスなどによって実践可能であることを、当業者は認識するであろう。他の事例では、この技術の態様を不明瞭にすることを回避するために周知の構造または動作は詳細に示されておらず、説明されていない。
【０１１６】
主題は、構造的特徴及び／または動作に固有の言語で説明されているが、添付の特許請求の範囲で定義される主題が上述される固有の特徴及び動作に必ずしも限定されないことは理解されたい。もっと正確に言えば、上述される固有の特徴及び作用は、特許請求の範囲を実施する例示の形態として開示されている。説明した技術の趣旨及び範囲から逸脱することなく、多数の修正及び代替的な配置を案出可能である。
【図１Ａ】
2021500686.tif 000003
【図１Ｂ】
2021500686.tif 000004
【図２】
2021500686.tif 000005
【図３】
2021500686.tif 000006
【図４】
2021500686.tif 000007
【図５】
2021500686.tif 000008
【図６】
2021500686.tif 000009
【図７】
2021500686.tif 000010
【図８】
2021500686.tif 000011
【図９】
2021500686.tif 000012
【図１０】
2021500686.tif 000013
【国際調査報告】
2021500686.tif 000014
2021500686.tif 000015
2021500686.tif 000016