要約
バッテリーが制限されている、ネットワークが不安定な、またはパブリッシュ/サブスクライブ(pub-sub)メッセージングパターンを使用するIoTデバイスにはMQTTを使用してください。標準的なウェブ/モバイルAPIにはHTTPを使用してください。MQTTは2バイトのヘッダーを使用するのに対し、HTTPは100バイト以上を使用するため、制約のあるデバイスに最適です。Modern PetstoreAPIは、ペット追跡用首輪やスマート給餌器にMQTTを実装しています。
はじめに
あなたのペット追跡用首輪は、5分ごとに位置情報を送信する必要があります。この首輪は、6ヶ月持続するはずのコイン型電池で動作します。HTTPを使用すると、バッテリーは2週間で切れてしまいますが、MQTTを使用すると、丸6ヶ月持ちます。
HTTPはAPIの標準ですが、IoTデバイスではなくウェブブラウザ向けに設計されています。MQTT (Message Queuing Telemetry Transport) は、帯域幅が制限され、ネットワークが不安定な制約のあるデバイス向けに作られました。
Modern PetstoreAPIは、ウェブおよびモバイルアプリにはHTTPを使用し、ペット追跡用首輪、スマート給餌器、ヘルスモニターなどのIoTデバイスにはMQTTを使用しています。
このガイドでは、MQTTがHTTPに勝る状況、Modern PetstoreAPIの実例、そしてあなたのユースケースに合った適切なプロトコルの選び方について学びます。
MQTTとは?
MQTTは、IoT向けに設計された軽量なpub-subメッセージングプロトコルです。
MQTTの仕組み
デバイスはトピックにメッセージを公開します。他のデバイスはトピックを購読します:
Publisher (Pet Collar):
Topic: pets/019b4132/location
Payload: {"lat":37.7749,"lng":-122.4194,"battery":85}
Subscriber (Mobile App):
Subscribe to: pets/019b4132/location
Receives: {"lat":37.7749,"lng":-122.4194,"battery":85}
MQTTブローカーが中央に位置し、発行者から購読者へメッセージをルーティングします。
MQTTの主要機能
1. 軽量ヘッダー - MQTT: 2バイト、HTTP: 100-500バイト
2. 持続的な接続 - MQTTは接続を維持します
3. サービス品質 (QoS) - 配信保証のためのQoS 0/1/2
4. 遺言 (Last Will) - デバイスが予期せず切断された場合に送信されるメッセージ
5. 保持メッセージ (Retained messages) - ブローカーは新しい購読者のために最後のメッセージを保存します
MQTT vs HTTPの比較
| 機能 | MQTT | HTTP |
|---|---|---|
| ヘッダーサイズ | 2バイト | 100-500バイト |
| パターン | Pub-Sub (発行/購読) | Request-Response (要求/応答) |
| 接続 | 持続的 | リクエストごと |
| 帯域幅 | 非常に低い | 高い |
| バッテリーへの影響 | 最小限 | 大きい |
| ブラウザサポート | WebSocket経由 | ネイティブ |
帯域幅の例
1日あたり1000件の位置情報更新:
- HTTP: 毎日420 KB、毎月12.6 MB
- MQTT: 毎日52 KB、毎月1.56 MB
MQTTは8倍少ない帯域幅を使用します。
MQTTが有利な場合
1. バッテリーが制限されたIoTデバイス
ペット追跡用首輪:
- MQTT: バッテリー寿命6ヶ月
- HTTP: バッテリー寿命2週間
理由:持続的な接続、軽量ヘッダー、無線通信時間の短縮。
2. 不安定なネットワーク
カバレッジが不安定なセルラーIoTデバイス:
- 配信保証のためのQoS
- 自動再接続
- セッションの持続性
3. 多対多の通信
スマートペット給餌器のシナリオ:
Feeder 1 → pets/019b4132/feeding
Feeder 2 → pets/019b4127/feeding
App 1 → subscribes to pets/+/feeding (all pets)
App 2 → subscribes to pets/019b4132/feeding (one pet)
4. リアルタイムセンサーデータ
毎秒更新を送信するペット用ヘルスモニター:
- 持続的な接続(オーバーヘッドなし)
- 最小限の遅延
- 高頻度更新に効率的
HTTPが有利な場合
1. 標準的なウェブ/モバイルアプリ
HTTPは普遍的です:
- すべての言語にHTTPライブラリがあります
- ブラウザがネイティブでサポートしています
- プロキシやファイアウォールで許可されています
2. 要求/応答パターン
ペットの詳細の取得:
GET /pets/019b4132
200 OK
{"name":"Fluffy","species":"CAT"}
HTTPは要求/応答においてよりシンプルです。
3. キャッシュ要件
HTTPキャッシングはすぐに使えます:
- ブラウザキャッシュ
- CDNキャッシュ
- プロキシキャッシュ
MQTTにはキャッシングがありません。
4. RESTful API
HTTPステータスコード、メソッド、およびセマンティクス:
- 200 OK, 404 Not Found, 201 Created
- GET, POST, PUT, DELETE
- 標準的なエラー処理
Modern PetstoreAPIでのMQTTの使用方法
Modern PetstoreAPI はIoTデバイス向けにMQTTを実装しています。
ペット追跡用首輪
首輪が位置情報を公開:
Topic: pets/019b4132/location
QoS: 1 (at least once)
Payload: {
"lat": 37.7749,
"lng": -122.4194,
"battery": 85,
"timestamp": "2026-03-13T10:30:00Z"
}
モバイルアプリが購読:
const mqtt = require('mqtt');
const client = mqtt.connect('mqtts://mqtt.petstoreapi.com');
client.subscribe('pets/019b4132/location');
client.on('message', (topic, message) => {
const location = JSON.parse(message);
updateMap(location.lat, location.lng);
});
スマート給餌器
給餌器がスケジュールを購読:
Topic: pets/019b4132/feeding-schedule
Retained: true
Payload: {
"times": ["08:00", "18:00"],
"amount": 100
}
給餌器が給餌イベントを公開:
Topic: pets/019b4132/feeding-events
Payload: {
"timestamp": "2026-03-13T08:00:15Z",
"amount": 100,
"dispensed": true
}
ヘルスモニター
モニターがバイタルデータを公開:
Topic: pets/019b4132/health
QoS: 0 (fire and forget, high frequency)
Payload: {
"heartRate": 120,
"temperature": 38.5,
"activity": "resting"
}
ApidogでのMQTTテスト
Apidog は、HTTPおよび他のプロトコルと並行してMQTTテストをサポートしています。
MQTT Pub-Subのテスト
- MQTTブローカーに接続
- トピックを購読
- テストメッセージを公開
- メッセージ形式を検証
- QoSレベルをテスト
ネットワーク障害のシミュレーション
- 再接続ロジックをテスト
- QoS 1/2配信を検証
- 遺言メッセージを確認
- セッションの持続性を検証
HTTPとの比較
両方のプロトコルで同じ機能をテストします:
- 帯域幅の使用量を測定
- 遅延を比較
- データの一貫性を検証
結論
MQTTとHTTPは異なる目的を果たします。リソースが限られたIoTデバイスにはMQTTを、標準的なウェブ/モバイルAPIにはHTTPを使用してください。
Modern PetstoreAPI は、ユーザー向けAPIにはHTTP、IoTデバイスにはMQTTという両方の使用方法を示しています。どちらが「優れている」かではなく、適切なプロトコルはあなたの制約に依存します。
あなたのユースケースに最適なものを見つけるために、Apidog で両方のプロトコルをテストしてください。
よくある質問
MQTTはHTTP上で動作できますか?
MQTTはWebSocket上で動作でき、WebSocketはHTTP上で動作します。これはファイアウォールの通過に役立ちますが、MQTTの効率性の一部は失われます。
MQTT QoSレベルとは何ですか?
- QoS 0: 最大1回(確認応答なし)
- QoS 1: 少なくとも1回(確認応答あり、重複の可能性あり)
- QoS 2: 厳密に1回(保証あり、重複なし)
MQTTは安全ですか?
はい、MQTTはTLS暗号化(MQTTS)とユーザー名/パスワード認証をサポートしています。Modern PetstoreAPIは、すべてのIoTデバイスにMQTTSを使用しています。
ブラウザはMQTTを使用できますか?
ブラウザはWebSocket経由でMQTTを使用できます。MQTT.jsのようなライブラリはブラウザ環境をサポートしています。
MQTTとWebSocketの比較
MQTTはWebSocket上で動作できるプロトコルです。WebSocketはトランスポート層です。MQTTはWebSocketの上にpub-sub、QoS、およびIoT特有の機能を追加します。
