非エンジニアのNode-REDの使い方

船津浩司氏(以下、船津):株式会社ウフルの船津浩司と申します。今回は「Node-REDでプロジェクト管理を始めてみよう!」というテーマで、プロジェクト機能についてご紹介できればと思っています。

まず、私が何者かといいますと、株式会社ウフルでマーケティングを担当しています。例えば自分が担当する「enebular(エネブラー)」という製品のプレゼンやデモ制作、ドキュメントを書いたりといったことをしています。

enebularは弊社の製品で、ざっくり説明するとNode-REDにIoTの便利な機能を付けたサービスです。遠隔にあるデバイスに作ったフローを配信できたり、デバイスのログを確認できたり、という機能を持っています。もしよかったら使ってみてください。

そんな感じなので、僕自身は非エンジニアです。コードはぜんぜん書けなくて、ちょっとSQLが書けるくらいなんですけど、先ほど日立さんが説明していたノードの開発の諸々みたいなところはぜんぜん門外漢で、「こんな世界もあるんだ」という感じで聞いていました。

そんな僕が好きなノードは、node-red-contrib-line-messaging-apiという、LINEに配信できるノードです。ふだん慣れ親しんでいるアプリに何か結果を出せるので、自分自身も「俺なんか作ったな!」と思えるし、デモするときとかもイメージが掴みやすいのかなと思って気に入っています。

改めまして今回お伝えしたいことは、Node-REDのちょっと前のバージョンからですが、新しく追加されたプロジェクト機能で何ができるかということです。これを伝えた後にプレゼンテーション終わりには「あ、プロジェクト機能、ちょっと便利かも」「使ってみようかな」なんて思っていただけるとうれしいです。

その前に僕のNode-REDの使い方ですが、先ほど簡単に説明した通り、デモ作成で使っています。例えばイベントにいらっしゃったお客様の前で簡単な通知システムを作ったり、パートナーのソリューションと連携させたり、あとはハンズオンのプログラムを作ってみて「こんな感じだったら楽しめるかな?」とか、自社製品の魅力を伝えるために使っています。

日々使う中で、「Node-REDにこのプロジェクト機能があったらいいな」と思うことが多々あります。そういった中でNode-REDのこんなところがいいなと思っているのは、エンジニアじゃない僕でも簡単に作れるところと、あとはさっき「ちゃちゃっと作れる」と言ったみたいに本当にすぐに作れちゃいます。

さらに、コードが大量に書いてあると「……ウッ」と思ってしまいますが、Node-REDだとエンジニアじゃない方にも流れがわかるので「あ、なるほど。こんなことをやっているんだね」と、直感でわかる。そんなところがいいなと思っています。

Node-REDを利用していて困ること

一方でそういうことをやっていると、作ったデモのフローの管理や、自分ではなく他の人がデモをしたときにうまく作業ができないというのが僕の困りごとです。みなさんもこういう経験はあるんじゃないのかなと思います。

具体的にどういうことかと言うと、Node-REDは基本的に1つの環境に1つのフローのみという感じで、たくさんのフローを扱う作業はあまり想定していません。なので、僕は、flow.jsonのファイル名を変えたりしてストックする対応をしています。僕の知り合いには、たくさんタブを作って、そのタブごとに訂正したり有効化したりしてフローを管理されている方がいます。

慣れている方だとGitとかを使っている方もいらっしゃるかもしれませんが、どちらにせよフローを切り替えるというのは少し大変です。

さらにこのフローというのは実は複数のファイル、flow.jsonだけではなくて承認用の情報が入っているものや依存関係を整理したものなどが関係したファイルが3つあって、このflow.jsonだけではこれを完全に動作するプログラムというのを管理できないので、この単純に扱うファイル数が多いというのもちょっと面倒くさいところです。

共同作業では、Functionノードを2つ並べてみても違いはわかりにくいですよね。だから、Node-REDにどんな変更があったか1つ1つクリックして設定を見るという経験がある方はけっこう多いんじゃないかと思います。

さらにDiffを取ってみてもNode-REDのflow.jsonは1行に全部書いてあって、Diffを取ったら全部差分が出ているとか、あとは、ノードの位置が変わっただけでも差分に出ちゃうので、本当に意味がある差分はどれなのかというのを読解するのもけっこう難しいです。

デモを改善しても、新しいデモを共有するというのも少し難しかったりします。

プロジェクト機能の利点

そこで便利なのがプロジェクト機能です。デフォルトでは無効になっている隠し機能です。これを有効化すると新しい方式でフローを管理できます。さらに、Gitをご存知の方も多いと思うんですけど、エンジニアのみなさんが慣れ親しんだバージョン管理のシステムが使えます。

新しい管理方式というのは、これを有効化するとプロジェクトという概念でフローを管理することができます。GIFの動画を撮ってみたんですけど、本当にボタンのクリックで簡単に違うフローを開くことができます。もちろん元のフローに戻るのもすごく簡単です。

さらにNode-RED関連ファイルのディレクトリもプロジェクト単位で生成してくれて、同時にGitのファイルとかも作ってくれます。なので、ファインダーやエクスプローラーで見たときもわかりやすくなっています。さらに、Node-REDのプロジェクト機能で僕がすごく気に入っているところは、差分がすごくわかりやすい点です。

田中:いいですね。すごい。

船津:少しわかりにくいかもしれませんが、フローをいちいちクリックしなくても一覧で「ここに変更があったよ」みたいなことがすぐにわかります。Gitでみんながよく知っているNode-REDの画面からボタンクリックでクローンができたりプッシュができたりとか、そんなことができます。

実際に見るプロジェクト機能の使い方

せっかくなので、簡単にプロジェクト機能を実際の画面を通してご紹介できればと思います。

田中:よろしくお願いします。

船津:ライブだと緊張するんですけど、説得力があると思います。すごい簡単です。

田中:オンラインで応援しています。

船津:ありがとうございます(笑)。今はすごくシンプルなフローです。Injectノードがあって、Debugノードで見ています。これで、例えば僕が誰かに「このデモ使ってみてみてよ。良いよ」と言ったとします。

今までだとflow.jsonや認証情報を渡すプロセスが個別にあったと思うんですけど、このプロジェクト機能を有効にするとハンバーガーメニューのところから「プロジェクトを開く」みたいなものが出てきて「プロジェクトをクローン」という、まさしくGitっぽいことが書いてあるんですね。ここで任意のプロジェクト名を作って、リモートリポジトリのURLを入れます。

田中:これは公開のやつですね。

船津:そうです! 僕の場合はGitHubなのでGitHubのパスワードを入れて、これはNode-RED側で登録する認証情報の暗号化キーですね。これを入れてあげれば……できるかな? できた!

田中:おおー! すごーい!

船津:こんな感じで新しいフローを簡単に呼び出すことができます。今回は、僕のお気に入りのLINEに配信するというフローです。元のフローに戻るという場合もこんなふうにUI上のボタンをクリックすれば、すぐに戻れます。一度クローンしてしまえば簡単にそのフローを呼び出すことができます。

プロジェクト機能では、他に「プロジェクト履歴」というタブも新しくできています。例えばここで今「起きて!」という内容をLINEに送る。これは何を考えて「起きて!」と書いたのかはわからないんですけど(笑)。

こんなものが入っていて、これを「お知らせがあるよ!」みたいなものに変えてあげたとすると、今までだったらこれをデプロイして実行してみたいな感じだと思いますが、ここに本当にGitっぽくローカルファイルで変更がありましたというのが、こんな感じですぐにわかります。

配列を展開して「お知らせがあるよ!」という変更も確認できます。本当にステージングに上げると「メッセージを変更!」というコミットが見れます。もちろん今までの「こんな差分があったよ」みたいなことが遡って全部見ることができます。

さらにリモートリポジトリにつながっていて、ここに「あなたのリポジトリは1個進んでますよ」と、出ていますね。こういう状態のときはプッシュしてあげればGitHub上のフローも最新化されて最新のコミットのバージョンになります。

田中:ここはGitの操作ですね。

船津:本当にGitですね。

田中:はい。すばらしい。

船津:Functionノードなども行ごとに差分も見れるようになっていて、すごく便利です。

Node-REDの改善点

こんな感じの便利なプロジェクト機能なんですけど、まだちょっと物足りないところも実際にはあって、例えばGUI上から「このコミットのプログラムを呼び出したいな」という操作はまだできないみたいなんですね。

でも、実際にはGitが使えるので、さっきのプロジェクトのディレクトリに移動して、そこでGitコマンドを打てば普通にGitとして使えます。そこで前のコミットを呼び出したり、GitクライアントでSourcetreeを使ったりできると思うので、エンジニアのみなさんはNode-REDに馴染みやすくなるんじゃないかなと思います。

田中:すごい。

船津:結論としては、Gitを使わずにプロジェクトを切り替えるだけでもすごく便利なので、みなさんにぜひ使っていただきたいなと思います。足りないところはもちろんあるんですけど、そこはケースバイケースで柔軟に使っていただければと思っています。

この便利なプロジェクト機能を使うにはNode-REDのsetting.jsをfalseのところをtrueにするだけです。

田中:そういうことか。

船津:ぜひみなさん参考にしてみてください。本日はありがとうございました。