LoginSignup
45
49

More than 5 years have passed since last update.

Node-RED入門 〜ローカルインストールからRESTful APIまで

Last updated at Posted at 2016-03-19

Node-REDはIBM研究所が開発した直感的にアプリケーションを開発できるプラットフォームです。Bluemixでも簡単に利用できますが、ここではローカルマシンにNode-REDをインストールし、簡単なRESTful APIを作成します。Node-REDのプラグインをMySQLにデータを保存します。

本記事での最終的な構成は下記のようになります。

Screen Shot 2016-03-19 at 12.41.08.png

環境

  • Ubuntu 14.04.4 LTS
  • Node.js v0.10.37
  • Node-RED v0.13.3

以下のVagrantfileを使っています。

# -*- mode: ruby -*-
# vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "ubuntu/trusty64"
  config.vm.hostname = "ubuntu"
  config.vm.network "private_network", ip: "192.168.11.118"
  config.vm.provision "shell", inline: <<-SHELL
    apt-get update
  SHELL
end

インストール

サーバにログインし、Node.jsをインストールします。

$ vagrant up
$ vagrant ssh
vagrant@ubuntu:~$ sudo add-apt-repository ppa:chris-lea/node.js
[Enter]
vagrant@ubuntu:~$ sudo apt-get update
vagrant@ubuntu:~$ sudo apt-get install -y nodejs

Node.jsがインストールできたら、Node-REDをインストールします。

vagrant@ubuntu:~$ sudo npm install -g node-red

インストールが完了したら、Node-REDを起動します。

vagrant@ubuntu:~$ node-red

ブラウザから http://192.168.11.118:1880/ にアクセスして下記のような画面がでればOKです。

Screen Shot 2016-03-18 at 22.53.21.png

Hello World

Node-REDを利用してHello Worldを表示させます。次の手順でHello Worldを表示させるアプリをデプロイします。

  1. 左のNode一覧のinputからinject Node の追加
  2. 左のNode一覧のoutputからdebug Node の追加
  3. inject Node と debug Nodeをつなぐ
  4. inject Node の編集 - PayloadからStringを選び「Hello World」を入力
  5. デプロイ

Screen_Shot_2016-03-18_at_22_54_09.png

デプロイが完了したら、実際にinjectをクリックして「Hello World」を表示させます。

Screen_Shot_2016-03-18_at_23_01_40.png

ライブラリの追加

標準のNodeでも様々なことができますが、標準のNodeでやりたいことができない場合があります。その場合でも、600を超えるライブラリが公開されているので、それらを活用することができます。

ここではMySQLにユーザデータを保存するため、node-red-node-mysqlをインストールします。

MySQLのインストールとデータベース、テーブルの作成

vagrant@ubuntu:~$ sudo apt-get install -y mysql-server
[rootパスワードの入力]
vagrant@ubuntu:~$ mysql -uroot -p
Enter password: [rootパスワードの入力]

mysql> CREATE DATABASE nodered;
Query OK, 1 row affected (0.00 sec)

mysql> CREATE TABLE nodered.users(id INT AUTO_INCREMENT, name TEXT, PRIMARY KEY (id));
Query OK, 0 rows affected (0.01 sec)

ライブラリのインストール

vagrant@ubuntu:~$ cd ~/.node-red/
vagrant@ubuntu:~/.node-red$ npm install node-red-node-mysql
node-red-node-mysql@0.0.8 node_modules/node-red-node-mysql
└── mysql@2.9.0 (bignumber.js@2.0.7, readable-stream@1.1.13)
vagrant@ubuntu:~/.node-red$ node-red

データベースの追加

node-redを起動するとstorageの欄にmysqlが増えていると思います。ここからMySQLの設定を行っていきます。下記の手順でデータベースの設定画面を開きます。

Screen_Shot_2016-03-19_at_11_13_48.png

下記の情報を入力して「Add」を押します。これで保存されるので、このmysql nodeはひとまず消してしまって大丈夫です。

  • User: root
  • Password: [rootパスワード]
  • Database: nodered

RESTful API

以上で準備が整ったので、これからユーザ情報を保存、参照、変更、削除できるようなシンプルなAPIを作成してみます。

POST /users

ユーザの追加APIをつくります。下記のようにhttp node、function node、mysql node、http response nodeをおいて、それらをつなぎます。

Screen Shot 2016-03-19 at 11.19.27.png

ここから各nodeの設定を行っていきます。

http nodeの設定

  • Method: POST
  • URL: /users

function nodeの設定

  • Name: Generage SQL
  • Function:
name = msg.payload.name;
msg.topic = "insert into users(name) values('" + name + "');";
console.log(msg.topic);
return msg;

mysql nodeの設定

  • Database: nodered

動作確認

nodeの設定が終わったらデプロイボタンを押します。POSTMAN等でhttp://192.168.11.118:1880/usersにPOSTリクエストを送ります。nameパラメータに任意の名前を入力してください。下記のようなレスポンスがあれば成功です。

Screen Shot 2016-03-19 at 11.29.01.png

GET /users

ユーザ一覧を表示するAPIをつくります。POSTの際と同様のnodeを配置し、線でつないでください。各nodeには下記のように設定を入れます。

http nodeの設定

  • Method: GET
  • URL: /users

function nodeの設定

  • Name: Generage SQL
  • Function:
msg.topic = "SELECT * FROM users;"
console.log(msg.topic);
return msg;

mysql nodeの設定

  • Database: nodered

動作確認

nodeの設定が終わったらデプロイボタンを押します。POSTMAN等でhttp://192.168.11.118:1880/usersにGETリクエストを送り下記のようなレスポンスがあれば成功です。

Screen Shot 2016-03-19 at 11.41.13.png

PUT /users/:userid

ユーザ情報を更新するAPIをつくります。POSTの際と同様のnodeを配置し、線でつないでください。各nodeには下記のように設定を入れます。

http nodeの設定

  • Method: PUT
  • URL: /users/:userid

function nodeの設定

  • Name: Generage SQL
  • Function:
id = msg.req.params.userid;
name = msg.payload.name;
msg.topic = "UPDATE users SET name='" + name + "' WHERE id=" + id + ";";
console.log(msg.topic);
return msg;

mysql nodeの設定

  • Database: nodered

動作確認

nodeの設定が終わったらデプロイボタンを押します。POSTMAN等でhttp://192.168.11.118:1880/users/[userid]にPUTリクエストを送ります。nameパラメータに変更したい名前を入力してください。下記のようなレスポンスがあれば成功です。

Screen Shot 2016-03-19 at 11.44.11.png

DELETE /users/:userid

ユーザ情報を削除するAPIをつくります。POSTの際と同様のnodeを配置し、線でつないでください。各nodeには下記のように設定を入れます。

http nodeの設定

  • Method: DELETE
  • URL: /users/:userid

function nodeの設定

  • Name: Generage SQL
  • Function:
id = msg.req.params.userid;
msg.topic = "DELETE FROM users WHERE id=" + id + ";";
console.log(msg.topic);
return msg;

mysql nodeの設定

  • Database: nodered

動作確認

nodeの設定が終わったらデプロイボタンを押します。POSTMAN等でhttp://192.168.11.118:1880/users/[userid]にDELETEリクエストを送り下記のようなレスポンスがあれば成功です。

Screen Shot 2016-03-19 at 11.45.39.png

まとめ

簡単ですがNode-REDのインストールと使い方を説明しました。
これより先は下記サイトが参考になります。

参考

次のJSONファイルをインポートすることで、上記を再現することができます。

[{"id":"1fd3dfa8.4f1d4","type":"MySQLdatabase","z":"4aa5ae1.97e3a5","host":"127.0.0.1","port":"3306","db":"nodered","tz":""},{"id":"2650d5a5.c197ba","type":"inject","z":"4aa5ae1.97e3a5","name":"","topic":"","payload":"Hello World","payloadType":"str","repeat":"","crontab":"","once":false,"x":152.5,"y":36,"wires":[["70e93a18.c280e4"]]},{"id":"70e93a18.c280e4","type":"debug","z":"4aa5ae1.97e3a5","name":"","active":true,"console":"false","complete":"false","x":448.5,"y":76,"wires":[]},{"id":"ea332de7.8bb8e","type":"http in","z":"4aa5ae1.97e3a5","name":"","url":"/users","method":"post","swaggerDoc":"","x":123.5,"y":130,"wires":[["820ba42e.202538"]]},{"id":"820ba42e.202538","type":"function","z":"4aa5ae1.97e3a5","name":"Generate SQL","func":"name = msg.payload.name;\n\nmsg.topic = \"insert into users(name) values('\" + name + \"');\";\nconsole.log(msg.topic);\n\nreturn msg;","outputs":1,"noerr":0,"x":247.5,"y":186,"wires":[["a559edc7.2808f"]]},{"id":"a559edc7.2808f","type":"mysql","z":"4aa5ae1.97e3a5","mydb":"1fd3dfa8.4f1d4","name":"","x":411.5,"y":145,"wires":[["46a723fa.395a7c"]]},{"id":"46a723fa.395a7c","type":"http response","z":"4aa5ae1.97e3a5","name":"","x":565.5,"y":188,"wires":[]},{"id":"ce257e44.bad9d","type":"http in","z":"4aa5ae1.97e3a5","name":"","url":"/users","method":"get","swaggerDoc":"","x":108,"y":254,"wires":[["76258633.ef0118"]]},{"id":"76258633.ef0118","type":"function","z":"4aa5ae1.97e3a5","name":"Generate SQL","func":"msg.topic = \"SELECT * FROM users;\"\nconsole.log(msg.topic);\n\nreturn msg;","outputs":1,"noerr":0,"x":236.5,"y":315,"wires":[["caefba35.3d99e8"]]},{"id":"caefba35.3d99e8","type":"mysql","z":"4aa5ae1.97e3a5","mydb":"1fd3dfa8.4f1d4","name":"","x":413.5,"y":264,"wires":[["4bdf356f.248bec"]]},{"id":"4bdf356f.248bec","type":"http response","z":"4aa5ae1.97e3a5","name":"","x":566.5,"y":316,"wires":[]},{"id":"757294dd.b521cc","type":"http in","z":"4aa5ae1.97e3a5","name":"","url":"/users/:userid","method":"delete","swaggerDoc":"","x":142,"y":503,"wires":[["664ff4ec.bc50dc"]]},{"id":"664ff4ec.bc50dc","type":"function","z":"4aa5ae1.97e3a5","name":"Generate SQL","func":"id = msg.req.params.userid;\nmsg.topic = \"DELETE FROM users WHERE id=\" + id + \";\";\nconsole.log(msg.topic);\n\nreturn msg;","outputs":1,"noerr":0,"x":234.5,"y":566,"wires":[["7ea3cf0c.e6a39"]]},{"id":"7ea3cf0c.e6a39","type":"mysql","z":"4aa5ae1.97e3a5","mydb":"1fd3dfa8.4f1d4","name":"","x":413.5,"y":503,"wires":[["9fd59e08.8c24e"]]},{"id":"9fd59e08.8c24e","type":"http response","z":"4aa5ae1.97e3a5","name":"","x":555.5,"y":555,"wires":[]},{"id":"9db59cca.00b8d","type":"http in","z":"4aa5ae1.97e3a5","name":"","url":"/users/:userid","method":"put","swaggerDoc":"","x":130.5,"y":380,"wires":[["fa69f9c7.2493b8"]]},{"id":"fa69f9c7.2493b8","type":"function","z":"4aa5ae1.97e3a5","name":"Generate SQL","func":"id = msg.req.params.userid;\nname = msg.payload.name;\nmsg.topic = \"UPDATE users SET name='\" + name + \"' WHERE id=\" + id + \";\";\nconsole.log(msg.topic);\nreturn msg;","outputs":1,"noerr":0,"x":234.5,"y":435,"wires":[["2321636c.fffb6c"]]},{"id":"fdc0c758.f91438","type":"http response","z":"4aa5ae1.97e3a5","name":"","x":560.5,"y":435,"wires":[]},{"id":"2321636c.fffb6c","type":"mysql","z":"4aa5ae1.97e3a5","mydb":"1fd3dfa8.4f1d4","name":"","x":409.5,"y":389,"wires":[["fdc0c758.f91438"]]}]
45
49
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
45
49