さくらのIoT

IoT開発はソフトウェア開発に留まらずに、必要なスキル・知識・経験は山ほどあります。具体的には、デバイス、センサー、ネットワーク、ビッグデータ、AI、クラウド、情報セキュリティ、コンプライアンスなどの知識を求められます。IoTエンジニアは多方面で活躍できる万能技術者を目指すために、学習コストが高く貴重な存在であることも特徴です。このようにIoT開発で取り組む領域は幅広く、網羅できる内容をこのページでは全て表現することができないため、センシングとデータ活用にフォーカスする内容をもとに全体の流れや基礎知識を解説します。

IoT開発の基礎

IoTはモノのインターネットを意味します。IoTの定義や範囲の広さとしては、モノはインターネットに接続されうるモノ全般と捉えることが出来る言葉です。IoTの全体像は、配置されたセンサーから計測データを無線ネットワーク経由でアップロードし、インターネット上のクラウドサーバで一元管理をする流れになります。また必要に応じて人工知能(AI)による分析を行うことや、収集したデータの分析結果に応じてデバイスを遠隔操作するフィードバック制御もできます。IoTの言葉が出始めた黎明期では、市場規模も非常に大きく将来の成長余地も大きいことから、第4次産業革命の一環として位置づけられていることも特徴でした。現在では徐々に普及されている時期であり、今後は様々なIoTが誕生するとともにIoT開発によるビジネスも豊富にでてくることから、需要は更に高まることが予想できます。

IoT開発とは

IoT開発とは、モノとクラウドサービスを組み合わせたシステムやサービスのを開発することです。広義としての意味は、モノに通信機能を搭載してインターネットに接続し、データを収集・分析・活用するためのシステムを開発することです。現実世界の物理的なモノに通信機能を搭載して、インターネットに接続・連携させる技術を利用するために、モノに搭載する通信機能付きデバイスである「エッジデバイス」、エッジデバイスから収集したデータを処理・分析するサーバシステムである「クラウド」、クラウドで処理・分析したデータを活用するソフトウェアである「アプリケーション」の3つの要素が重要です。開発の大まかな流れは、システムの目的や機能、必要なデータを定義する「要件定義」、システムの構成やアーキテクチャを設計する「設計」、エッジデバイス、クラウド、アプリケーションを開発する「開発」、システムをテストする「テスト」、システムを運用・保守する「運用・保守」になります。

IoT開発に必要なスキル・特徴

IoT開発を行う際は一般的なソフトウェア開発に必要とされる知識や技能に加えてIoTならではの知識や技術が必要とされる場合もあります。

電気電子

具体的には電子工作が身近な例で、回路図の理解が必要になります。その他では、オームの法則やキルヒホッフの法則の理論の他、抵抗やコンデンサと行った電子部品の知識、オシロスコープなどの計測デバイスを使いこなす技能も必要とされる場合もあります。

無線通信

有線通信の場合は、Ethernt(LANケーブル)等の有線で接続されるためインターネットに接続できますので、基本的なネットワーク知識が必要とされます。無線通信の場合は、電波や通信方式によって用いられる電波の性質が異なりますので、基本的な知識を学ぶ必要もあります。

情報セキュリティ

インターネットに接続されますので、一般的なセキュリティ対策が必要になります。IoTシステム独自のセキュリティ対策も数多く存在しますが、内容によって対策方法は様々な方法が挙げられるので一言では言い表すことは難しいです。構築したシステムに応じて情報セキュリティCIA(機密性、完全性、可用性)の考え方をもとに予防と対応の実施をすることが基本となります。

コンプライアンス

法令遵守の観点では通常のシステム開発にあまり関連しないような法律や規制や基準であっても、IoT開発には影響が大きいことがありますので、把握して置かなければならない内容も存在します。

IoTの分野別に習得すべきスキルの具体例

分野 キーワード
IoTデバイス シングルボードコンピュータ(Raspberry Pi、Arduio)、IoTゲートウェイ
センサー センサー(温湿度、超音波など)、インターフェイス(I^2C、SPI、UART)
電子回路 マイクロコントローラー(PIC、ARM)、ASIC、FPGA、協調設計
通信プロトコル MQTT、WebSocket、HTTP(S)、CoAP
無線通信 Wi-Fi、5G、LTE(LTE-M)、LPWA、LoRaWAN、NB-IoT、Sigfox、Bluetooth(BLE)
ビッグデータ 構造化データと非構造化データ、JSON、XML、NoSQL、分散キー、バリューストア、ドキュメント指向型データベース
情報セキュリティ サイバー攻撃への対策、暗号化技術、認証技術、IoTセキュリティガイドライン
人工知能(AI) 機械学習、ディープラーニング(深層学習)
プログラミング プログラミング言語(アセンブリ言語、C、Java、Python等)
クラウド・コンピューティング API、PaaS、AWS IoT Core、Google Cloud IoT Core、Microsoft Azure IoT
コンプライアンス PSE、電波法と「技適」、個人情報保護法
開発技法 UX、アジャイル、PoC、プロトタイピング、エッジコンピューティング、リアルタイム処理

IoT開発の入門

例えばIoT化された未来は、すべてが繋がり、すべてが見える化されるので、遠隔での状況確認や操作が可能となります。また、センサーと通信機器を搭載したIoT機器から集められるデータはサーバに蓄積されます。蓄積されたデータを分析し見える化することで、これまで人間が気づかなかったことにも気がつくようになり、新しいサービスや仕事が誕生して来ます。IoTはビジネスチャンスが豊富な分野であり、IoT開発を通じてサービスを誕生させるには、アイディアの段階である企画フェーズが重要になってきます。「どのような理念を掲げるか」といったようなビジネスの目的、思想、理念などの気持ちの部分で躓いてしまうと、すべてが台無しになってしまう事になりかねないので、目的から手段を考える「トップダウン的アプローチ」の企画で「IoTで実現したいこと」を考える事が重要になってきます。このような理念から生み出されたIoTサービスによって、様々なモノがインターネットに繋がり、私たちの生活も大きく変わる未来がやってくるでしょう。

IoT開発の流れと手順

IoTは変化が激しい分野であるため、試行錯誤を重ねることが重要です。変化に対応するべく、従来実施してきたPDCAサイクルよりもOODAループのような手法が有効です。異なる点はまずはやってみてから、次を考えるという流れです。企画段階での新しいアイディアを色々と試す形をとることで、様々な状況判断から取るべき行動を決定し、速やかに開始し試行錯誤を繰り返しやすくなります。ただし開発内容によって適性が分かれるため、主に以下の2つの手法に基づいた方法を選択することが多いです。

アジャイル開発

アジャイル開発は小さなサイクルで短い期間を繰り返し開発を行う手法です。メリットは開発スピードが速い、仕様変更に柔軟に対応できる、ユーザーニーズを取り込みやすい、チームワークを強化できる、品質を向上させやすいなどです。デメリットは、全体のスケジュールやコストの管理が難しい、方向性がブレやすい、コミュニケーション量が増える、技術力や経験が要求されるなどです。

アジャイル開発

試行錯誤を重ねながら進める点では相性もよく考え方としては似ているところです。具体的には短い期間を繰り返すところから激しい変化にも柔軟に対応できることや、アルファ版やベータ版リリース後のユーザフィードバックを取り入れながら「判断」「決定」のステップでより良い行動につながることです。また「行動」「観察」の段階では反復開発でより良い結果を導くことが出来る点も関連性が強いです。

OODAループ

ウォーターフォール開発

ウォーターフォール開発は上流工程から下流工程への順次開発を進めていく手法です。メリットは計画・予測がしやすい、品質管理がしやすい、進捗管理がしやすい、構造がシンプルでわかりやすいなどです。デメリットは、仕様や要件の変更に柔軟に対応がしずらい、開発期間が長期化しやすい、開発コストが高くなる可能性があるなどです。

ウォーターフォール開発

ウォーターフォール開発の開発工程と実装まではPDCAサイクルの「計画」「実行」に当てはまります。現状を正しく把握し目標を明確にして計画を実行可能なものにすると着実に進めることができます。実装後のテスト工程では「検証」をして開発工程と照らし合わせます。「改善」ではウォータフォール開発の開発工程を小さく頻繁に反復することでユーザフィードバックを確実に取り入れて効果的な改善が可能になります。

PDCAサイクル

概念設計、プロトタイプ作成、テスト、製品化

IoTに限らず製品化(量産化)までの大きな流れは、概念実装(PoC)からプロトタイピング作成テストマーケティングを繰り返すことです。PoC(Proof of Concept)は新しいアイディアの実現可能性を検証することです。ハードウェアの試作品を製造するには、資金、時間、労力といった相応のコストを要します。無駄にならないようにアイディアが的外れではないことを確認し、関係者感で合意に至ることが望ましいと言えます。プロトタイピングは、製品の量産化に入る前の試作品を製造することです。この段階では不完全ながらも実際に操作できる製品ができます。テストマーケティングは、試作品はベータユーザによる評価(フィードバック)を受けるのが望ましいと言えます。量産開始後では設計変更が困難になるため、プロトタイピングの段階で設計の改善を進めるのが現実的です。
製品化(量産化)ではベータユーザによる評価が満足の行くものとなった段階で、正式な製品として踏み切ります。一般的に、量産に移行する前に試作品の設計上の問題を解消することになるため、量産品の方が試作品よりも高品質になります。

IoT開発のテクニック

IoT開発のテクニックはソフトウェア開発の領域であるプログラミング言語とハードウェアと関連するファームウェア設計に用いる開発ツールに分類されます。IoT化は最終的なモノの機能をどのようにしたら実現できるのかを考えて最適な分担を模索するような流れになるため、ハードウェアとソフトウェアの知識と技術が必要とされます。

IoT開発の言語

IoTに限らず開発言語は、必要な機能を実現するために必要なコンピューティングリソースを用意しその上で動作するソフトウェアを構築するのに最適な言語、開発環境を選択することから始まります。IoTとクラウドですとモノから送られてくるデータをクラウドサーバーにアップロードする一連の処理の流れを実現するなどの目的で利用されます。

項目 説明
ソースコード
(source code)
  • プログラミング言語による処理を記述したテキストファイル
  • ソースファイルとも呼ばれる
  • ソースコードを記述することはコーディングと呼ばれる
ライブラリ
(library)
  • ソースコード内部から呼び出せる共通処理が実装されているファイル
  • テキストファイルまたはバイナリファイルのこと
  • ソフトウェア実行時にソフトウェアから呼び出される(動的リンクされる)ライブラリはDELL(Dynamic LinkLibrary)と呼ばれる
実行可能ファイル
(excutabel file)
  • ソースコードをビルドした結果として生成されるバイナリファイル
  • 実際に実行されるプログラム本体に相当する
分類 使用言語の例
アプリケーション
(モバイル端末)向け
Kotlin、Swift
アプリケーション
(パソコン)向け
C#、Java
クラウドサーバー向け Javascript,Ruby、PHP、Go
IoTデバイス向け C、C++、Python

ファームウェア設計とIoT開発のツール

マイクロコントローラを採用したIoTデバイスの場合、ファームウェアはハードウェアに組み込まれたソフトウェアのことで、ハードウェアを制御するための処理がプログラミングされたモノの機能を担うソフトウェアです。ファームウェアはハードウェアとソフトウェアの中間的な性質を帯びることが特徴で、ファームウェアはハードウェアのメモリ領域で稼働するため、ソフトウェアでありながらもハードウェアと一心同体のようにも見えます。ファームウェアはハードウェアのメモリ領域に書き込む(プログラム)することになり、一般的にはハードウェアに書き込むファームウェアのデータ形式として「Intel HEX」という汎用的な形式であるテキストファイルが存在します。

ファームウェアの更新

ファームウェアの書き込み作業は一度きりでは済まないことが多く、複数回必要な場合があり手順は以下の流れになります。

  • ファームウェアにバグがあるので、バグ修正版のファームウェアを書き込む必要がある
  • ファームウェアにセキュリティ上の脆弱性があるので「セキュリティ対策パッチ」を適用する必要がある
  • 何らかの原因でファームウェアが破損したので復旧を行う必要がある

ファームウェアを更新する手段として考えられるのはネットワーク経由の「クラウドサーバ」と物理的な書き込みで用いられるリムーバブルメディア、データ書き込み器などの「ライター」です。遠隔地の更新が多いIoTデバイスはネットワーク経由のクラウドサーバーを用いることで、ファームウェア更新ができるシステム構築をすることが望ましいです。

更新手段 更新経路と説明
クラウドサーバ 遠隔通信(無線ネットワーク)
ファームウェア更新状況(バージョン管理更新など)の一元管理ができる。デバイス管理全般(状態監視など)に応用も可能。
リムーバブルメディア 現地での有人作業
取り出し可能な媒体を意味する。SDカードやUSBメモリのこと。紛失や故障のリスクもあり、管理も煩雑になってしまう。
データ書き込み器
(ライター)
現地での有人作業
故障のリスクもあり、ライターの個数が少なければ並行作業に限度があることもボトルネックとなる。

開発ツールの具体例

開発ツール無しでファームウェア開発をすることは実現的ではありません。ファームウェアに限らずソフトウェア開発でも用いられている開発ツールの具体例をご紹介します。幅広い開発作業をカバーしているので、目的に応じて開発ツールを活用できるかがポイントになります。

分類 開発ツール
バージョン管理システム Git、Subversion
バグ管理システム Redmine、JIRA、Trac
テキストエディタ vi、Emacs
総合開発環境
(IDE)
Microsoft Visual Studio、Xcode、Eclipse、Android Studio
ソフトウェア開発キット
(SDK)
.NET Framework、Oracle JDK
テスト用ツール Apache JMeter、xUnit
ビルドツール Apache Ant、make
継続的インテグレーション
(CI)
Jenkins

IoT開発における技術要素と考慮点

IoTに限らず開発技術は主に4つの分野に別れます。1つ目はモノを開発するための「ハードウェア」や「ファームウェア」の知識が必要で、場合によってはモノからデータを収集する「センサー技術」も必要です。2つ目は「通信技術」でモノとインターネットを接続するための技術でありネットワークの知識が必要になります。3つ目は「データ収集・分析技術」でエッジデバイスやクラウドでデータを収集・分析するための技術であり、クラウドの知識やデータ分析で利用するAIの知識が必要になります。4つ目は「アプリケーション開発技術z」でクラウドやエッジデバイスで動作するアプリケーションを開発するための技術であり、開発するためのプログラム技術や知識が必要になります。

IoTプロトコルの概要

IoTに限らず通信プロトコルは「OSI参照モデル」「TCP/IPモデル」の階層構造によって分類されています。

階層 OSI参照モデル TCP/IPモデル 説明
L7 アプリケーション層 アプリケーション層 具体的なで通信サービスを担当する
L6 プレゼンテーション層 アプリケーション層 データの表現方法を変える
L5 セッション層 アプリケーション層 通信の開始から終了までの手順を規定する
L4 トランスポート層 トランスポート層 エラー訂正や再送制御などを担当する
L3 ネットワーク層 インターネット層 ネットワークにおける通信経路の選択(ルーティング)を担当する
L2 データリンク層 ネットワーク
インターフェース層
直接的に接続されている機器間の信号の受け渡し方法を規定する
L1 物理層 ネットワーク
インターフェース層
物理的な接続形態(例えばコネクタのピン数)を規定する

IoT用ネットワーク技術の選定と最適化手法

IoTデバイスはインターネット接続が用意されていない環境に設置され運用する場合があります。その場合、ネットワークインターフェース層としてLTEや5Gといったモバイルネットワークを利用することが多いです。屋外設置で省電力動作を要件とする場合、LPWAが採用されることもあります。LPWAの説明は次のページをご覧ください。

主要なIoTプロトコルの比較

アプリケーション層のプロトコルに着目すると、TCP/IPモデルにおけるアプリケーション層のIoTプロトコルの共通点は「トレードオフとして信頼性を犠牲にすることもあるが、軽量かつ高速に通信する」ことが要求されます。IoT開発ではサービス間の通信方法として多様性があるため、様々な特徴のある通信プロトコルの選定も必要になります。

名称 説明
MQTT
(Message Queue Telemetry Transport)
  • メッセージのサイズが小さく、ネットワーク帯域の使用量を抑えることができる
  • シンプルでデバイスへの実装が容易
HTTP(S)
(HyperText Transfer Protocol Secure)
  • Webページを表示するときなどで利用される最も一般的なプロトコルでリクエストとレスポンスのやり取りによって通信する
  • HTTPSは暗号化通信を追加したもので第三者による情報の盗聴や改ざんを防止するために利用する
CoAP
(Constrained Apprication Protcol)
  • UDPをベースにしており再送制御をしない分だけ、HTTP(S)よりも動作が軽量になる
  • MQTT同様に、パケットのヘッダサイズが小さい

IoTプラットフォームの選択基準と紹介

PaaSは「OS環境」までをクラウド化しますので、開発環境構築に手間がかかりません

IoTプラットフォームは主にIaaS、PaaS、SaaSと分類できます。クラウドの中のプラットフォームに位置するのが、PaaS(Platform as a Service)で、IoTサービスの実現に便利な機能を集めた(統合した)クラウドです。例えばIoTデバイスとの通信を仲介したり、データを蓄えたり、可視化するという機能をミドルウェアとして提供します。また、何らかの意図があってエンドユーザーに価値を提供するのがSaaSであるため、IoTサービスの司令塔はSaaSです。代表的な機能はビッグデータの蓄積、人工知能(AI)による統計処理、プログラムの実行、デバイス管理などです。SaaSが価値提供を実現するために利用するのが道具箱たるPaaS(IoTプラットフォーム)になります。PaaSの優位点は「開発者が環境構築の手間を掛けずに、アプリケーション開発に専念できる」ことです。IoTプラットフォームに関する内容は次のページをご覧ください。

IoTデバイス開発のポイントとクラウドの連携方法

IoTに限らずクラウドとの通信処理は上りと下りに大別されます。ここではIoTデバイスで何らかのデータをクラウドサーバにアップロードする「上り」、クラウドサーバが何らかのデータをIoTデバイスにダウンロードする「下り」としています。下りの処理として「デバイスコントロール」があり、クラウド連携の大きな利点は、膨大な数のIoTデバイスを実現できることにあります。

IoTクラウドサービスの活用方法とデバイスの連携の注意点

クラウドサービスを活用したデバイス連携と管理においては「データのアップロード」「デバイスの状態監視」「位置情報の取得」「障害の通知」の上りの処理が起点です。上りの処理に加えて下記の表のような下りの処理を実現することで、IoTシステムの障害解消が現実的なレベルに達します。

下りの処理 説明
ファームウェア更新 バグ改修やセキュリティ脆弱性の解消のため、ファームウェアの遠隔更新を実施
リモート制御
  • コマンド実行
  • IoTデバイスの設定変更
  • 電源のON/OFF
デバイスコントロール IoTデバイスは上りでクラウド連携を許可する前に認証を厳密に行い、下りでコントロールをする流れになります。

IoTデータの取扱いとAIを利用した分析方法と大量データ活用の知識

例えばAIサービスとの連携でIoTデータの取扱いは、データ前処理とフィードバック制御に別れます。データ前処理では「データクレンジング」「異常値(外れ値)の排除」が挙げられます。収集したデータはビッグデータと呼ばれ、不揃いな集合であるためデータの洗浄(データクレンジング)を実施します。また極端な外れ値に引きづられてしまわないように平均値の算出結果から外れ値を排除することも必要です。

フィードバックでは入力(Input)の変化に応じて出力(Output)を最適化する制御を指します。入力の代表例は各種センサーで、出力では様々なものが存在し人間の機能に位置するようなニーズに応えるようなものになります。入出力の仲介役が人工知能(AI)になり制御する役目になります。AIがビッグデータの統計解析の結果にもとづいて、IoTデバイスの挙動を制御します。AIは機械学習や深層学習によって賢くなるので、ビックデータの蓄積に伴ってフィードバックの制御が向上していく特長があります。

IoTセキュリティの重要性

最後はセキュリティについても気をつけなければいけません。IoTに限らずシステムには悪意のある攻撃者が忍び込もうとする侵入口が多く存在し、特に要注意なのは「構成要素間の連結部(インターフェース)」です。IoTではシステムの動作原理上、外部接続口を開けておく必要があるため、サイバー攻撃に対しての脆弱性が多く存在します。

IoT開発でのセキュリティ対策

IoTセキュリティは守備範囲が広いため完璧を目指すことは非常に困難であるため、まずは合格最低ラインを目指すところから始まります。従って次に説明する団体が定めたガイドラインに沿って取り組み始めると良いです。多数のIoT関連企業で構成される「IoT推進コンソーシアム」という業界団体が存在します。団体の組織でIoTセキュリティワーキンググループが存在し、成果物として「IoTセキュリティガイドライン」を策定しました。IoTセキュリティの導入ポイントは、以下の表にまとめてあるような、IoTセキュリティガイドラインを参考にすることで、体系的に評価と対策を進めることができるでしょう。

フェーズ 指針 要点
方針 IoTのリスクを認識する
  • 経営者がIoTセキュリティに
    コミットする
  • 内部不正やミスに備える
分析 IoTのリスクを認識する
  • 守るべきものを特定する
  • つながることによるリスクを想定するように伝える
  • IoTシステム・サービスにおける関係者の役割を認識する
  • 脆弱なデバイスを把握し、適切に注意喚起を行う
設計 守る設計を考える
  • つながる相手に迷惑をかけない設計にする
  • 不特定の相手と繋げられても安全安心を確保できる設計を考える
  • 安全安心を実現する設計の評価・検証を行う
構築・接続 ネットワーク上での対策を考える
  • 機能及び用途に応じて適切にネットワーク接続をする
  • 初期設定に留意する
  • 認証機能を導入する
運用・保守 安全安心な状態を維持し、情報発信・共有を行う
  • 出荷・リリース後も安全安心な状態を維持する
  • 出荷・リリース後もIoTリスクを把握し、関係者に守ってもらいたい

まとめ

最後にIoT開発についてまとめます。

  • IoT開発とはモノに通信機能を搭載してインターネットに接続詞、データを収集・分析・活用するためのシステムを開発することで、電気電子、無線通信、情報セキュリティ、コンプライアンスなどの幅広い知識が必要になる。
  • IoT開発の流れはアジャイル開発とOODAループのような考え方で企画段階での新しいアイディアを色々と試す形で取り組むことが有効だが、開発内容に応じてウォータフォール開発とPDCAサイクルを活用した手法も有効であるため、使い分けが重要。
  • IoT開発技術は、ソフトウェア開発のプログラミング言語とファームウェア設計で利用する開発ツールを活用できることが重要。
  • IoT開発の技術要素はハードウェア、ファームウェアの知識、通信技術、データ収集・分析技術、アプリケーション開発技術に分類される。

成長余地も大きく市場規模も大きいIoTの分野は、IoT開発によって様々なアイディアをきっかけにビジネスチャンスが広がるでしょう。
さくらインターネットでは、IoTデバイスを実現させるための道具として「さくらのモノプラットフォーム」を提供しています。試作段階のスモールスタートに適しており、開発と運用の負荷軽減を実現するIoTプラットフォームサービスです。

参考
  • 図解即戦力 IoT開発がこれ1冊でしっかりわかる教科書 IoT検定パワーユーザー対応版(技術評論社)
  • 図解即戦力IoTのしくみと技術がこれ1冊でしっかりわかる教科書IoT検定パワーユーザー対応版(技術評論社)
  • 図解即戦力 AIの仕組みがしっかりわかる教科書(技術評論社)
  • 60分でわかる! IoTビジネス最前線[改訂2版] (60分でわかる! IT知識)(技術評論社)
2023年11月公開