MQTT 5.0：7つの新機能と移行チェックリスト


![MQTT 5.0：7つの新機能と移行チェックリスト](https://assets.emqx.com/images/5739e24e7031708b9dae8a2329537e91.png?imageMogr2%2Fthumbnail%2F3040x1368)

[MQTT](https://www.emqx.com/ja/blog/the-easiest-guide-to-getting-started-with-mqtt)（Message Queuing Telemetry Transportの略）は、制約のあるデバイスや低帯域幅・高遅延のネットワーク向けに設計された軽量なメッセージングプロトコルです。小さなコードフットプリントが必要なリモート接続や、ネットワーク帯域幅が限られている場合に特に有用です。

MQTT 5.0はプロトコルの最新バージョンであり、従来のバージョンに比べて多くの改善が加えられています。新機能には、理由コード、セッション有効期限、トピックエイリアス、ユーザープロパティ、サブスクリプションオプション、リクエスト/レスポンス機能、そして[共有サブスクリプション](https://www.emqx.com/ja/blog/introduction-to-mqtt5-protocol-shared-subscription)が含まれます。これらの新機能を詳しく探り、主要なブローカーやクライアントSDKがMQTT 5.0をどのようにサポートしているか、そしてMQTT 3.1.1からMQTT 5.0への移行時の重要な考慮事項について説明します。

## MQTT 5.0の簡単な歴史と進化

MQTTは1990年代後半にIBMのDr. Andy Stanford-ClarkとArcom（現在のEurotech）のArlen Nipperによって、衛星ネットワークを介した石油パイプラインの監視のために最初に開発されました。初期のバージョンであるMQTT v3.1は、軽量で実装が容易になるよう設計され、多くのIoTデバイスに適していました。

2014年にリリースされたOASIS標準のMQTT 3.1.1では、プロトコルの明確性と相互運用性を向上させるための小さな変更が加えられました。リソースが限られたネットワーク上でメッセージを効率的に配信するそのシンプルさと効率性から、IoTアプリケーションで広く採用されました。

しかし、IoT業界が進化するにつれ、そのアプリケーションのニーズも変化しました。これにより、これらの変化するニーズに対応するために開発されたMQTT 5.0が2019年にリリースされました。強化された機能により、MQTT 5.0は現代のIoTアプリケーションの複雑な要件により適しています。

## MQTT v5の7つの新機能

### 1. 理由コード：切断や失敗の理解

従来のバージョンとは異なり、MQTT 5.0では各確認パケットに理由コードを提供でき、切断や失敗が発生した理由をより明確に理解できます。

この改善により、トラブルシューティングが容易になり、より正確なエラーハンドリングが可能になります。たとえば、クライアントがサーバーへの接続に失敗した場合、サーバーは接続が失敗した理由を説明する理由コードを返します。これは、不正なログイン資格情報からサーバーが利用できないなど、さまざまな問題が原因である可能性があります。

> 詳細は、[MQTT理由コード](https://www.emqx.com/ja/blog/mqtt5-new-features-reason-code-and-ack)に関する詳細なガイドをご覧ください。

### 2. セッション有効期限：セッションの寿命管理

この機能により、クライアントは切断後にサーバーがセッションをどのくらい維持すべきかを指定できます。以前のMQTTバージョンでは、セッションは切断時に即座に終了するか、無期限に続くかのいずれかでした。MQTT 5.0では、切断後にセッションを維持すべき特定の時間を定義できます。これにより、セッションの寿命管理がより柔軟になり、サーバー上のリソースを節約できます。

> 詳細は、[MQTTセッション有効期限](https://www.emqx.com/en/blog/mqtt5-new-feature-clean-start-and-session-expiry-interval)に関する詳細なガイドをご覧ください。

### 3. トピックエイリアス：メッセージヘッダーのオーバーヘッド削減

MQTT 5.0では、トピックエイリアスを導入してメッセージヘッダーのオーバーヘッドを削減しています。以前のバージョンでは、トピック名を各メッセージに含める必要があり、パケットサイズが大きくなっていました。

トピックエイリアスを使用すると、トピックに短い数値のエイリアスを割り当てることができます。このエイリアスは、後続のメッセージでフルトピック名の代わりに使用でき、MQTTヘッダーのサイズを大幅に削減し、ネットワーク帯域幅を節約します。

> 詳細は、[MQTTトピックエイリアス](https://www.emqx.com/en/blog/mqtt5-topic-alias)に関する詳細なガイドをご覧ください。

### 4. ユーザープロパティ：MQTTヘッダーでのカスタムメタデータ

この機能により、ユーザーはMQTTパケットのヘッダーにカスタムメタデータを含めることができます。これは、メッセージのタイムスタンプ、デバイスの場所、その他のアプリケーション固有のデータなど、MQTTメッセージに追加情報を送信する必要があるアプリケーションに特に有用です。ユーザープロパティは、MQTTメッセージングにおけるより大きな柔軟性と制御を提供します。

> 詳細は、[MQTTユーザープロパティ](https://www.emqx.com/ja/blog/mqtt5-user-properties)に関する詳細なガイドをご覧ください。

### 5. サブスクリプションオプション：詳細なサブスクリプション制御

MQTT 5.0では、クライアントが各サブスクライブしたトピックに対してメッセージをどのように受信したいかを指定できます。たとえば、クライアントは特定のサブスクリプションに対して保持されたメッセージを受信するかどうか、またはサブスクリプションと同じQoS（Quality of Service）レベルを持つメッセージを受信するかどうかを指定できます。

> 詳細は、[MQTTサブスクリプションオプション](https://www.emqx.com/ja/blog/an-introduction-to-subscription-options-in-mqtt)に関する詳細なガイドをご覧ください。

### 6. リクエスト/レスポンス：指定されたトピックへのクライアントからの応答を可能にする

リクエスト/レスポンス機能により、クライアントはサーバーが直接返信を送信できるトピックを指定できます。

以前のMQTTバージョンでは、クライアントがメッセージに応答したい場合、応答をトピックにパブリッシュし、元の送信者がそのトピックをサブスクライブして応答を受信する必要がありました。MQTT 5.0のリクエスト/レスポンス機能により、クライアントとサーバー間の通信がはるかに効率的で簡単になります。

> 詳細は、[MQTTリクエスト/レスポンス](https://www.emqx.com/en/blog/mqtt5-request-response)に関する詳細なガイドをご覧ください。

### 7. 共有サブスクリプション：サブスクライバーのためのロードバランシング機能

この機能により、複数のクライアントがサブスクリプションを共有できます。共有トピックにメッセージがパブリッシュされると、サーバーは共有サブスクリプション内のクライアントの一つにメッセージを配信し、メッセージを効果的にロードバランシングします。

この機能は、複数のサービスインスタンスが稼働しており、それらの間でワークロードを均等に分散させたいシナリオで特に有用です。

> 詳細は、[MQTT共有サブスクリプション](https://www.emqx.com/en/blog/introduction-to-mqtt5-protocol-shared-subscription)に関する詳細なガイドをご覧ください。

## MQTT 5.0におけるブローカーとクライアントSDKの現在のサポート状況

MQTT 5.0プロトコルはIoTコミュニティで好評を博しており、多くの[MQTTブローカー](https://www.emqx.com/ja/blog/the-ultimate-guide-to-mqtt-broker-comparison)とクライアントソフトウェア開発キット（SDK）がそのサポートを追加しています。主要なMQTTブローカーである[EMQX](https://github.com/emqx/emqx)、[Mosquitto](https://www.emqx.com/en/blog/mosquitto-mqtt-broker-pros-cons-tutorial-and-modern-alternatives)、[NanoMQ](https://nanomq.io/)などは、すでにプラットフォームにMQTT 5.0の機能を実装しており、ユーザーは新しいプロトコルの利点を活用できます。

クライアントSDKの面では、幅広いユーザーベースを持つPahoなどのライブラリがMQTT 5.0のサポートを追加しています。これにより、開発者はIoTアプリケーションでMQTT 5.0の機能を利用できます。他にMQTT 5.0をサポートするクライアントSDKの例としては、[MQTT.js](https://www.emqx.com/en/blog/mqtt-js-tutorial)や[MQTTnet](https://www.emqx.com/en/blog/connecting-to-serverless-mqtt-broker-with-mqttnet-in-csharp)があります。

## MQTT 3.1.1からMQTT 5.0への移行チェックリスト

現在MQTT 3.1.1を使用している場合、MQTT 5.0へのアップグレードを検討すべき時期かもしれません。移行を行う際に考慮すべき主なポイントは以下のとおりです。

### 1. MQTTブローカーの更新

現在のインフラストラクチャを評価し、移行を進めることを決定したら、次のステップはMQTTブローカーの更新です。これは、MQTT 5.0をサポートする最新バージョンのMQTTブローカーをインストールすることを含みます。

ブローカーのアップグレードはすべての[MQTTクライアント](https://www.emqx.com/ja/blog/mqtt-client-tools)に影響を与えるため、注意して行う必要があります。新しいブローカーを本番環境に展開する前に、まず非本番環境でテストすることをお勧めします。また、ブローカーの設定を必要に応じて更新し、MQTT 5.0で導入された新機能をサポートするようにしてください。

EMQX Cloudを無料で試す

IoT向けの完全管理型MQTTサービス

[今すぐ始める →](https://accounts.emqx.com/signup?continue=https://cloud-intl.emqx.com/console/deployments/0?oper=new)

### 2. クライアントライブラリの更新

MQTTブローカーを更新した後、次のステップは[MQTTクライアントライブラリ](https://www.emqx.com/ja/mqtt-client-sdk)の更新です。ブローカーの更新と同様に、まず非本番環境でこの更新を行うべきです。また、アプリケーションコードを更新して新しいMQTT 5.0の機能を処理するようにしてください。これにはコードのリファクタリングが必要な場合があります。

### 3. セキュリティへの対応

MQTT 5.0はいくつかの改善をもたらしますが、新たなセキュリティ上の考慮事項も導入します。たとえば、新しいユーザープロパティ機能により、クライアントはブローカーにカスタムデータを送信できるようになりました。これは強力な機能ですが、正しく使用しないと悪用される可能性があります。したがって、新しい機能をセキュリティの観点から評価することが重要です。

セキュリティに対処するために取ることができるステップの一部には、より強力なセキュリティのために新しい強化された認証機能を使用すること、クライアントが送信できるユーザープロパティを必要なもののみに制限すること、そして疑わしい活動を継続的に監視することが含まれます。

> 詳細は、[MQTTセキュリティ](https://www.emqx.com/ja/blog/essential-things-to-know-about-mqtt-security)に関する詳細なガイドをご覧ください。

### 4. 移行後の監視

最後に、MQTT 5.0に移行しその機能を実装した後は、システムを継続的に監視することが重要です。監視はメッセージ配信やクライアント接続などの技術的な側面に限定すべきではありません。アプリケーションでの新しいMQTT 5.0機能の使用状況も監視すべきです。これにより、これらの機能がアプリケーションをどのように強化しているか、さらなる改善が可能な箇所についての洞察を得ることができます。

## EMQXでMQTT 5.0を活用する

世界で最もスケーラブルな[オープンソースMQTTブローカー](https://www.emqx.com/en/blog/a-comprehensive-comparison-of-open-source-mqtt-brokers-in-2023)である[EMQX](https://github.com/emqx/emqx)は、MQTT 5.0のすべての機能を完全にサポートしています。任意のMQTTプロトコルバージョンを持つデバイスがEMQXに直接アクセスし、相互に通信できます。

EMQXは完全な認証と認可のメカニズムを持ち、SSL/TLSを完全にサポートしており、安全な通信を提供します。SQLベースのルールエンジンとデータブリッジングにより、コードを書くことなくワンストップでIoTデータの抽出、フィルタリング、変換、保存、処理を可能にします。

また、EMQXは高性能を提供し、EMQX 5.0の単一クラスタで最大1億のMQTT同時接続をサポートします。単一のEMQXサーバーで毎秒数百万のメッセージスループットに達することができます。

私たちはMQTTブローカーを中心に、プロトコルをより簡単に使用するための広範な機能を構築しました。例えば、クロスプラットフォームの[MQTTクライアントツール、MQTTX](https://mqttx.app/ja)、IoTエッジ向けの超軽量MQTTブローカーである[NanoMQ](https://nanomq.io/)、そして完全管理型の[MQTTクラウドサービス、EMQX Cloud](https://www.emqx.com/ja/cloud)などです。これらのツールはすべてMQTT 5.0を完全にサポートしています。

**[EMQX Enterprise](https://www.emqx.com/ja/products/emqx)**と**[EMQX Cloud](https://www.emqx.com/ja/cloud)**について詳しく学びましょう。