Nick O'Leary氏は先回のQCon Londonで,モノのインターネット(Internet of Things / IoT)に注目したオープンソースプロジェクトのNode-REDを発表した。IBMのEmerging Technologyチームが開発したこのプロジェクトは,"ハードウェアデバイス,API,オンラインサービスが画期的な方法で結合された"仮想環境をブラウザ上で実現する。Raspberry Piのような低価格ハードウェアに加えて,開発者が"配管工事に煩わされることなく本来の作業に集中できるようにする"ため,クラウド上でも稼働するのが特徴だ。
最初にIoTのユースケースをいくつか紹介した後に,氏は,Node-REDの使いやすさと多能性をデモンストレーションしてみせた。その内容は,自身のWebブラウザ上で,"#qconlondon"というハッシュタグの付いたツイートを処理する小さなメッセージフローを作成して,ツイートの感情分析(sentiment analysis)をする,というものだ。ポジティブなツイートの数が,演台の前に設置されたLEDパネルにシリアルポート経由で表示されるとともに,WebSocketを通じてブラウザ上にも表示された。
このサンプルが特定の問題の解法を示したに過ぎないことを強調しながらも,氏は,オープンデータとAPIの品質向上に寄与する点をメリットとして説明した上で,デバイスとプラットフォームの細分化がそれぞれの問題を難しくしている点を指摘した。すなわち,"相互運用性は半分もなく,APIはすべてバラバラ,異なったプロトコルがたくさんあって,[...] 見事なほどの混乱状態です。" 結果的に開発者は,"自分の目的を達成するためよりも,ソリューション同士のつなぎ合わせに時間を浪費"しなければならない。
Node-REDの目標はこの状況を変えることにある。Node-REDの持つブラウザベースのエディタでは,使い勝手に優れた機能をカプセル化した,さまざまな種類の"ノード"を"パレット"から選択して"フロー"に接続し,それぞれの動作を設定することができる。作成したフローは,ボタンをクリックするだけでNode.jsベースのランタイムに配信が可能だ。例えばTwitterノードは,OAuth認証フローの実行方法とTwitter REST APIの操作手順をカプセル化することで,実装の詳細をすべて開発者から隠ぺいする。
QConに参加したDavid Laing氏はプレゼンテーションの後,Node-REDを試してみるためにその次のセッションを飛ばすことにした。
Node-REDは,"AならばB"的なワークフローの優れたオープンソースソリューションです。監視APIからデータを取り出して,ある条件が成立した場合に警告を発する処理ワークフローを,私は2時間以内で構築することができました。
軽量なランタイムは通常スタンドアロンで動作するが,他のNode.jsアプリへの組み込みも可能だ。さらに先日,ヘッドレスモードでUIを使わずに実行できる機能も追加された。
提供されているノードのタイプは,幅広い機能をカバーする。それらが入出力や各機能の有無,特定の機能との統合などによって,次例のように分類されてパレットに表示される。
- ハードウェア – Rasperry Pi, BeagleBone Black, Arduino
- ネットワーク – HTTP, TCP, UDP, MQTT, WebSocket
- パーザ – CSV, JSON, XML
- 変換 – JavaScript関数, Mustacheテンプレート
- ソーシャル – Twitter, Twillio, Email, IRC, RSS, XMPP
- ストレージ – ファイルシステム, MongoDB, MySQL, PostgreSQL, Redis
- 分析 – 感情分析, 統計分析
"関数(Function)"ノードは,ユーザの定義したJavaScriptをサンドボックス内で実行することで,入力メッセージ(JavaScriptオブジェクト)を,場合によっては複数の出力に変換する。さらに"投入(Inject)"ノードでは,フローの手操作による起動や繰り返し起動,入力内容をエディタのデバッグパネルに表示するノードの"デバッグ"などが可能だ。
新しいノードタイプも簡単に作成できる。ノードはそれぞれ,サーバ側の動作を定義したJavaScriptファイルと,エディタ上のノードのインターフェースを定義するHTMLファイルで構成される。Node.jsパッケージリポジトリで公開されている何万というモジュールを選択して利用すれば,パレットノードの範囲を拡張して,新たな機能を追加することも可能だ。
Node-REDのユーザインターフェースには複数のワークスペースがあり,フローを並行して編集することができる。クリップボードや組み込みライブラリを対象として,フローのエクスポートやインポートにも対応する。シリアライズや転送を容易にするために,フローはJSONで表現される。Node-REDエディタに直接ドラッグ・アンド・ドロップすれば,JSON構造体を個別に登録することも可能だ。公開フローライブラリに登録して,他のユーザと情報を共有することもできる。公開されたフローはGitHubに,登録者のプライベートなGistとして保存される。
プロジェクトのソースコードとイシュートラックはGitHubで利用可能だ。別のリポジトリには,拡張用のノードも公開されている。資料はメインサイトで,進捗情報や最新状況はブログやTwitterを通じて,それぞれ提供される。コミュニティにより深く関わりたければ,活発なGoogleグループに参加するのがよいだろう。