# 初心者ガイド

MQTTは、低帯域環境でのM2M（マシンとマシンの間）テレメトリー向けに設計された軽量な**パブリッシュ/サブスクライブ**メッセージングプロトコルです。

これは、1999年にアンディ・スタンフォード＝クラーク（IBM）とアーレン・ニッパーによって、衛星を介した石油パイプラインのテレメトリーシステムを接続するために設計されました。

もともとは独占的なプロトコルとして始まりましたが、2010年にロイヤリティフリーで公開され、2014年にOASIS標準になりました。

**MQTT**は**MQ Telemetry Transport**の略ですが、以前はMessage Queuing Telemetry Transportとして知られていました。

**MQTT**は、**IOT**（インターネットオブシングス）の展開のための主要なプロトコルの一つに急速になりつつあります。

## MQTTのバージョン

MQTTには2つの異なるバリアントといくつかのバージョンがあります。

* MQTT v3.1.0 –
* MQTT v3.1.1 – 一般的に使用されている
* MQTT v5 – 現在は限定的な使用
* **MQTT-SN** – 後で注記を参照

1999年に設計され、多くの年月にわたって使用されてきたオリジナルの**MQTT**は、**TCP/IPネットワーク**向けに設計されています。

MQTTv3.1.1は一般的に使用されているバージョンです。

v3.10と3.1.1の間にはほとんど違いがありません。こちらは主な違いを詳述した[Githubページ](https://github.com/mqtt/mqtt.github.io/wiki/Differences-between-3.1.0-and-3.1.1)です

こちらは実際の仕様[MQTT V3.1](http://public.dhe.ibm.com/software/dw/webservices/ws-mqtt/MQTT_V3.1_Protocol_Specific.pdf)と、[MQTTプロトコルパケット構造のより詳細な概要](http://public.dhe.ibm.com/software/dw/webservices/ws-mqtt/MQTT_V3.1_Protocol_Specific.pdf)です。

最新のMQTTバージョン(v5)は、[現在承認されています](https://www.oasis-open.org/news/announcements/mqtt-v5-0-is-an-approved-oasis-committee-specification) (2018年1月)。仕様は[こちら](http://docs.oasis-open.org/mqtt/mqtt/v5.0/cs01/mqtt-v5.0-cs01.pdf)からダウンロードできます。

4に何が起こったのか疑問に思うなら、[こちら](http://www.eclipse.org/community/eclipse_newsletter/2016/september/article3.php)を見てください。

詳細については、[MQTT v 5.0 新機能概要](http://www.steves-internet-guide.com/mqttv5/)を参照してください。

こちらはMQTT v3.1.1とMQTT v5の主な違いを詳述した[Githubページ](https://github.com/mqtt/mqtt.github.io/wiki/Differences-between-3.1.1-and-5.0)です。

### MQTTバージョン5サポートノート：

**リリース1.6**時点で、mosquittoブローカーはMQTT v3.11に加えてMQTT v5もサポートしています。

最新のブローカーを使用しても、古いバージョン3.11のクライアントを引き続き使用できます。

Paho Pythonクライアントv1.5は現在v5をサポートしています。

### MQTT-SNノート

**MQTT-SN**は2013年頃に指定され、**UDP**、ZigBeeおよびその他のトランスポート上で動作するように設計されました。

**MQTT-SN**は現在、非常に人気があるわけではなく、仕様もここ数年変更されていませんが、IOTの展開が始まるにつれて変わることを期待しています。MQTT-SNに関する詳細は、MQTT-SN作業ノートを参照してください。

## MQTTクライアント

MQTTクライアントにはメールアドレスや電話番号などのアドレスがないため、ほとんどのメッセージングシステムのようにクライアントにアドレスを割り当てる必要はありません。

MQTTv3.1.1には、ほぼすべてのプログラミング言語および主要なオペレーティングシステムLinux、Windows、Mac用のクライアントソフトウェアが[Eclipse Pahoプロジェクト](https://eclipse.org/paho/downloads.php)から入手できます。

* [Paho Pythonクライアント](http://www.steves-internet-guide.com/into-mqtt-python-client/)。
* [Node.js MQTTクライアント-スタートガイド](http://www.steves-internet-guide.com/using-node-mqtt-client/)
* [JavaScript Websocketsクライアント](http://www.steves-internet-guide.com/using-javascript-mqtt-client-websockets/)
* [Arduinoを使用したC++クライアント](http://www.steves-internet-guide.com/using-arduino-pubsub-mqtt-client/)

Pahoクライアントv1.5.1は現在MQTTv5.0をサポートしています。こちらはクライアント比較チャートとダウンロードページへの[リンク](https://www.eclipse.org/paho/index.php?page=downloads.php)です。

## MQTTブローカーまたはサーバー

> **注**: 元々の用語はブローカーでしたが、現在はサーバーとして標準化されています。両方の用語が使用されているのを見ることがあります。

テスト用や実際のアプリケーション用に多くのMQTTブローカーが利用可能です。

無料の自己ホスティング型ブローカーがあり、最も人気のあるものは[Mosquitto](https://mosquitto.org/)、商用のものでは[FuboX](https://www.fubogroup.com/)があります。

> **Mosquitto**は、WindowsとLinuxで動作する無料のオープンソースMQTTブローカーです。

## WebSockets経由のMQTT

**Websockets**を使用すると、MQTTデータを直接Webブラウザに受信できます。

これは、WebブラウザがMQTTデータを表示するための事実上のインターフェースになる可能性があるため重要です。

Webブラウザ向けのMQTT websocketサポートは、**Javascript MQTTクライアント**によって提供されます。

参照 –[WebSockets経由でのMQTTの使用](app://obsidian.md/...)

## MQTTセキュリティ

MQTTは、さまざまな認証およびデータセキュリティメカニズムをサポートしています。

これらのセキュリティメカニズムはMQTTブローカー上で設定され、クライアントがそれらのメカニズムに準拠するかどうかはクライアント次第であることに注意することが重要です。

参照 [MQTTセキュリティメカニズムの紹介](app://obsidian.md/...)

## よくある質問

Webやメールに慣れている場合、MQTTは非常に異なるものであると感じるかもしれません。これらは私が持っていた質問であり、他のサイトやフォーラムで見たもので、少し明確にするかもしれません。

**Q, MQTTは通常どのポートを使用しますか？**

* A: 標準ポートは1883です。
* Q: ブローカーなしでMQTTを使用できますか？
* A: いいえ、MQTTの仕組みを参照してください

**Q: MQTTはどのプロトコルを使用しますか？**

* A: 標準バージョンはTCP/IPを使用します。

**Q: 複数のクライアントが同じトピックに対してパブリッシュできますか？**

* A: はい

**Q: メッセージをパブリッシュしたクライアントの身元を知ることは可能ですか？**

* A: クライアントがその情報をトピックまたはペイロードに含めない限り、いいえ

**Q: 誰もサブスクライブしていないトピックにパブリッシュされたメッセージはどうなりますか？**

* A: ブローカーによって破棄されます。

**Q: どのトピックがパブリッシュされたかをどのように知ることができますか？**

* A: ブローカーはパブリッシュされたトピックのリストを保持していないようなので、これを簡単に行うことはできません。トピックは永続的ではありません。

**Q: 誰もパブリッシュしていないトピックをサブスクライブできますか？**

* A: はい

**Q: メッセージはブローカーに保存されますか？**

* A: はい、しかし一時的にのみです。全てのサブスクライバーに送信された後、それらは破棄されます。しかし、次の質問も参照してください。

**Q: 保持メッセージとは何ですか？**

* A: メッセージをパブリッシュするとき、ブローカーに最後にパブリッシュされたメッセージを保存させることができます。このメッセージは、そのトピックをサブスクライブする新しいサブスクライバーが最初に見るメッセージになります。MQTTは1つのメッセージのみを保持します。[保持メッセージの理解](app://obsidian.md/index.html)を参照してください。

## MQTTとNode.js

このサイトの例のスクリプトの多くはnode.jsを使用しています。Node.jsは使いやすく、すぐに利用できるため、MQTTを学ぶのに適した選択肢です。[mqtt.js](https://www.npmjs.com/package/mqtt)の使用を参照してください。

## MQTTとNode-Red

プログラミングをしたくない場合、Node-Redはフローベースのツールで、MQTTプロジェクトを簡単に作成できます。他のサイトでのNode-Red入門ガイドを参照して始めてください。\ <br>

MQTT vs HTTP プロジェクトに最適な選択肢がMQTTかどうか疑問に思っているなら、ここにMQTTとHTTPを比較した記事のコレクションがあります。

* インターネットオブシングス：プロトコルの戦い（HTTP vs. Websockets vs. MQTT）
* MQTT vs. HTTP：IoTに最適なのはどちらか？
* HTTP vs MQTT パフォーマンステスト
* MQTTとHTTP：2つのIoTプロトコルの比較 - 誤りを含むが、チャートは有用
* ロボティクスのためのMQTT-SN vs Coap

実際のMQTT例の展開 特定の技術が実際にどのように使用されているかを見ることは、しばしば有用で興味深いものです。ここに私が出会ったいくつかの例があります：

* Freight Farms-MQTT
* MQTTを使用したIPピンガースウォーム
* MQTTの使用方法 - Mosquitto.org
* Owntracks - 位置追跡


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.fubogroup.com/gai-yao/gaido.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
