MQTT えむきゅーてぃーてぃー
簡単に言うとこんな感じ!
IoTセンサーみたいな「小さくて電池で動く機器」がインターネットにメッセージを送るための、超軽量な通信ルールだよ。「掲示板に投稿したら、登録してる人全員に届く」仕組みで、工場の機械や家電の状態をリアルタイムに共有できるんだ!
MQTTとは
MQTT(Message Queuing Telemetry Transport) は、IoT(モノのインターネット)デバイス向けに設計された、非常に軽量なメッセージングプロトコル(通信のルール)です。TCP/IPネットワーク上で動作し、通信に必要なデータ量(オーバーヘッド)を極限まで削ったことが最大の特徴です。
もともとは1999年にIBMとArcomが石油パイプラインの遠隔監視用に開発しました。衛星回線のような低速・不安定な回線でも確実にセンサーデータを届けるため、プロトコルの”頭でっかち”な部分(ヘッダ情報など)を徹底的に削ぎ落としています。その結果、最小パケットサイズはわずか 2バイト という驚異の軽さを実現しています。
現在では工場の生産ライン監視、スマートホームの家電制御、自動車のコネクテッドサービスなど、電池駆動・低スペック・不安定な回線 という三重苦の環境でデータ通信が必要なあらゆる場面で採用されています。2019年にはISO/IEC国際標準として正式に認定されました。
パブリッシュ/サブスクライブ:MQTTの仕組み
MQTTの核心は パブリッシュ/サブスクライブ(Pub/Sub)モデル です。送信者と受信者が直接つながらず、間に ブローカー と呼ばれる中継サーバーを置く点がHTTPなどの一般的な通信と大きく異なります。
| 登場人物 | 役割 | 具体例 |
|---|---|---|
| パブリッシャー | メッセージを「投稿」する側 | 温度センサー、スマート電球 |
| ブローカー | メッセージを仕分け・配送する中継役 | MosquittoサーバーやAWS IoT Core |
| サブスクライバー | メッセージを「購読」する側 | 監視ダッシュボード、スマホアプリ |
| トピック | 仕分けに使うラベル(チャンネル名) | factory/line1/temperature |
覚え方:「LINEのグループ通知」
「特定のグループ(トピック)に投稿したら、そのグループに入っているメンバー全員に届く」――LINEのグループ通知とほぼ同じイメージです。センサー(パブリッシャー)がブローカーに温度データを投稿すると、そのトピックを登録した監視システム(サブスクライバー)がまとめて受け取ります。センサー側はどこに届くかを気にしなくていいので、多対多の通信をシンプルに実現できます。
QoSレベル:届け方の確実さを3段階で指定
MQTTでは、メッセージの配送品質を QoS(Quality of Service) として3段階から選べます。
| QoSレベル | 名称 | 届け方 | 用途 |
|---|---|---|---|
| 0 | At most once | 最大1回。届かなくても再送しない | センサーの連続データ(少々欠けても問題ない) |
| 1 | At least once | 必ず1回以上届ける(重複あり) | アラート通知など |
| 2 | Exactly once | 確実に1回だけ届ける | 課金・制御コマンドなど重要操作 |
歴史と背景
- 1999年 — IBMのAndy Stanford-ClarkとArcomのArlen Nipperが石油パイプライン監視のために開発。衛星回線(低速・高コスト)での動作が要件だった
- 2010年 — IBMがプロトコル仕様を無償公開。オープンソース化が始まる
- 2013年 — OASIS(標準化団体)がMQTT 3.1.1として標準化
- 2016年 — スマートホーム・産業IoTの普及とともに急速に採用が広がる
- 2019年 — MQTT 5.0 をOASISが発行。エラーレポートやセッション管理が強化される。同年ISO/IEC 20922として国際標準化
- 2020年代 — AWS IoT Core・Azure IoT Hub・Google Cloud IoT Coreがいずれも標準サポート。クラウドIoT基盤の共通言語に
HTTPとの比較:なぜIoTにHTTPではダメなのか
Webで使われる HTTP とMQTTを比較すると、IoTにMQTTが選ばれる理由がよくわかります。
| 比較項目 | HTTP | MQTT |
|---|---|---|
| 通信モデル | リクエスト/レスポンス(1対1) | パブリッシュ/サブスクライブ(多対多) |
| ヘッダサイズ | 数百〜数千バイト | 最小2バイト |
| 接続の維持 | 原則リクエストごとに接続 | 常時接続(Keep-Alive) |
| 電池消費 | 多い | 少ない |
| リアルタイム配信 | 苦手(ポーリングが必要) | 得意(プッシュ配信) |
| 向いている用途 | Webページ取得・REST API | センサーデータ収集・機器制御 |
関連する規格・RFC
| 規格・RFC番号 | 内容 |
|---|---|
| OASIS MQTT 3.1.1 | 2013年策定の主要バージョン。多くの既存デバイスが対応 |
| OASIS MQTT 5.0 | 2019年策定。エラーコード・共有サブスクリプション・メッセージ有効期限を追加 |
| ISO/IEC 20922:2016 | MQTT 3.1.1の国際標準化 |
| RFC 8323 | CoAP over TCP(MQTTと競合するIoT向けプロトコルCoAPの参考) |
| TLS 1.2 / 1.3 | MQTTの通信暗号化に使われるトランスポート層セキュリティ |
関連用語
- IoT(Internet of Things) — センサーや機器をインターネットに接続する概念全般
- TCP/IP — MQTTが動作するベースとなるネットワークプロトコル群
- TLS(Transport Layer Security) — MQTTの通信を暗号化するセキュリティプロトコル
- WebSocket — Webブラウザ向けの双方向リアルタイム通信プロトコル。MQTT over WebSocketで組み合わせて使われることも
- CoAP(Constrained Application Protocol) — IoT向けの別の軽量プロトコル。MQTTと用途が近い
- AWS IoT Core — AWSが提供するMQTTブローカーを含むIoT管理サービス