新しい言語を初めて使う時、慣れている言語ならすぐにできるのに、つまらないことに時間がかかってしまいがちです。Node-REDはほかの言語経験者はもちろんのこと、プログラミングにあまり慣れていない人が初めて使う場合にもあまり迷うことなく使うことができます。チュートリアルの次に進める他の言語と違う優れた仕組みがNode-REDにはあるからです。
どのような言語でもチュートリアルに従えば、どのような言語でどのような手順で実行すればよいかを知ることができますが、仕事で使えるようになるためには以下の様なことができないといけません。
- 処理を組み合わせてプログラムを実装できる
- 動作の確認とデバッグができる
- 一旦動くものを作って確認する
- 全体の構造を把握して見直す
- 新しいライブラリを利用する
このようなことが容易にできる仕組みがNode-REDにはあります。
##言語の学び始めあるある
新しい言語でプログラミングしようとすると、色々なところで詰まってしまい、なかなか進みません。「条件やループはどう書くのだったっけ」と、やりたいことがあるのにプログラムの末端からボトムアップに作らないと動くものができません。パラメータもいっぱいあって、とりあえず動かすまでが一苦労。
いざ動かしだすと「何かおかしいけど、この値はどう表示するんだろう」とデバッグ方法がわからず、とりあえずマニュアルとにらめっこ。プログラムのコピペで作ったので、プログラムが訳の分からない構造になってしまう。
標準ライブラリだけでは実現できないと、ライブラリのインストールやビルド方法を調べて、ライブラリのドキュメントを確認してようやく実装。大したことをしていないのに、もうフラフラです。
これらは経験者になるといちいち調べなくても自然にでしょうけど、初心者にはとても高いハードルです。
Node-REDの仕組み
##トップダウンに書き下ろしてプログラムの構造を作れる
ノードと呼ばれるモジュールがほかの言語ではライブラリに当たります。ノードは機能はNode.js(javascript)、表示はHTMLでできています。Node.jsのライブラリを使った高機能なノードが多くが豊富にあります。
標準ノードのほか、ネットワークで公開されているカスタムノードもたくさんあります。「こんなことがしたい」と思った時に、期待したライブラリがたいていあります。ノードの検索やインストールも簡単で、最初から全体像を意識してトップダウンに、ノードをペタペタとドラッグアンドドロップするだけで、プログラムを作ることができます。似たような経験は、RoR以前のRubyでスクリプトを書いた時以来(個人の感想)です。
プログラム(フロー)が多くなると読みにくくりますので、その時点でノードを複数まとめてサブフローに階層化したり、別のタブに整理することができます。もちろん、あらかじめ構造化しておくこともできますが、高機能なノードを使ってトップダウンに少しずつ書き足して複雑になったらリファクタリングするという作業を繰り返して大きなプログラムをかけるのはNode-REDのとっつきやすいところの一つでしょう。
##処理の任意の場所で処理や共有データを確認できる
Node-REDのプログラムはノード間を線でつなぐとmsg(メッセージ)オブジェクトが渡されます。ここで値を見たいというところにデバッグノードをつないで簡単な設定をするだけで、デバッグタブやノードの下にmsgオブジェクトの値が表示されます。とくにmsg.payloadはよく使われる属性で、payloadをデバッグタブで見るだけなら、設定なしでデバッグできます。
Node-REDではmsgオブジェクトのほかコンテキストオブジェクトと呼ばれる広域オブジェクトを使うことができます。プログラム全体で使えるglobalオブジェクトとフローエディタのタブ内で使えるflowオブジェクトがあります。この値もデバッグノードで表示できるほか、最近のNode-REDはコンテキストオブジェクトの値をいつでも確認できるようになっています。
##よくできたデフォルト値や高速なデプロイで一旦動くものが簡単にできる
大まかな流れを実装する場合に面倒なのが、戻り値のオブジェクト作成です。http responseのノードではロジックを書かなくても、デフォルトでステータスコード200を返せるようになっています(エラーを返したければ固定でエラーを返すこともできます)。ひとまず正常系(あるいはエラー)用にノードをペタペタ並べて一旦動かすことができます。そして、後からノードへのパラメータを条件に応じてセットすることで色々な値を返せるように実装します。
このようにNode-REDでは各ノードの初期値が良くできているので、一旦動かすことが簡単にできます。最初から細かなところを考えなくて良いので、これもトップダウンに開発する手助けになります。
また、実装後、デプロイが一瞬でできます。少し作っては確認、また少し作っては確認するということが、高速なデプロイによって容易になっています。
##日本語のモジュール名で全体の構造を把握して見直せる
Node-REDの日本語化は統合環境が日本語化されているだけではありません。ノードごとに付ける名前も日本語で付けることができます。どのような順に実行されるかを名前を見るだけで把握することができます。もちろん、コメントを色々なものに書くこともできますが、他の言語のようにコードに混ざっているコメントを探して理解するのではなく、ノードの名前で全体構造を把握して、さらにノードをグループの線でくくってコメントして補足できます。
ノードの名前と同じようにノードから線の出ていく「〇」のところ(端子と呼ぶ)にも名前を付けてマウスを上に持って行った際に表示することができます。ノードや端子の名前は必須ではなく、設定などから自動表示もされますので、必要に応じて構造の理解を助ける名前を付けることができます。
##新しいライブラリのインストールとドキュメント参照が簡単
プログラムの標準ライブラリが多いと便利な反面、全体の理解が困難になってしまいます。そこで、多くの言語ではライブラリを追加できます。しかし、パッケージマネージャやビルド環境からの導入などが進んでもライブラリのインストールは面倒なものです。
Node-REDのモジュール(ノード)はフローエディタの左側のパレットに、標準のものと追加したものが並んでします。このパレットはユーザが管理することができ、キーワードでノードを探して追加や削除ができます。ノードを追加/削除すると内部でnpmが実行されてインストール/アンストールできます。
ノードをインストールすると、フローエディタで見ることができるヘルプもインストールされます。フローエディタでノードを選択するだけでヘルプを見ることができますので、とてもべんりです。最近はサンプルもインストールされるノードもあって、導入後に使い方を迷わなくなってきました。
Node-REDのDashboardは最もよく使われているカスタムノードの一つで、ノードをつなげて設定する簡単な操作でWeb画面を作ることができます。すべての人に同じ画面を見せることになりますが、管理画面などに便利です。Dashboardなどは標準ノードにしても良いと思いますが、インストールが簡単なので面倒に感じたことはありません。
おわりに
初めての人にNode-REDを勉強してもらった経験では、初日から自分でプログラムを作り出し、2日で一通り理解して、2週間もすればはまりどころだけ支援してあげれば1人前にプログラムできるようになります。
かつて言語の簡単さを必要な本の厚さで比較されたことがありますが、Node-REDでは本があれば便利ですがなくても大丈夫なぐらい初心者でもとっつきやすいです。もし興味があって、まだ手を出していないなら、ぜひ触ってみてください。