目次


初めての IoT 開発から学んだ教訓

Comments

IoT アプリケーションの構築に着手する際は、通常のソフトウェア開発環境に加えて、さまざまなデバイス、ハードウェア・キット、SDK、通信プロトコルについて調べなければなりません。私が初めて IoT 開発の世界に挑んだとき、その経験から次の重要な教訓を学びました。

  • 複数のデバイス SDK の使用経験を積む必要がある
  • IoT に最適な通信プロトコルは MQTT である
  • コンテナーによって IoT 開発を大幅に単純化できる
  • IoT ソリューションをセキュリティーで保護するにはブロックチェーン・テクノロジーを利用できる

IoT 開発を独特な分野にしている要素

IoT アプリケーション開発は、他の類のソフトウェア開発とは異なります。それは、IoT には以下の固有の特性があるからです。

  • 一般に、個々の IoT デバイスの計算能力は限られています。コンピューターやスマートフォンとは異なり、IoT デバイスの主な機能は計算ではありません。典型的な IoT デバイスには、計算以外の目的で設計された小型の MCU (Microcontroller Unit) ボードしか搭載されていません。
  • IoT デバイスには固有のプログラミング環境があります。デバイスの計算能力が限られていることから課せられる制約事項により、IoT デバイスでは、従来のオペレーティング・システムや、遥かに強力なデバイス用に設計された開発者向けツールを実行することはできません。さらに、典型的な IoT デバイスには、プログラマーがアクセスするための画面やキーボードがないのが一般的です。
  • 多くの場合、IoT デバイスは限られた帯域幅と不安定なネットワーク環境内で動作します。多くの IoT デバイスは携帯型であるか、現場に設置されます。そのようなデバイスは、利用可能な何らかのワイヤレス・ネットワークに接続する必要があります。さらに、ネットワークが利用できないときでも機能し続けなければなりません。
  • 大きな課題となるのは、IoT デバイスのソフトウェアをデプロイして管理することです。従来の UI も、安定したネットワークも使用できない状態では、IoT ソフトウェア・アップデートがリリースされたとしても、現場で使われているデバイスのすべてを、ユーザーが手作業で更新するのはほぼ不可能です。
  • IoT アプリケーションは M2M (Machine-to-Machine) アプリケーションです。M2M アプリケーションでは通常、各 IoT デバイスがタイムスタンプ付きの一連のセンサー・データ・ポイントを生成します。そのようなデータは、人間が理解するのは困難であり、限られた価値しかありません。したがって、一般には IoT データは他のマシンとデバイスによって集約されて処理されます。
  • IoT デバイスは現場で改ざんされる可能性があります。IoT デバイスの数は人の数を遥かに超えることもあり、ほとんどの IoT デバイスは長時間、無人の状況に置かれます。つまり、IoT デバイスは、改ざんをはじめ、悪意のある攻撃にさらされていることになります。

教訓 1: さまざまなデバイス SDK を調べて試してみる

IoT デバイスとアプリケーション・シナリオの多様性により、IoT アプリケーション開発は特殊化したものになりがちです。開発者は汎用コンピューターを使用するのではなく、さまざまなハードウェアとソフトウェアを調べて、特定の使用ケースに最適な組み合わせを選ばなければなりません。

これまでに私が書いた記事のうちの 1 つ、「Build a practical IoT app, an air quality monitor」では、作成する IoT アプリケーションの基礎として、NodeMCU ボードを使用しました。NodeMCU には非常に際立った利点がいくつかあります (以前の記事「Getting to know NodeMCU and its DEVKIT board」で紹介しています)。例えば、Wi-Fi のサポートが組み込まれていること、非常に低価格であること、LUA プログラミング言語をサポートすることなどです。その一方で、NodeMCU には大規模な開発者コミュニティーがないという欠点もあります。この欠点が影響して、NodeMCU は、センサー・メーカーのコミュニティーによって徹底的にテストされてもいなければ、サポートされてもいません。ほとんどのセンサーは問題なく NodeMCU と連動しますが (結局のところ、NodeMCU はデータ I/O には標準のデジタルおよびアナログ PIN をサポートしているためです)、多くの場合、システムを安定して機能させるためには、開発者がかなりの量の試行錯誤を繰り返さなければならなくなります。

単純な IoT アプリケーションのプロトタイプを作成するには、Arduino スターター・キットを出発点として使用することもできます。Arduino ボードの利点は、その単純さあります。I/O ピンが備わっていることを除けば、Arduino ボードは通常のコンピューターと同じです。そして、子供向けのブロック・ベースのプログラミング環境から従来の C プログラミング言語まで、複数のプログラミング環境をサポートします。Arduino には大規模なコミュニティーがあり、子供たちにプログラミングを教えるために広く使用されていることから、センサー、周辺機器 (Wi-Fi およびセルラー・ネットワーキング・モジュールや LED ライトなど)、そしてチュートリアルとサンプル・コードからなるエコシステムが Arduino ボードを中心に展開されています。概念実証や教育向けプロジェクトには、Arduino 開発キットが理想的です。

センサーと連動するだけでなく、それ以上の機能が必要なアプリケーションには、Arduino や NodeMCU の計算能力では物足りないと感じることもあるでしょう。Raspberry Pi 開発キットは、Intel x86 CPU を搭載した低コストのボードです。x86 はかなり普及していることから、Raspberry Pi 開発者が再利用できるソフトウェア (特に、Linux コミュニティーがこれまで数年にわたって開発してきた多数のデバイス・ドライバーを含む、オープンソース・ソフトウェア) は大量にあります。一方、x86 ベースのソリューションには明らかな欠点もあります。それは、複雑であり、電力効率にまったく優れていないことです。

以上の汎用開発キットの他に、産業またはアプリケーション固有のソリューションに特化された開発キットもあります。そのような開発キットの例としては、以下が挙げられます。

  • Nvidia Jetson TX2 モジュール。監視カメラや自動運転車などのデバイス上で、GPU ベースの深層学習をサポートする内蔵型ボードです。
  • MATRIX Voice モジュール。マイクロフォン・アレイ (センサー)、特化された音声認識・処理チップ (FPGA)、ESP コントローラー (NodeMCU) を搭載した統合型ボードです。他のデバイスに組み込んで音声制御機能を使用可能にすることもできます。

特定の業種向けに特化されたソリューションは、他にも数多くあります。独自のプロジェクトを開始する前に、必ずこれらのソリューションを調査してください。

Anna Gerber が調査および検討した、よく使われている上位 5 つの IoT 開発キットを紹介しているこのリンク先の記事も、参考になるはずです。

教訓 2: MQTT について時間をかけて学び、そのメリットを利用すること

初心者であれば、使い慣れた HTTP を使用してネットワーク通信に対応したいと思うのはやまやまです。けれども、MQTT について学び、これを通信プロトコルとして使用すると、見返りがあります。IoT デバイスが生成する時系列のセンサー・データに使用するプロトコルとしては、HTTP よりも MQTT のほうが効率的であり、信頼できます。

MQTT は、サーバーとデバイス間の双方向通信メカニズムを提供するため、サーバーがデバイスにコマンドを送信できるようになります。さらに場合によっては、電力、帯域幅、またはその他のリソースをさらに効率的に管理するために、サーバーがデバイスを再構成することさえ可能になります。

しかも、MQTT を使用することで、デバイス間でピアツーピア通信を行うこともできます。デバイスをトピック別に分類することによって、デバイス同士またはデバイス・グループ間でデータやコマンドを交換できるようになるためです。この構造を使用すれば、アプリケーション開発者はデバイスの階層をセットアップして、複雑な制御スキームを適用することができます。

このリンク先の私の記事「MQTT の基本知識 - MQTT がモノのインターネットに最適なネットワーク・プロトコルの 1 つとなっている理由」で、MQTT の詳細を学び、MQTT 開発を開始してください。

教訓 3: コンテナー・フレームワークを使用すること

複雑な IoT アプリケーションでは、時には百万台にも上る現場の無人デバイスのすべてにわたって、ソフトウェア・アップデートを管理しなければならないことがありますが、この課題には、ソフトウェア・コンテナーを利用することで対処できます。ソフトウェア・コンテナーは、新しいモジュールをオンデマンドでダウンロードして自身を更新することができるためです。ソフトウェア・コンテナーの好例としては、OSGi コンテナーが挙げられます。

IBM Pervasive Computing ラボで考案された OSGi コンテナーは、当初、ユーザーの介入なしでリモートから管理して更新できるよう、家庭用通信端末の内部で動作するという想定でしたが、現在、OSGi は主にサーバー・サイドのアプリケーション内で使用されています。サーバー・サイドのアプリケーション内では、DevOps チームがデータ・センター全体にわたって、多数のサーバーを自動的かつリモートから管理して更新しなければなりません。OSGi は、重量級の Java EE アプリケーション・フレームワークの代替手段になりますが、OSGi を使用するとしても、Java 仮想マシンとその関連ライブラリーを実行しなければならないことに変わりはありません。したがって、OSGi が適している IoT アプリケーションは、本格的オペレーティング・システムを稼働している強力なデバイス上の比較的複雑な IoT アプリケーションということになります。

オープンソースの OSGi 実装としては、以下の実装がとりわけよく使用されています。

Raspberry Pi などの強力なデバイス上には、Docker をインストールして、Docker コンテナー内に Linux をインストールすることもできます。このようにすると、多数のデバイスに事前構成されたソフトウェアを自動的にインストールして管理できるようになります (Docker コンテナーを IoT 開発に使用する方法について詳しくは、このリンク先の developerWorks チュートリアルを参照してください)。Docker はオペレーティング・レベルで管理し、OSGi はアプリケーション・コンポーネント・レベルで管理するため、Docker と OSGi は互いを補完すると言えます。

教訓 4: IoT とブロックチェーン

最後に、IoT アプリケーションにとってセキュリティーと監査可能性は極めて重要です。IoT アプリケーションは大量の M2M データを生成しますが、人間はそのデータをリアルタイムでアクティブに監視してその正確さを確認することはしません。したがって、IoT アプリケーションに求められることは、マシン同士の「信頼」を確立して、問題が発生した時にはデータを監査できることです。

IoT デバイスからのデータは、一般に、長い一連のタイムスタンプ付きデータ・ポイント (センサーの測定値とロケーションなどといった) からなります。これらのデータ・ポイントは「事実」であり、それ故に不変です。データ整合性を保護し、改ざんを防ぐためには、システムがこれらのデータ・ポイントをブロックチェーンに保管するという方法があります。そのようなサービスを提供するのが、IBM Watson IoT Platform と IBM Blockchain です。IoT アプリケーション用のブロックチェーンを実装する方法については、このリンク先の developerWorks チュートリアル「IBM Blockchain 内のスマート・コントラクトにデバイスのデータを統合する」を参照してください。

ブロックチェーンはデータ・ポイントを保管するだけでなく、IoT ネットワーク内のトランザクションもサポートします。その単純な例は、サプライ・チェーン・ネットワーク内での RFID です。IoT デバイスは、物理的な商品があるベンダーから次のベンダーへと移動する間、それらの商品にタグ付けされた RFID を追跡し、信頼できるトランザクションを記録します。このようなトランザクションは、デバイスが生成するデータに限られません。デバイス自体の管理にも適用できる場合があります。例えば、各デバイスのロケーション、ステータス、構成に何らかの変更が生じた場合、その変更をブロックチェーンに記録することで、デバイスを追跡することが可能になります。

従来のブロックチェーンは、IoT デバイスで使用するには計算コストがかかりすぎる場合がありますが、最近では IoT の使用ケースに対処することを目的に、ブロックチェーン風のプロトコルが考案されるようになってきています。例えば IOTA プロジェクトでは、信頼と不変性を確立するためのネットワーク・データ構造を開発し、(チェーンとは対照的な名前として) tangle と名付けました。IoT 分野では、tangle がブロックチェーンの代役として十分活躍するかもしれません。どのような結果になるかは、時が教えてくれるでしょう。

まとめ

この記事では、IoT アプリケーションを開発する際の課題と、それらの課題に対処する方法をいくつか取り上げました。具体的に言うと、IoT アプリケーションの多様性と、デバイスに課された制約を考えると、複数の開発キット、SDK、そして MQTT のようなプロトコルを学ぶことが良い結果をもたらします。また、IoT アプリケーションのデプロイメントとセキュリティーの管理を強化するには、OSGi や Docker などのコンテナー・フレームワークとブロックチェーン・ネットワークを利用することができます。


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Internet of Things
ArticleID=1057600
ArticleTitle=初めての IoT 開発から学んだ教訓
publish-date=02082018