本日の第18回「Cloud Foundry 百日行」は Node-RED です。
[Node-RED] 基本情報
- 公式サイト
http://nodered.org/ - ソースコード
https://github.com/cloudfoundry-community/node-red-cf-ready.git - 参考
https://www-304.ibm.com/connections/blogs/et/entry/node-red
【参考日本語記事】 http://www.infoq.com/jp/news/2014/06/ibm-node-red-qconlondon
Node-RED は IBM 英国のHursley研究所で開発されたデジタル社会に対応したツールです。2014年に公開され、オープンソースになっています。最近、IFTTT がはやっていますが、これは様々な情報源からデータを入手、加工し、別の情報に出力するというものです。Node-RED も同じように様々な情報源のデータを取得、加工するツールです。IFTTT のエンジニア向け版といってもよいかと思います。昨今、様々なデバイスがつながる Internet of Things 対応や 様々な API を駆使したサービス結合が必要になってきていますが、Node-RED ではそうしたアプリをGUIで直感的に作成できるようにしてくれます。
今回は、Node-REDを Cloud Foundry ベースの PaaS にデプロイして利用する方法、およびNode-REDの簡単な動作についてご紹介したいと思っています。
デプロイ
1. ソースの入手
今回は、Cloud Foundry Community 版を利用します。git clone でソースを入手します。
$ git clone https://github.com/cloudfoundry-community/node-red-cf-ready.git
2. Cloud Foundry へデプロイ
Cloud Foundry として Bluemix を利用しました。Node-RED は Node.js ランタイムで動作します。
$ cf push amntnodered
Bluemix のため Node ビルドパックがカスタマイズされていますが、Cloud Foundry Foundation 版 Node.js ビルドパックでも動作します。正常にデプロイできるとアプリケーションにアクセスできるようになるでしょう。
Node-RED の簡単な説明
アプリケーションURLを開くと Node-RED エディターが開きます。左側にあるのがパレットで
node と呼ばれる様々な部品があります。情報の入力、加工、および出力に利用します。この node は開発者が追加できます。
中央にあるのがフローエディターで、ここが開発の中心となります。左側にあるパレットから node を選択して配置します。
右側はnode の説明、およびデバッグコンソールです。例えば、"email" の node はどのようにすれば電子メールが送信できるかの説明が出てきます。
それではいくつか動かしてみましょう。
Node-RED を動かしてみる
1. Twitter をモニターするフローの作成
最初に Twitter メッセージをモニターするフローを作成してみます。左側のパレットに social/twitter, output/debug の node があるのでそれらをシートに配置し線でつなぎます。
次に、twitter node をダブルクリックします。ここで自身の Twitter アカウントを入力します。今回は適当なハッシュタグを設定してみました。
DEPLOY ボタンが右上にあるので、それをクリックします。
しばらくすると指定したハッシュタグでメッセージが出てくるはずです。
2. Twitter メッセージをメールするフローの作成
デバッグだけでは簡単なので、Twitterメッセージをメールしてみます。debug node を削除して、代わりに e-mail node を配置します。
e-mail の node には適切なアカウント情報を入力します。ここでは Google のメールサービスを利用してみました。なお、アプリケーションとしてアクセスするので、セキュリティを多少ゆるく設定する必要があるようです。パスワードがうまく入らないケースがあるようなので、一時的に簡単なパスワードに変更して試験する必要がありました。しばらくするとメールが飛んできました。
3. 最近の地震をGoogle Map に表示するフローの作成
さて、Node-RED にはコミュニティーがあり、http://flows.nodered.org/ という場所に様々なフローや部品が公開されています。その中の、"gmaps experiment + earthquake experiment" を試してみます。
先ほどの Twitterフローは削除してしまいます (control+Aで全体選択、DELETEキーで削除)。"gmaps experiment + earthquake experiment" の URL: http://flows.nodered.org/flow/52ed7bb0d7b349472dee にフローがあるので、これをコピーし、右上にあるメニューから IMPORT->Clipboard を選択します。
Paste するとフローを配置できるようになります。
DEPLOY ボタンをクリックして、http://<app-url>/map (例: http://amntnodered.mybluemix.net/map) を開きます。全世界の最新地震情報が Google社の提供する地図サービスにマッピングされているのが表示されるでしょう。なおこのフローでは U.S. Geological Survey ( http://earthquake.usgs.gov/ ) が提供する情報をNode-RED で加工処理するようになっているようです。
4. その他の情報、重要な注意事項
https://github.com/node-red アカウントにはデフォルト以外の node がいくつか公開されています。
- https://github.com/node-red/node-red-web-nodes
Google カレンダーサービスの利用や Flickr 写真サービスなどのWEBサービスへのアクセス。
- https://github.com/node-red/node-red-nodes
Raspberry PiやBeaglebone などのハードウェアを取扱う node やちょっとしたユーティリティ。
- http://flows.nodered.org/
コミュニティーが開発した node やフロー
注意事項
今回紹介した Node-RED のフローエディターの内容はローカルファイルシステムに書かれるようになっていますので、アプリケーションの明示的な停止や Cloud Foundry インフラのメンテナンスによってコンテナが再起動すると消えてしまいます。重要なフローがある場合には、Export 機能を利用してバックアップを取得してください。なお、完成したフローがある場合には、Export したフローを flows.json ファイルに保存し、コマンド起動時のパラメータとして渡すとコンテナ再起動でも完成したフローを読み込んでくれます。詳細はドキュメントを参照してください。
おまけ
筆者のまわりでは、Node-RED が少しはやっています。もともと Node-RED は Internet of Things 向けに作られているので、趣味にて Raspberry Piに接続したカメラからの画像をアップロードして、人が認識された場合に警告するシステムを作っていました。iPhone からの情報を処理するシステムを開発している人もいます。また、WEBシステムをプロトタイピングするのにも向いているので、ハッカソンで有効活用されているようです。様々な可能性をひめているツールですので、ぜひ試してみてください。
今回の環境
- cf-release (v205) (IBM Bluemix)
- Node-RED
https://github.com/cloudfoundry-community/node-red-cf-ready/tree/7c286187a071c9f9327e4f94ec0356d88e7b2c2f