お金をかけずにサーバーの勉強をしよう

Node-REDインストール

2023年3月23日

メニューへ戻る

最近ノーコード・ローコードツールが流行っています。

私が数年前に買った Raspberry Piには専用OSである Raspbian(現在は Raspberry Pi OSと改名)をインストールして遊んでいました。

非力なマシンに GUIまで乗っけて大層重かったのですが、入っているものは一通り動かしましたね。

Java統合開発環境の BlueJ・Java教育ツールの Greenfootマインクラフトの限定版(Pythonの勉強で自動操作する)など、結構面白いソフトが入っていた覚えがあります。

その中の1つに Node-REDがありまして、これが私と Node-REDの出会いでした。

何か画面に部品を置いて線を繋いでいくとプログラムができる、そんなツールだったんですが、当時は全く使い方が分からずに放ってありました。
その時は Raspberry Pi専用のツールだと思っていました。

その後別件で Node.jsをやることになった時に、再び Node-REDの名前を目にするようになって「npmでインストールできるということは Node.jsが動くなら Raspberry Piじゃなくてもどこでも動くのでは?」から始まりました。


Node-REDは Node.jsで動く IBMが開発したローコードツールという位置づけで良いと思います。

本家サイトはこちらです。
Node-RED

Node-RED日本ユーザー会というのもあります。

ここでは Node.js環境に Node-REDをインストールして、ローコードツールを味わってみます。

環境は以下の通り。

Linuxでやりますが、Node.jsが動くならどこでも動くでしょう。

Ubuntu Serverのインストールについては「Ubuntu Linux Serverをインストール」に、Node.jsについては「Node.jsインストール」にそれぞれ書いています。

以降 Ubuntu Serverに Node.jsがインストールされている状態からスタートします。

Node-REDのインストール方法はこちら。
Running Node-RED locally
これに従ってインストールしていきます。

subro@UbuntuServer2204-1:~$ sudo npm install -g --unsafe-perm node-red

changed 292 packages in 7s

40 packages are looking for funding
  run `npm fund` for details

インストールできました。

Node-REDを実行する専用ユーザーを Ubuntu Serverに作ります。
「nodered」ユーザーと「nodered」グループを作ります。

subro@UbuntuServer2204-1:~$ sudo addgroup nodered
グループ `nodered' (GID 1002) を追加しています...
完了。

subro@UbuntuServer2204-1:~$ sudo adduser --gid 1002 --home /home/nodered nodered
ユーザー `nodered' を追加しています...
新しいユーザー `nodered' (1002) をグループ `nodered' に追加しています...
ホームディレクトリ `/home/nodered' を作成しています...
`/etc/skel' からファイルをコピーしています...
新しい パスワード:noderedユーザーの新規パスワード
新しい パスワードを再入力してください:パスワードをもう一回
passwd: パスワードは正しく更新されました
nodered のユーザ情報を変更中
新しい値を入力してください。標準設定値を使うならリターンを押してください
        フルネーム []: Node-RED User(任意の名前)
        部屋番号 []:Enterキー
        職場電話番号 []:Enterキー
        自宅電話番号 []:Enterキー
        その他 []:Enterキー
以上で正しいですか? [Y/n] Y

新規ユーザーとグループができましたので、それで Ubuntu Serverにログインします。

Node-REDを実行します。

nodered@UbuntuServer2204-1:~$ node-red
22 Mar 22:43:59 - [info]

Welcome to Node-RED
===================

22 Mar 22:43:59 - [info] Node-RED バージョン: v3.0.2
22 Mar 22:43:59 - [info] Node.js  バージョン: v18.15.0
22 Mar 22:43:59 - [info] Linux 5.15.0-67-generic x64 LE
22 Mar 22:43:59 - [info] パレットノードのロード
22 Mar 22:44:00 - [info] 設定ファイル: /home/nodered/.node-red/settings.js
22 Mar 22:44:00 - [info] コンテキストストア : 'default' [module=memory]
22 Mar 22:44:00 - [info] ユーザディレクトリ : /home/nodered/.node-red
22 Mar 22:44:00 - [warn] プロジェクトは無効化されています : editorTheme.projects.enabled=false
22 Mar 22:44:00 - [info] フローファイル     : /home/nodered/.node-red/flows.json
22 Mar 22:44:00 - [info] flow ファイルを作成します
22 Mar 22:44:00 - [warn]

---------------------------------------------------------------------
フローのクレデンシャルファイルはシステム生成キーで暗号化されています。

システム生成キーを何らかの理由で失った場合、クレデンシャルファイルを
復元することはできません。その場合、ファイルを削除してクレデンシャルを
再入力しなければなりません。

設定ファイル内で 'credentialSecret' オプションを使って独自キーを設定
します。変更を次にデプロイする際、Node-REDは選択したキーを用いてクレ
デンシャルを再暗号化します。

---------------------------------------------------------------------

22 Mar 22:44:00 - [info] サーバは http://127.0.0.1:1880/ で実行中です
22 Mar 22:44:00 - [warn] 暗号化されたクレデンシャルが存在しません
22 Mar 22:44:00 - [info] フローを開始します
22 Mar 22:44:00 - [info] フローを開始しました

開始しました。

Ubuntu Serverの 1880/tcpで待ち受けていますので、そこに WEBブラウザで HTTPアクセスしてみて下さい。
我が家の環境では、http://UbuntuServer2204-1:1880 です。

こんな画面が出るはずです。
Node-RED画面 1
これがNode-REDの開発画面で、左にある部品を真ん中の方眼の所にドラッグ&ドロップで持ってきて、線で繋げてアプリケーションを作ります。


では、せっかくですので、WEBサーバーを作ります。
http://UbuntuServer2204-1/hello にアクセスしたら「Hello World!」の画面を返します。

まず左ペインから、[http in][template][http Response]の部品を持ってきて、以下のように線で繋いで下さい。
Node-RED画面 2

[http in]ノードをダブルクリックしますと、以下の画面になるので[URL]を「/hello」として下さい。
これがエンドポイントになります。
Node-RED画面 3
完了を押します。

[template]をダブルクリックしますと、以下の画面になるので[構文]を[HTML]にして、[テンプレート]の中を以下のように書き換えます。
これがレスポンスボディになります。
Node-RED画面 4
完了を押します。

右上にあるこのボタンを押します。
Node-RED画面 5

http://UbuntuServer2204-1:1880/hello に WEBブラウザでアクセスします。
Node-RED画面 6
「Hello World!」が表示されました。WEBサーバーとして動いています!

たったこれだけの作業で簡易WEBサーバーとして動いてしまいました。
中々のスグレモノと思います。


インストール直後の部品は少ないですが、画面右上にあるハンバーガーメニューを開くとこんなメニューになりますので、[パレットの管理]を選択して下さい。
Node-RED画面 7

こんな画面になりますので[ノードを追加]タブを選択して、虫眼鏡の検索行に検索ワードを入れると関連のものが出てきます。
例として「azure」と入れてみました。 Node-RED画面 8
この画面で部品(Node-REDでは「ノード」と呼びます)を増やしていけます。


次にログイン画面を有効にしましょう。
先程立ち上げた Node-REDはCtrl+cで停止させて下さい。

ユーザー認証機能の有効化方法が書いてあるところ(Node-RED日本ユーザー会による翻訳だと思います)はこちら。
セキュリティ

設定ファイルは Node-REDを実行したユーザーのホームディレクトリ以下にあります。

ここの例では noderedユーザーですので、/home/nodered/.node-red/setting.js ファイルになります。

ユーザーのパスワードは bycriptという方法で暗号化した文字列を入れないといけませんので、先に作っておきます。

nodered@UbuntuServer2204-1:~$ node-red admin hash-pw
Password: パスワードを入れる
$2b$08$D9HaQN7BXR2Cwb3Us2XUrOHUwBkyUhBWN9Q2BaoJDucryJ614mLm.

ピンクの部分が暗号化されたパスワード文字列になります。

vimなどのテキストエディタで setting.jsファイルを以下のように書き換えて下さい。
(ついでに同じパスワードの「subro」ユーザーを追加しています。)

    //adminAuth: {
    //    type: "credentials",
    //    users: [{
    //        username: "admin",
    //        password: "$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN.",
    //        permissions: "*"
    //    }]
    //},

    ↓↓↓↓↓↓ コメントを表す // を消しています ↓↓↓↓↓↓

    adminAuth: {
        type: "credentials",
        users: [{
            username: "admin",
            password: "$2b$08$D9HaQN7BXR2Cwb3Us2XUrOHUwBkyUhBWN9Q2BaoJDucryJ614mLm.",
            permissions: "*"},
            {
            username: "subro",
            password: "$2b$08$D9HaQN7BXR2Cwb3Us2XUrOHUwBkyUhBWN9Q2BaoJDucryJ614mLm.",
            permissions: "*"
        }]
    },

修正したら、Node-REDをまた起動します。

WEBブラウザでアクセスすると今度はこのような画面が出ましたので、subroユーザーでログインしてみます。
Node-RED画面 9
ログインした後の絵は変りませんので割愛します。

ユーザーを作りはしましたが、作成したフロー(ノーコードのプログラム)はユーザー別になってるわけじゃありませんでした。
Node-REDを実行している OSユーザー1人につき、フローのデータ管理枠が 1つ、という捉え方になるのではないでしょうか。


Node-REDの利点は IBM製で、メンテナンスと機能拡充が何年も続いているということだと思います。

部品も世界中で新しいノードがどんどん作られていて、特に IoT分野(センサー等の値を得るとか)での利用が進んでいるようです。
データベースにアクセスするノードもありました。

Raspberry Piも、きっとあのチクチク(GPIO)に付けたセンサーを扱うノードがあるんだろうと思います。
(センサーを持ってないので詳しくは分かりませんが)


Node.js自体が非力な環境で動かせる特性を持っているものですし、これならサーバー監視に使える簡単な Web-APIを作れるだろうと思っています。

私個人的にはノーコード・ローコードツールは長生きするものが少ない印象なんですが、Node-REDは実体が Node.jsというメジャーな JavaScript実行環境という点で長生きしそうな雰囲気があります。

どうせタダですし、インストールもこの通り簡単なので、一度イジってみると面白いと思います。


電子工作じゃなくても十分使えるポテンシャルがあると思います。

電子工作のための Node-RED 活用ガイドブック [ 後閑 哲也 ]

価格:2,992円
(2022/7/26 17:40時点)
感想(1件)

ラズパイの新常識 Node-REDでノーコード/ローコード電子工作 [ 小池 星多 ]

価格:3,982円
(2022/7/26 17:41時点)
感想(1件)


Raspberry Piも最近のはかなりパワフルなので、そこで Linuxの勉強をしても良いかもです。

TRASKIT Raspberry Pi 4 Model B /ラズベリーパイ4B(8GB RAM)技適マーク付/MicroSDHCカード128GB NOOBSプリインストール/簡単に取り付けるケース/5.1V/3A Type-C スイッチ付電源/2つのMicroHDMI-to-HDMIケーブルライン/3つヒートシンクと2つの透明静音冷却ファン

価格:33,333円
(2022/7/26 17:43時点)
感想(0件)