MQTTマスターガイド:初心者向け解説2025年版

目次
急速に進化するIoTの世界では、効率的なデバイス間通信が極めて重要です。そして、MQTTこそがその実現を支えるプロトコルです。本ガイドでは、軽量でパブリッシュ・サブスクライブ方式に基づくMQTTの基本、主要な概念、実際の活用方法について徹底的に解説します。専門家の見解や実践的な例を交え、MQTTをマスターし、あなたのIoTプロジェクトをさらに高みへと引き上げるための頼れるリソースとなるでしょう。
MQTTとは?
MQTT(Message Queuing Telemetry Transport)は、リソースが限られたデバイスや、低帯域幅・高遅延、または不安定なネットワーク環境向けに設計された、軽量なパブリッシュ・サブスクライブ型メッセージングプロトコルです。主にIoTアプリケーションで広く利用され、センサー、アクチュエーター、その他各種デバイス間の効率的な通信を実現します。
なぜMQTTがIoTに最適なプロトコルなのか?
MQTTは、IoTシステムの特定ニーズに合わせたユニークな機能と能力により、最適なIoTプロトコルの一つとして注目されています。主な理由は以下の通りです:
- 軽量設計: IoTデバイスは、処理能力、メモリ、エネルギー消費に制約があります。MQTTは最小限のオーバーヘッドと小さなパケットサイズを実現しており、限られたリソースでも効率的な通信が可能です。
- 信頼性: IoTネットワークは高い遅延や接続の不安定さに直面することがあります。MQTTは、複数のQoS(サービス品質)レベル、セッション管理、持続的な接続のサポートにより、厳しい環境下でも確実なメッセージ配信を実現します。
- 安全な通信: IoTネットワークでは、しばしば機微なデータが送受信されるためセキュリティが極めて重要です。MQTTはTLS/SSL暗号化をサポートし、データ送信中の機密性を確保します。また、認証や認可の仕組みにより、ユーザー名・パスワードやクライアント証明書を用いた安全なアクセス管理が可能です。
- 双方向通信: MQTTのパブリッシュ・サブスクライブモデルは、デバイス間での双方向通信をシームレスに実現します。クライアントは、特定のトピックに対してメッセージを発行(publish)するだけでなく、任意のトピックを購読(subscribe)してメッセージを受信できます。これにより、デバイス同士の直接的な結合を避け、統合や拡張が容易になります。
- 継続的なステートフルセッション: MQTTは、クライアントがブローカーとの間で状態を維持するセッションを可能にし、切断後も購読情報や未配信メッセージを保持します。さらに、接続時にキープアライブ間隔を設定することで、ブローカーが定期的に接続状況を確認し、切断時にはQoSレベルに応じた未配信メッセージを再送する仕組みを提供します。
- 大規模なIoTデバイスへの対応: 多数のデバイスが接続されるIoTシステムでは、膨大な接続数に耐えうるプロトコルが必要です。MQTTの軽量設計、低帯域幅消費、効率的なリソース利用により、大規模なIoTアプリケーションにも適しています。パブリッシュ・サブスクライブモデルが送信者と受信者の結合を緩和し、ネットワークトラフィックとリソース使用量を削減します。また、各種QoSレベルにより、アプリケーションの要求に合わせた最適なメッセージ配信が可能です。
- 豊富な言語サポート: IoTシステムでは、さまざまなプログラミング言語で開発されたデバイスやアプリケーションが混在します。MQTTは多言語対応しており、複数のプラットフォームや技術と容易に統合でき、シームレスな通信と相互運用性を実現します。詳しくは、当社のMQTTクライアントプログラミングに関するブログシリーズをご参照ください。
MQTTはどのように動作するのか?
MQTTはパブリッシュ・サブスクライブ方式で動作します。MQTTクライアントは、特定のトピックに対してメッセージを発行するか、あるいはそのトピックを購読してメッセージを受信します。これらの通信は、指定されたQoS(サービス品質)レベルに従って、MQTTブローカーによって管理・ルーティングされます。
MQTTクライアント
MQTTクライアントライブラリを利用して実装されたアプリケーションやデバイスは、いずれもMQTTクライアントと呼ばれます。たとえば、MQTTを利用したインスタントメッセージングアプリ、データを報告する各種センサー、さらにはMQTTテストツールなどもクライアントに該当します。
MQTTブローカー
MQTTブローカーは、クライアントの接続・切断、購読や購読解除のリクエストを処理し、メッセージのルーティングを行います。高性能なMQTTブローカーは、膨大な接続数や百万単位のメッセージスループットをサポートし、IoTサービスプロバイダーがビジネスに集中できるよう、信頼性の高いMQTTアプリケーションの構築を支援します。
パブリッシュ・サブスクライブパターン
パブリッシュ・サブスクライブパターンは、メッセージを送信するクライアント(パブリッシャー)と受信するクライアント(サブスクライバー)を分離する点で、従来のクライアントサーバーモデルとは異なります。パブリッシャーとサブスクライバーは直接接続する必要がなく、すべてのメッセージのルーティングと配信はMQTTブローカーが担います。
以下の図は、MQTTのパブリッシュ・サブスクライブプロセスを示しています。温度センサーがクライアントとしてMQTTサーバーに接続し、温度データをあるトピック(例:Temperature
)に発行すると、サーバーはそのメッセージを同トピックを購読しているクライアントに転送します。
MQTTトピック
MQTTでは、トピックをもとにメッセージがルーティングされます。トピックはスラッシュ「/」で階層が区切られ、URLパスに類似した表現が可能です。たとえば:
chat/room/1
sensor/10/temperature
sensor/+/temperature
MQTTトピックでは、以下のワイルドカードがサポートされています:
+
: 1階層分のワイルドカード。例:a/+
はa/x
やa/y
にマッチします。#
: 複数階層分のワイルドカード。例:a/#
はa/x
、a/b/c/d
などにマッチします。
詳しくは、MQTTトピックとワイルドカード:初心者向けガイドをご参照ください。
MQTTのサービス品質(QoS)
MQTTは、異なるネットワーク環境下でのメッセージ信頼性を保証するため、3種類のQoS(Quality of Service)を提供します。
- QoS 0: メッセージは「最大1回」配信されます。クライアントが利用できない場合、そのメッセージは破棄されます。
- QoS 1: メッセージは「少なくとも1回」配信されます。
- QoS 2: メッセージは「必ず1回だけ」配信されます。
詳しくは、MQTT QoS 0, 1, 2の解説:クイックスタートガイドをご覧ください。
MQTTのワークフロー
ここまででMQTTの基本要素を理解したところで、一般的なワークフローを見てみましょう:
- クライアントはTCP/IPを用いてブローカーに接続を開始します。 ※セキュアな通信のためにTLS/SSL暗号化をオプションで利用可能です。クライアントは認証情報を提供し、クリーンセッションか持続セッションかを指定します。
- クライアントは、特定のトピックに対してメッセージを発行するか、メッセージ受信のためにトピックを購読します。 発行するクライアントはブローカーへメッセージを送信し、購読するクライアントは関心のあるトピックに対してメッセージ受信のリクエストを行います。
- ブローカーは受信したメッセージを、該当するトピックを購読しているすべてのクライアントに転送します。 指定されたQoSレベルに基づいてメッセージの信頼性を確保し、接続が切れたクライアントにはセッションタイプに応じたメッセージ保存も行います。
MQTTをはじめよう:クイックチュートリアル
ここからは、いくつかのシンプルなデモを通じてMQTTの使い方を実践的に学んでいただきます。はじめに、MQTTブローカーとMQTTクライアントの準備が必要です。
MQTTブローカーのセットアップ
EMQXはスケーラブルかつ分散型のMQTTメッセージングプラットフォームで、無制限の接続をサポートし、シームレスな統合が可能。多様なユーザーの要件に応じた各種エディションが用意されています。
フルマネージドクラウドサービス
フルマネージドクラウドサービスは、MQTTサービスを最も簡単に始める方法です。EMQX Serverlessは、従量課金制かつ自動スケーリング機能を備えたマルチテナントMQTTサービスで、数分で開始でき、AWS、Google Cloud、Microsoft Azureの17リージョンで稼働しています。
無料パブリックMQTTブローカー
本ガイドでは、EMQが提供する無料パブリックMQTTブローカー(EMQXプラットフォーム上に構築)を利用します。サーバーのアクセス詳細は以下の通りです:
- ブローカーアドレス:
broker.emqx.io
- TCPポート:
1883
- WebSocketポート:
8083
MQTTクライアントの準備
本記事では、ブラウザからも利用可能なMQTTXによるMQTTクライアントツールを使用します。なお、MQTTXはデスクトップクライアントやコマンドラインツールも提供しています。
MQTTXは、macOS、Linux、Windows上で動作する洗練されたクロスプラットフォームのMQTT 5.0対応デスクトップクライアントで、チャット形式のユーザーインターフェイスにより、複数のMQTT/MQTTS接続を容易に作成し、メッセージの購読・発行ができます。
現在、あらゆるプログラミング言語向けの成熟したオープンソースMQTTクライアントライブラリが存在します。各言語の人気MQTTクライアントライブラリ&SDKやコード例も豊富にご用意しており、MQTTクライアントの利用方法をすぐに理解いただけます。
MQTT接続の作成
MQTTプロトコルで通信を行う前に、クライアントはブローカーとのMQTT接続を確立する必要があります。
ブラウザから Easy-to-Use Online MQTT Client | Try Now にアクセスし、画面中央の New Connection
ボタンをクリックすると、以下の画面が表示されます。
ここでは、Name
欄に「Simple Demo」と入力し、右上の Connect
ボタンをクリックしてMQTT接続を作成します。接続が正常に確立されると、以下のような表示になります。
接続パラメータの詳細については、MQTT接続パラメータの設定方法のブログ記事をご参照ください。
ワイルドカードトピックの購読
次に、先ほど作成したSimple Demo接続にて、ワイルドカードトピック sensor/+/temperature
を購読します。これにより、すべてのセンサーから送信される温度データが受信されます。
画面中央の New Subscription
ボタンをクリックし、ポップアップ内のTopic欄に sensor/+/temperature
と入力、デフォルトのQoS(0)のままで設定します。
購読が成功すると、購読リストに新たなエントリーが追加されます。
MQTTメッセージの発行
次に、左側のメニューの +
ボタンをクリックして、Sensor 1
と Sensor 2
の2つの接続を作成し、2台の温度センサーをシミュレーションします。
接続が作成されると、画面上部に3つの接続が表示され、各接続の左側にオンライン状態を示す緑色の点が表示されます。
まず、Sensor 1
接続を選択し、画面左下の発行トピック欄に sensor/1/temperature
と入力、メッセージボックスには以下のJSON形式のメッセージを入力して、右下の発行ボタンをクリックしメッセージを送信します。
{
"msg": "17.2"
}
送信が成功すると、以下の表示となります。
同様の手順で、Sensor 2
接続では、発行トピック sensor/2/temperature
に対して以下のJSONメッセージを発行します。
{
"msg": "18.2"
}
すると、Simple Demo接続には2台のセンサーからの新たなメッセージが表示されます。
Simple Demo接続を選択すると、2台のセンサーから送信されたメッセージが確認できます。
MQTT機能のデモンストレーション
Retained Message(保持メッセージ)
MQTTクライアントがサーバーにメッセージを発行する際、保持メッセージフラグを設定できます。保持メッセージはサーバー上に残り、後から同じトピックを購読したクライアントもそのメッセージを受信可能となります。
以下の例では、Sensor 1
接続で retained_message
トピックに対して、Retain
オプションをチェックした状態で2つのメッセージを送信します。
その後、Simple Demo接続で retained_message
トピックを購読すると、Sensor 1から送信された最新の保持メッセージが受信されます。これは、サーバーが各トピックにつき最新の保持メッセージのみを保存する仕組みを示しています。
詳細は、初心者向けMQTT保持メッセージガイドをご参照ください。
Clean Session(クリーンセッション)
通常、MQTTクライアントはオンライン中のみ他クライアントが発行したメッセージを受信できます。オフライン中に発行されたメッセージは、再接続後には受信されません。 しかし、クライアントがClean Sessionをfalseに設定して接続し、同一のClient IDで再度オンラインになれば、サーバーは一定期間分のオフラインメッセージを保持し、再接続時に配信します。
※本デモで使用しているパブリックMQTTサーバーは、オフラインメッセージを5分間保持し、最大1000件(QoS 0を除く)保存します。
次に、MQTT 3.1.1接続を作成し、Clean Sessionをfalse、QoS 1を用いてデモを実施します。
※MQTT 5では、Clean StartとSession Expiry Intervalによりクリーンセッションが改善されています。詳細は、Clean StartとSession Expiry Intervalのブログ記事をご参照ください。
- 「MQTT V3」という名前で接続を作成し、Clean Sessionをfalse、MQTTバージョンを3.1.1に設定します。
- 接続後、
clean_session_false
トピックをQoS 1で購読します。 - 購読成功後、右上の「Disconnect」ボタンをクリックして切断します。
- 次に、MQTT V3とは別に「MQTT_V3_Publish」という接続を作成(MQTTバージョン3.1.1)し、
clean_session_false
トピックに対して3つのメッセージを発行します。 - その後、先ほどのMQTT_V3接続を再度接続すると、オフライン中に保持されていた3件のメッセージが受信されます。
詳細は、MQTTパーシステントセッションとクリーンセッションの解説をご参照ください。
Last Will(ラストウィル)
MQTTクライアントは、CONNECTリクエスト時に「Will Message」(遺言メッセージ)の送信フラグ、トピック、ペイロードを設定できます。 クライアントが異常終了(DISCONNECTメッセージを送信せずに切断)した場合、サーバーは設定されたウィルメッセージを発行します。
以下の例では、「Last Will」という接続を作成し、以下の設定を行います:
- Keep Alive: 5秒(迅速に効果を確認するため)
- Last-Will Topic:
last_will
- Last-Will QoS:
1
- Last-Will Retain:
true
- Last-Will Payload:
offline
接続が確立した後、ネットワークを5秒以上切断(異常なクライアント切断をシミュレーション)し、その後ネットワークを再接続します。 次にSimple Demo接続で last_will
トピックを購読すると、「Last Will」接続で設定されたウィルメッセージが受信されます。
詳しくは、MQTTウィルメッセージの利用方法をご覧ください。
他プロトコルとの比較
MQTTに加え、HTTP、WebSocket、CoAPなどもIoT分野で広く利用されています。これらと比較すると、MQTTは低帯域幅消費と軽量なパブリッシュ・サブスクライブモデルといった特長があり、リソースが限られる環境や大規模なデバイスネットワークに対してより適しています。
詳しい比較は以下のブログ記事をご参照ください:
MQTTの高度な活用
MQTTセキュリティベストプラクティス
IoTでは、デバイスが脆弱な環境下で機微なデータを扱うため、MQTTのセキュリティは極めて重要です。不十分なセキュリティは、攻撃者によるメッセージの傍受、データ改竄、重要システムの妨害といったリスクをもたらします。MQTT通信を保護するため、以下のような対策が一般的に採用されています:
これらの対策を講じることで、MQTT通信の安全性が向上し、IoTシステムの完全性と機密性が守られます。
MQTTデータストレージ
MQTTを介して数百万台のデバイスが継続的に価値あるデータを生成しますが、MQTTブローカー自体はプロトコル仕様上、データの永続保存を扱いません。したがって、効果的にデータを管理・活用するためには、適切なデータベースソリューションとの連携が不可欠です。適切なデータベースを選定することで、IoTアプリケーションにおける効率的なデータ保存とスケーラビリティが実現されます。
詳しくは、MQTTデータストレージのためのデータベース選定ガイドをご覧ください。
2025年の注目MQTTトレンドトップ8
MQTT over QUIC
Googleが開発した新たなUDP上のトランスポートプロトコルであるQUICは、遅延の低減とデータ転送速度の向上により、インターネット接続に革命をもたらしています。MQTTにQUICを導入することで、接続が不安定な環境や低遅延が要求されるシーン(例:コネクテッドカー、産業用IoTなど)での利点が期待されます。EMQXや将来のMQTTバージョンは、MQTT over QUICを採用し、IoT接続基準に大きな変革をもたらそうとしています。
詳しくは、MQTT over QUIC: 次世代IoT標準プロトコルをご参照ください。
MQTT Serverless
サーバーレスMQTTブローカーは、数クリックでMQTTサービスを迅速に展開できる先進的なアーキテクチャの革新です。リソースのシームレスなスケーリングと従量課金制の料金体系により、サーバーレスMQTTは柔軟性に優れ、将来的にはあらゆるIoT開発者向けに無料で利用できる環境が整備されることが期待されます。
EMQX Serverlessを試す ※月間1Mセッション以内は永久無料です。
MQTTマルチテナンシー
マルチテナンシーアーキテクチャは、サーバーレスMQTTブローカーの重要な要素です。異なるユーザーやテナントのIoTデバイスが、同一の大規模MQTTクラスターに接続しながらも、各テナントのデータやビジネスロジックを互いに分離して保持できます。マルチテナンシー対応のMQTTブローカーは管理の手間を軽減し、複雑なシナリオや大規模なIoTアプリケーションにおける柔軟性を向上させます。
詳しくは、MQTTにおけるマルチテナンシーアーキテクチャ:ポイント、利点、課題をご覧ください。
MQTT Sparkplug 3.0
MQTT Sparkplugは、センサー、アクチュエーター、PLC、ゲートウェイなどの産業用デバイスをMQTTで接続するための定義です。異種の産業用デバイスとの接続と通信を簡素化し、効率的なデータ収集・処理・解析を実現することを目的としています。最新の3.0バージョンは、より高度な機能を備え、産業用IoTでの普及が期待されます。
詳しくは、MQTT Sparkplug:Industry 4.0におけるITとOTの橋渡しをご参照ください。
MQTT統一名前空間(Unified Namespace)
統一名前空間は、産業用IoTおよびIndustry 4.0向けに、MQTTブローカーを基盤としたソリューションアーキテクチャです。産業用デバイス、センサー、SCADA、MES、ERPなどのアプリケーションを星型トポロジで中央のMQTTブローカーに接続することで、OTとITシステム間のデータ交換を効率化し、最終的にIoT時代に統合します。
詳しくは、統一名前空間(UNS):IIoT向け次世代データファブリックをご覧ください。
MQTTジオディストリビューション
MQTTジオディストリビューションは、異なるリージョンまたはクラウド上に展開されたMQTTブローカー同士が単一のクラスターとして協働する革新的なアーキテクチャです。これにより、複数のクラウドにまたがるグローバルMQTTアクセネットワークを構築し、各デバイスやアプリケーションが最も近いネットワークエンドポイントからローカルに接続され、物理的な場所に関係なく通信を行うことが可能となります。
詳しくは、距離を越えて:EMQXにおけるジオディストリビューションでスケーラビリティを向上をご参照ください。
MQTTストリーム
MQTTストリームは、MQTTブローカー内で大量かつ高頻度のデータストリームをリアルタイムに管理するために設計された、MQTTプロトコルの拡張機能です。この機能により、履歴メッセージの再生が可能となり、データの一貫性、監査、コンプライアンスが確保されます。組み込みのストリーム処理機能は、リアルタイムデータ管理をシンプルにし、MQTTベースのIoTアプリケーションにおいて非常に有用なツールとなるでしょう。
MQTT for AI
IoTの急速な成長とAIの登場により、知的で接続されたシステムの新たな可能性が広がっています。MQTTは、デバイスという物理世界とAIというデジタルインテリジェンスとの架け橋として機能します。信号を確実かつ迅速に伝達することで、LLMやその他のモデルが環境を感知・推論・行動できるよう支援し、AIoT(AIとIoTの融合)の基盤となっています。MQTTの実績と継続的な改良により、今後もAIoT革新のバックボーンとして活躍し続けるでしょう。
詳しくは、MQTTプラットフォーム for AI:リアルタイムデータでAIを強化のホワイトペーパーをご参照ください。
MQTTについてさらに学ぶ
これまで、MQTTの基本概念とその利用プロセスについて解説してきました。ここまでの知識を基に、さっそくMQTTプロトコルを利用してみましょう。トピック、ワイルドカード、保持メッセージ、ラストウィルなどの詳細については、EMQが提供する「MQTTガイド2025:初級から上級へ」の記事シリーズをご覧ください。このシリーズでは、MQTTの応用例や、MQTTアプリケーション・サービス開発の手法についても詳しく解説しています。
関連リソース
- MQTTブローカー:仕組み、主な選択肢、クイックスタート
- 無料MQTTブローカー:選択肢と最適なソリューションの検討
- オープンソースMQTTブローカーの比較(2025年版)
- MQTTプラットフォーム:必須機能とユースケース
- MQTTクライアントツール101:初心者向けガイド
- MQTTをマスターする:究極のチュートリアル