LoginSignup
3
0

More than 3 years have passed since last update.

MQTTクライアントをコマンドラインで簡単に実行する(npx と MQTT.js)

Last updated at Posted at 2020-09-23

はじめに

こちらのツイートをきっかけに、ふと思いついて試した内容のメモです。

【追記】 @n0bisuke さんも記事を書かれていたので、リンクを掲載します。
 ●グローバルインストールせずにMQTTをCLIで試す - Qiita
  https://qiita.com/n0bisuke/items/13d1442f3cb67664ef60

@n0bisuke さんの記事では、自分の記事では触れていない PubNub の場合の事例も書かれてますので、是非ご覧ください。

MQTTクライアントをコマンドラインで簡単に動かす

IoT系のプロトタイプを作るときに、最近はよく MQTT を使っていました。
そして、以下のような様々な環境で MQTT のクライアントを動かしていました。

  • Node.js
  • HTML+JavaScript で作られた Webサイト
  • Node-RED
  • UIFlow (M5Stack向けのビジュアルプログラミング環境)
  • Mac や Windows の上で動く GUIフロントエンドとなるアプリ
  • ターミナル上などコマンドを使った形

上記の Node.js や Webサイト(HTML+JavaScript)で実装するときは、パッケージ・ライブラリに MQTT.js をよく使っていました。また、Mac のターミナル上のコマンドラインツールで動作させる時も MQTT.js を使いました。

mqttjs_Command_Line_Tools.jpg

この記事の冒頭のツイートを見た時に、この MQTT.js のコマンドラインツールを思い出し、ふと「MQTT.js のコマンドラインツールが使えてしまうのではないか?」と思って試しました。ローカルに mosquitto で MQTTブローカーをサクッと実行できる環境はあったので、 npx mqtt sub -t 'test' -h 'localhost' とか npx mqtt pub -t 'test' -h 'localhost' -m 'from MQTT.js' とかを実行してみて、Pub/Sub の両方とも動作するのを確認し、この記事の冒頭のツイートに以下のコメントをしました。

【追記】 MQTT.js のコマンドラインツールを npx で実行した時の挙動の補足

MQTT.js がインストールされていない環境で実行

サブスクライブのほうは、 npx mqtt sub -t '【トピック】' -h '【ホスト名】' とすると、MQTTブローカーへの接続を維持した状態になり、メッセージを受信し続けてくれてます。

パブリッシュのほうは、 npx mqtt pub -t '【トピック】' -h '【ホスト名】' -m '【メッセージ】' を実行すると、1回パブリッシュした後に処理が終了します。その処理終了の際にパッケージのファイル一式が削除されるので、その後コマンドを実行するごとにインストールが行われるという挙動になります。

MQTT.js をローカルインストールしたフォルダ上で実行

npx は、パッケージがインストールされていない環境だと、処理の実行に必要なパッケージをコマンド実行時に一時的にインストールして、処理が終わるとインストールしたファイルを破棄します。
もし、処理の実行に必要なパッケージがローカルインストールされている場合、そのローカルのパッケージを利用して処理を実行します(インストールされたフォルダ内でコマンドを実行する必要あり)。

そのため、自分でローカルインストールしたファイル一式を手動削除する必要が出てきますが、この方法ならパブリッシュするごとにインストールするような挙動は避けられます。インストールしていない状態での実行、という手軽さが失われてしまいますが・・・。

冒頭のツイートのコメントでのやりとりでも、少し触れてました。

【追記】 npx について

npx を初めて使ってみようと思ったきかっけは、おそらくこちらの記事を見た時でした。

●npm 5.2.0の新機能! 「npx」でローカルパッケージを手軽に実行しよう - Qiita
 https://qiita.com/tonkotsuboy_com/items/8227f5993769c3df533d

npx の利用について、自分は「何か特定のパッケージのコマンドライン実行を、ずっと使わないかもしれないけれど、とりあえずは試してみたい」というときなどに、以下のような使い方をしてたりします。

1) 適当にパッケージのお試しをするフォルダを作る
2) 上記1)で作ったフォルダで npm install 【パッケージ名】 でパッケージをローカルインストール
3) `npx 【パッケージ名】' でローカルインストールしたパッケージを実行
4) お試しが終わったら、上記1)で作ったフォルダを丸ごと削除

ローカルインストールした場合、コマンドを実行したフォルダ直下に node_modules フォルダが作られて、その下にファイルが置かれるような構成になるので、コマンドを実行したフォルダを削除するだけでサクッとお試し用に追加されたファイル一式を丸ごと削除できます。

おわりに

他にも、Node.js のパッケージでコマンドラインツールが使えるようなものがあったと思うので、MQTT.js 以外でも便利に使えそうなものがないか試してみようと思います。

【追記】 wscat(WebSocket関連)で試してみて、記事を書きました。

●WebSocket のサーバー・クライアントをコマンドラインで簡単に実行する(npx と wscat) - Qiita
 https://qiita.com/youtoy/items/72bbd5f6b0893756da36

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0