-
Notifications
You must be signed in to change notification settings - Fork 53
Japanese
ããŒããžã§ãã¬ãŒã¿ã¯ãSwaggerãfunctionããŒããªã©ã®ãœãŒã¹ã³ãŒãããNode-REDã®ããŒããçæããããã®ã³ãã³ãã©ã€ã³ããŒã«ã§ãã ãã®ããŒã«ã䜿çšãããšãããŒãéçºè ã¯Node-REDããŒãã®å®è£ æéãå€§å¹ ã«ççž®ã§ããŸãã
Node-REDã«ã¯ããããŒã©ã€ãã©ãªã«ååšããããŒãã䜿çšããã³ãŒãã£ã³ã°ããããšãªãè¿ éãªéçºãã§ãããšããå©ç¹ããããŸãã ããããç¬èªã®åŠçãå®çŸããããã«ãNode-REDãŠãŒã¶ãããŒããéçºãããšãJavaScriptãšHTMLã®ã³ãŒãã£ã³ã°ã«æéãããããè¿ éãªéçºãã§ããNode-REDã®å©ç¹ãèããŠããŸããŸãã ãã®åé¡ã解決ããããã«ãããŒããžã§ãã¬ãŒã¿ã¯ã³ãŒãã£ã³ã°ãªãã§ç¬èªã®ããŒããèªåçæããããã±ãŒãžåããŸãã 以äžã®éããããŒããžã§ãã¬ãŒã¿ã«ã¯4ã€ã®å©çšã±ãŒã¹ããããŸãã
httpãªã¯ãšã¹ãããŒãã¯ãREST APIçµç±ã§ã¯ã©ãŠããµãŒãã¹ã«ç°¡åã«æ¥ç¶ã§ããŸãã ããããããŒã±ãã£ã³ã°ã®èŠ³ç¹ããèãããšãhttpãªã¹ãšã¹ãã®ä»£æ¿ãšããŠãã¯ã©ãŠããµãŒãã¹åãã«å°çšã«ç¬èªã«éçºããããŒããå ¬éããããšã¯ãã¯ã©ãŠããµãŒãã¹ã®ãŠãŒã¶æ°ãå¢ããããã«å¹æçã§ãã ãªããªããã¯ã©ãŠããµãŒãã¹ãšã®æ¥ç¶æ¹æ³ã詳现ã«è§£èª¬ããããŒãããããã£ãããŒãæ å ±ãããã¥ã¡ã³ãããŠãŒã¶ããªãã£ã«è²¢ç®ããããã§ãã äžè¬çã«ãã¯ã©ãŠããµãŒãã¹ãããã€ãã¯ããŠãŒã¶ãSwagger UIã§REST APIããã¹ãã§ããæ§ãSwaggerãå ¬éããŠããŸãã ããŒããžã§ãã¬ãŒã¿ã¯ããã®Swaggerã䜿çšããŠãã¯ã©ãŠããµãŒãã¹ãžã®æ¥ç¶çšã®ããŒããçæããŸãã ãããã£ãŠãã¯ã©ãŠããµãŒãã¹ãããã€ãã¯ãããŒãéçºã³ã¹ããªãã§ç¬èªã®ããŒããå ¬éã§ããæ§ã«ãªããŸãã
Node-REDãŠãŒã¶ã¯ãfunctionããŒãã«JavaScriptã³ãŒããèšè¿°ããç°¡åãªåŠçãåäœãããŠããŸãã ããããè©Šè¡é¯èª€ãç¹°ãè¿ãéçºãè¡ãããããŒãåŸã ã«æ¹åãããšã倧éã®JavaScriptã³ãŒããfunctionããŒãã«è¿œå ããŠããŸãããšããããŸãã ãã®æãfunctionããŒãã«äŸ¿å©ãªæ©èœãåãã£ãŠããå Žåãä»ã®Node-REDãŠãŒã¶ã«ãã®functionããŒããå ±æããåå©çšãããŠã»ãããšããããŒãºãããã£ãŠããŸãã ãªããªããããŒããåå©çšããããšã§ãä»ã®Node-REDãŠãŒã¶ã¯åãæ©èœãéçºããå¿ èŠãªãããããŒã®éçºã«éäžã§ããããã§ãã ããŒããžã§ãã¬ãŒã¿ã¯ããã®æ§ãªããŒãºãæºããããã«ãæ¢åã®functionããŒãããç¬èªã®ããŒãã®éçºããäœæ¥ãå©ããŸãã
ä»ã®Node-REDãŠãŒã¶ãšãããŒãå ±æããã«ã¯ããµããããŒã®åäœã§è¡ãã®ãæé©ã§ãã å°æ¥ãããŒããžã§ãã¬ãŒã¿ã¯ããµããããŒããç¬èªã®ããŒããçæããæ©èœããµããŒãããŸãã Node-REDãŠãŒã¶ã¯ããµããããŒãç¬èªã®ããŒããšããŠã«ãã»ã«åã§ããæ§ã«ãªããŸãã äŸãã°ãèªèšŒããããæã€templateããŒããšURLãæã€http requestããŒãã¯ãå€ãã®Node-REDãŠãŒã¶ãã¯ã©ãŠããµãŒãã¹ã«æ¥ç¶ããããã«äœ¿çšããå žåçãªãã¢ã§ãã ããŒããžã§ãã¬ãŒã¿ã¯ããã®æ§ãªãããŒãå«ããµããããŒããç¬èªã®ããŒããçæã§ããŸãã ãããŠãNode-REDãŠãŒã¶ã¯ããããŒã©ã€ãã©ãªãä»ããŠãçæããããŒããä»ã®Node-REDãŠãŒã¶ãšå®¹æã«å ±æã§ããŸãã
Web of Things (WoT)ã¯ãIoTããã€ã¹ãæ¥ç¶ããããã®æšæºä»æ§ã§ãã ããŒããžã§ãã¬ãŒã¿ã¯Web of Thingsã®å®çŸ©ããç¬èªã®ããŒããéçºããããšãæ¯æŽããŸãã çŸåšã®ãšãããGitHubäžã«ãããã¿ã€ãå®è£ ã®ã¹ã©ã€ããšã¹ã¯ãªãŒã³ã·ã§ããããããŸãã
ããŒããžã§ãã¬ãŒã¿ãããŒã«ã«ç°å¢ã«ã€ã³ã¹ããŒã«ããã«ã¯ãã³ãã³ãããã³ãã(Windows)åã¯ïŸïœ°ïŸïŸ ïŸ(macOS/Linux)ã§æ¬¡ã®ãnpm installãã³ãã³ããå ¥åããŸãã ã³ãã³ãå®è¡ã«ã¯rootæš©éãå¿ èŠãªãããmacOSåã¯Linuxç°å¢ã§ã¯ "npm install"ã³ãã³ãã®åã« "sudo"ãå¿ èŠã§ãã
npm install -g node-red-nodegen
ããŒããžã§ãã¬ãŒã¿ã®çŸåšã®ããŒãžã§ã³ã¯ãfunctionããŒããšSwaggerããœãŒã¹ãã¡ã€ã«ãšããŠãµããŒãããŠããŸãã ããŒããžã§ãã¬ãŒã¿ã®ã³ãã³ãã§ããnode-red-nodegenã¯ã以äžã®æ§ã«ã³ãã³ãã®åŒæ°ã§æå®ãããã¡ã€ã«ãããŒãã«å€æããŸãã
node-red-nodegen <source file> -> ã³ãã³ãããŒã«ã¯ããœãŒã¹ãã¡ã€ã«ããããŒããåºåããŸã
以éã®ããã¥ã¡ã³ãã§ã¯ã2çš®é¡ã®ãœãŒã¹ãã¡ã€ã«ããããŒããçæããæ¹æ³ã®è©³çŽ°ã«ã€ããŠèª¬æããŸãã
ããŒããžã§ãã¬ãŒã¿ã«ãã£ãŠèªåçæããããŒãããã±ãŒãžã®å žåçãªãã£ã¬ã¯ããªæ§é ã¯ä»¥äžã®éãã§ãã Node-REDãŠãŒã¶ã¯ãèªåçæããããŒããããŒã«ã«Node-REDç°å¢ã«ã€ã³ã¹ããŒã«ããããè¿œå éçºãªããããŒã©ã€ãã©ãªã«å ¬éãããã§ããŸãã
- node.js <- ããŒãåŠççšã®JavaScriptãã¡ã€ã«
- node.html <- ããŒãããããã£UIã®HTMLãã¡ã€ã«
- icons
|-icon.png <- ããŒãã®ã¢ã€ã³ã³ãã¡ã€ã«
- package.json <- ããŒãããã±ãŒãžæ
å ±
- README.md <- ããŒãããã±ãŒãžã®èª¬æãã¡ã€ã«
- LICENSE <- ããŒãã®ã©ã€ã»ã³ã¹æ
å ±
- test
|-node_spec.js <- ããŒãã®ãã¹ãã±ãŒã¹
- locales
|-en-US
|-node.json <- è±èªã®ã¡ãã»ãŒãžã«ã¿ãã°
|-ja
|-node.json <- æ¥æ¬èªã®ã¡ãã»ãŒãžã«ã¿ãã°
|-zh-CN
|-node.json <- äžåœèªã®ã¡ãã»ãŒãžã«ã¿ãã°
|-de-DE
|-node.json <- ãã€ãèªã®ã¡ãã»ãŒãžã«ã¿ãã°
node-red-nodegenã³ãã³ãã®æåã®åŒæ°ãšããŠãSwaggerã®URLåã¯ãã¡ã€ã«ãã¹ãæå®ã§ããŸãã
(1) node-red-nodegenã³ãã³ãã䜿çšããŠããŒããçæ
node-red-nodegen http://petstore.swagger.io/v2/swagger.json
Node-REDãŠãŒã¶ã¯éåžžã以äžã®æé ã§çæããããŒããNode-REDãããŒãšãã£ã¿ã®ãã¬ããã«ã€ã³ããŒãããŸãã
(2) çæããããŒãã®ãã£ã¬ã¯ããªã«ãã£ã¬ã¯ããªãå€æŽ
cd node-red-contrib-swagger-petstore
(3) ã·ã³ããªãã¯ãªã³ã¯ãæºå
sudo npm link
(4) ã«ã¬ã³ããã£ã¬ã¯ããªãNode-REDã®ããŒã ãã£ã¬ã¯ããªã«å€æŽïŒéåžžãNode-REDã®ããŒã ãã£ã¬ã¯ããªã¯ãããŒã ãã£ã¬ã¯ããªã®äžã®".node-red"ã§ãïŒ
cd ~/.node-red
(5) ã·ã³ããªãã¯ãªã³ã¯ãäœæ
npm link node-red-contrib-swagger-petstore
(6) Node-REDãèµ·å
node-red
(7) Node-REDãããŒãšãã£ã¿ã«ã¢ã¯ã»ã¹ (http://localhost:1880)
-> çæãããããŒããNode-REDãããŒãšãã£ã¿ã®ãã¬ããã«è¡šç€ºãããŸãã
(8) çæãããããŒããã¯ãŒã¯ã¹ããŒã¹ã«ãã©ãã°ã¢ã³ããããã
(9) ããŒãããããã£èšå®ã§ã¡ãœãããéžæ
(Open APIããã¥ã¡ã³ãã«ãã¹ãåãå«ãŸããŠããªãããèªèšŒèšå®ãããå ŽåãããŒãããããã£èšå®ã«ãŠãã¹ãåãšèªèšŒèšå®ãèšå®ããŸã)
(10) Node-REDãããŒãšãã£ã¿ã§ãããŒãäœæ
-> injectããŒããçæãããããŒããdebugããŒããããªããããŒããæåã®ã¹ãããã«é©ããŠããŸãã(çæãããããŒããPOSTã¡ãœããã䜿çšããå Žåã¯ãinjectããŒãã®msg.payloadã«JSONããŒã¿ãèšå®ããå¿ èŠããããŸã)
(11) ãããŒãå®è¡
-> ãã®äŸã§ã¯ãinjectããŒãã®ãã¿ã³ãã¯ãªãã¯ãããšãåä¿¡ããããŒã¿ããããã°ã¿ãã«è¡šç€ºããŸãã
çæããããŒããã«ã¹ã¿ãã€ãºããå Žåã¯ã次ã®æé ãã³ãã³ãã©ã€ã³ãªãã·ã§ã³ã圹ç«ã¡ãŸãã
ããŒããžã§ãã¬ãŒã¿ã¯ãã¢ãžã¥ãŒã«åã®ããã©ã«ãã®ãã¬ãã£ãã¯ã¹ãšã㊠"node-red-contrib-"ã䜿çšããŸãã ãããã£ãŠãããŒãåã "swagger-petstore"ã®å Žåãã¢ãžã¥ãŒã«å㯠"node-red-contrib-swagger-petstore"ãšãªããŸãã ããã©ã«ãã®ã¢ãžã¥ãŒã«åãå€æŽãããå Žåã¯ã--moduleåã¯--prefixãªãã·ã§ã³ã䜿çšããŠã¢ãžã¥ãŒã«åãæå®ã§ããŸãã
node-red-nodegen http://petstore.swagger.io/v2/swagger.json --module node-red-node-swagger-petstore
node-red-nodegen http://petstore.swagger.io/v2/swagger.json --prefix node-red-node
SwaggerããçæããããŒãã®å ŽåãSwaggerã® "info.title"å€ãçæããŒãã®ååãšããŠäœ¿çšããŸãã ããŒããžã§ãã¬ãŒã¿ã¯ãnpmã¢ãžã¥ãŒã«ãšNode-REDããŒãã§å©çšã§ããé©åãªååãå€æããããã«ã倧æåãšã¹ããŒã¹ããã€ãã³ã«çœ®ãæããŸãã
{
"swagger": "2.0",
"info": {
"description": "This is a sample server Petstore server.",
"version": "1.0.0",
"title": "Swagger Petstore", <- ããŒããžã§ãã¬ãŒã¿ã¯ããã®å€ããswagger-petstoreãã«å€æããããŒãåãšããŠäœ¿çšããŸãã
"license": {
"name": "Apache 2.0",
"url": "http://www.apache.org/licenses/LICENSE-2.0.html"
}
},
"host": "petstore.swagger.io",
"basePath": "/v2",
"schemes": [
"https"
],
...
}
ããã©ã«ãåãå€æŽããå Žåã¯ã--nameãªãã·ã§ã³ã䜿çšããŠããŒãåãèšå®ã§ããŸãã ç¹ã«ã"info.title"ã®å€ã«ã¢ã«ãã¡ããããšæ°åã®ä»£ããã«2ãã€ãæåãå«ãå ŽåãããŒããžã§ãã¬ãŒã¿ãããŒããæ£ããçæã§ããªãããã--nameãªãã·ã§ã³ã䜿çšããŠããŒãåãæå®ããŸãã
node-red-nodegen http://petstore.swagger.io/v2/swagger.json --name new-node-name
ããã©ã«ãã§ã¯ãããŒããžã§ãã¬ãŒã¿ã¯ã¢ãžã¥ãŒã«ã®ããŒãžã§ã³çªå·ãšã㊠"info.version"å€ã䜿çšããŸãã
{
"swagger": "2.0",
"info": {
"description": "This is a sample server Petstore server.",
"version": "1.0.0", <- ããŒããžã§ãã¬ãŒã¿ã¯ãã®ããŒãžã§ã³çªå·ãã¢ãžã¥ãŒã«ããŒãžã§ã³çªå·ãšããŠäœ¿çšããŸãã
"title": "Swagger Petstore",
"license": {
"name": "Apache 2.0",
"url": "http://www.apache.org/licenses/LICENSE-2.0.html"
}
},
"host": "petstore.swagger.io",
"basePath": "/v2",
"schemes": [
"https"
],
...
}
Swaggerã®ããŒãžã§ã³çªå·ãã€ã³ã¯ãªã¡ã³ãããã«ã¢ãžã¥ãŒã«ã®ããŒãžã§ã³çªå·ãæŽæ°ããå Žåã¯ã--versionãªãã·ã§ã³ãæå®ããŸãã ç¹ã«ã"npm publish"ã³ãã³ãã䜿çšããŠã以åå ¬éããã¢ãžã¥ãŒã«ãšåãããŒãžã§ã³çªå·ãæã€ã¢ãžã¥ãŒã«ãå ¬éãããšã競åãšã©ãŒãçºçããŸãã ãã®å Žåãã¢ãžã¥ãŒã«ã®ããŒãžã§ã³çªå·ãæŽæ°ããã«ã¯ã--versionãªãã·ã§ã³ãæå®ããŸãã
node-red-nodegen http://petstore.swagger.io/v2/swagger.json --version 0.0.2
--keywordsã¯ãã¢ãžã¥ãŒã«ã®ããŒã¯ãŒãã®ããã«çšãã䟿å©ãªãªãã·ã§ã³ã§ãã ãããŒã©ã€ãã©ãªã®Webãµã€ãã§ã蚪åè ã¯ãã®ããŒã¯ãŒãã䜿çšããŠã¢ãžã¥ãŒã«ãæ€çŽ¢ããŸãã äŸãã°ã "petstore"ãããŒã¯ãŒããšããŠäœ¿çšããå Žåã¯ã--keywordsãªãã·ã§ã³ã䜿çšããŠåèªãæå®ã§ããŸãã ããã©ã«ãã§ã¯ãããŒããžã§ãã¬ãŒã¿ã¯ "node-red-nodegen"ãããŒã¯ãŒããšããŠäœ¿çšããŸãã
node-red-nodegen http://petstore.swagger.io/v2/swagger.json --keywords petstore
2ã€ä»¥äžã®ããŒã¯ãŒããè¿œå ããã«ã¯ãã³ã³ãåºåãã®ããŒã¯ãŒãã䜿çšããããšãã§ããŸãã
node-red-nodegen http://petstore.swagger.io/v2/swagger.json --keywords petstore,petshop
çæããããŒããå ¬éããåã«"--keywords node-red"ãæå®ãããšãããŒãã¯ãããŒã©ã€ãã©ãªã«ç»é²ã§ããNode-REDãããŒãšãã£ã¿ã§ããŒããã€ã³ã¹ããŒã«ã§ããŸãã
node-red-nodegen http://petstore.swagger.io/v2/swagger.json --keywords petstore,petshop,node-red
Node-REDãããŒãšãã£ã¿ã®ãã¬ããã§ã¯ãçæããããŒãã¯ããã©ã«ããšããŠæ©èœã«ããŽãªã«å ¥ããŸãã ã«ããŽãªãå€æŽããããã«ããŽãªåã«è£œååã䜿çšããããããå Žåã¯ã--categoryãªãã·ã§ã³ãçšããŸãã äŸãã°ã次ã®ã³ãã³ããåºåããããŒãã¯ãNode-REDãããŒãšãã£ã¿ã®ãåæãã«ããŽãªã«å ¥ããŸãã
node-red-nodegen http://petstore.swagger.io/v2/swagger.json --category analysis
çŸåšãããŒããžã§ãã¬ãŒã¿ã¯ãçæããããŒãã®ã¢ã€ã³ã³ãã¡ã€ã«ãæå®ããããã®--iconãªãã·ã§ã³ããµããŒãããŠããŸããã ãããã£ãŠãã¢ã€ã³ã³ãã¡ã€ã«ãæåã§å€æŽããŸãã ïŒå°æ¥ã®ããŒãžã§ã³ã®ããŒããžã§ãã¬ãŒã¿ã¯ã--iconãªãã·ã§ã³ããµããŒãããäºå®ã§ãïŒ ããã©ã«ãã®ã¢ã€ã³ã³ãã¡ã€ã«ã¯ "icons/icon.png"ã«ããããããã®ã¢ã€ã³ã³ãã¡ã€ã«ãäžæžãããŸãã
mv new-icon.png node-red-contrib-swagger-petstore/icons/icon.png
å ¬åŒããã¥ã¡ã³ãã®éããã¢ã€ã³ã³ã¯éæãªèæ¯äžã«çœè²ã§è¡šç€ºããPNGåã¯GIFãã¡ã€ã«ã§ãã ã¢ã€ã³ã³ã®ãµã€ãºã20 x 30ã§ãªããã°ãªããŸããã
çŸåšã®ããŒãžã§ã³ã®ããŒããžã§ãã¬ãŒã¿ã¯ãçæããããŒãã®è²ãæå®ãã--colorãªãã·ã§ã³ããµããŒãããŠããŸããã ãã®ãããçæããããŒãã®è²èšå®ãæåã§å€æŽããŸãã ïŒå°æ¥ã®ããŒãžã§ã³ã®ããŒããžã§ãã¬ãŒã¿ã¯ã--colorãªãã·ã§ã³ãã·ã§ã³ããµããŒãããäºå®ã§ãïŒ
vi node-red-contrib-swagger-petstore/node.html
<script type="text/javascript">
RED.nodes.registerType('swagger-petstore', {
category: 'function',
color: '#89bf04', <- ããŒãã®è²ãå€æŽããå Žåã¯ããã®å€ãå€æŽ
defaults: {
method: { value: "" },
...
"RED.nodes.registerType()"ã¯ã"color:"#C0DEED""ãšããè²ã®èšå®ãæã£ãŠããŸãã ããŒãã®è²ãå€æŽããã«ã¯ã ãã®"#C0DEED"ãããŒãã®è²ãä»ã®16é²æ°ã®æååã«çœ®ãæããŸãã
ããŒããžã§ãã¬ãŒã¿ã¯ãSwaggerã®æ¬¡ã®å€ã䜿çšããŠãæ å ±ã¿ãã«ããŒãã®æ å ±ãèªåçã«çæããŸãã
- info.description : ããŒãã®èª¬æ
- paths.[path].[http method].summary : ã¡ãœããã®èª¬æ
- paths.[path].[http method].operationId : ã¡ãœããå
{
"swagger": "2.0",
"info": {
"description": "This is a sample server Petstore server.", <- ããŒããžã§ãã¬ãŒã¿ã¯ããã®å€ãããŒãã®èª¬æãšããŠäœ¿çš
"version": "1.0.0",
"title": "Swagger Petstore",
"license": {
"name": "Apache 2.0",
"url": "http://www.apache.org/licenses/LICENSE-2.0.html"
}
},
"host": "petstore.swagger.io",
"basePath": "/v2",
"schemes": [
"https"
],
...
"paths": {
"/pet": {
"post": {
"tags": [
"pet"
],
"summary": "Add a new pet to the store", <- ããŒããžã§ãã¬ãŒã¿ã¯ããã®å€ãã¡ãœããã®èª¬æãšããŠäœ¿çš
"description": "",
"operationId": "addPet", <- ããŒããžã§ãã¬ãŒã¿ã¯ãã®å€ãã¡ãœããåãšããŠäœ¿çšããŸãã
...
}
æ å ±ã¿ãã®ããŒãæ å ±ãå€æŽãããå Žåã¯ãæåã§ããŒãã®HTMLãã¡ã€ã«ã®æåŸã®ã»ã¯ã·ã§ã³ãç·šéããŸãã
vi node-red-contrib-swagger-petstore/node.html
<script type="text/x-red" data-help-name="swagger-petstore">
<p>This is a sample server Petstore server.</p> <- ããŒãã®èª¬æãå€æŽ
<h2>Methods</h2>
<h3>addPet</h3> <- ã¡ãœããåãå€æŽ
<h4>Add a new pet to the store</h4> <- ã¡ãœããã®èª¬æãå€æŽ
...
<h3>deleteUser</h3>
<h4>This can only be done by the logged in user.</h4>
</script>
ããŒãã®è©³çŽ°ã説æã¯ãREADME.mdãšãããã¡ã€ã«ã«æžããŸãã ãããŒã©ã€ãã©ãªã«ããŒããå ¬éãããšããããŒã©ã€ãã©ãªã®Webãµã€ãã¯ãããŒãã®ããŒãžã§æ¬ãã¡ã€ã«ã衚瀺ããŸãã ããŒããžã§ãã¬ãŒã¿ã¯README.mdã®ãã³ãã¬ãŒããåºåããã®ã§ããã¡ã€ã«ãå€æŽããã ãã§ãã
vi node-red-contrib-swagger-petstore/README.md
node-red-contrib-swagger-petstore
=====================
Node-RED node for swagger-petstore
This is a sample server Petstore server.
Install
-------
Run the following command in your Node-RED user directory - typically `~/.node-red`
npm install node-red-contrib-swagger-petstore
ãã¹ãã±ãŒã¹ã¯ãæ¬çªç°å¢ã§å©çšããããŒãã®å質ãç¶æããããã«æãéèŠã§ãã ããŒããžã§ãã¬ãŒã¿ã¯ãçæãããã£ã¬ã¯ããªã®äžã«ãããã¡ã€ã« "test/node_spec.js"ã«ãã¹ãã±ãŒã¹ã®ãã³ãã¬ãŒããã¡ã€ã«ãåºåããŸãã ãã¹ãã±ãŒã¹ãã¡ã€ã«ã§ã¯ã以äžã®ïŒ1ïŒãïŒ2ïŒãïŒ3ïŒã®3è¡ãå€æŽããŸãã ãããSwaggerã®"info"å€ã«ãã¹ãåãå«ãŸãªãå Žåã¯ãåãã¹ãã±ãŒã¹ã«æåã§ãã¹ãåãïŒ4ïŒã«èšè¿°ããŸãã
vi node-red-contrib-swagger-petstore/test/node_spec.js
it('should handle addPet()', function (done) {
var flow = [
{ id: 'n1', type: 'swagger-petstore', name: 'swagger-petstore',
method: 'addPet',
addPet_body: '<node property>', // (1) ããŒãã®ããããã£ãå®çŸ©
wires: [['n3']]
},
{ id: 'n3', type: 'helper' }
];
helper.load(node, flow, function () {
var n3 = helper.getNode('n3');
var n1 = helper.getNode('n1');
n3.on('input', function (msg) {
try {
msg.should.have.property('payload', { "id": 4513 }); // (3) åºåã¡ãã»ãŒãžãå®çŸ©
done();
} catch (e) {
done(e);
}
});
n1.receive({ payload: { "id": 4513 } }); // (2) å
¥åã¡ãã»ãŒãžãå®çŸ©
});
});
ãã®äŸã§ã¯ãçæããããŒãã¯ãããã¹ãã¢ã®REST APIã«ããŒã¿"{ "id": 4513 }"ãéä¿¡ããŸãã ãããŠãREST APIã¯åãããŒã¿"{ "id": 4513 }"ãæ»ããŸãã ãããã£ãŠãå ¥åã¡ãã»ãŒãžãšåºåã¡ãã»ãŒãžã¯åãã§ãã ãã¹ãã±ãŒã¹ãå®è¡ãããå Žåã¯ãããŒããçæãããã£ã¬ã¯ããªã®äžã§"npm test"ã³ãã³ããå®è¡ããŸãã
cd node-red-contrib-swagger-petstore
npm install
npm test
ããã©ã«ãã§ã¯ãããŒããžã§ãã¬ãŒã¿ã¯è±èªãæ¥æ¬èªãäžåœèªããã€ãèªã®ãã³ãã¬ãŒããã¡ã€ã«ãåºåããŸãã ããŒãããããã£ã®å€èšèªå¯Ÿå¿ããããå Žåã¯ããã©ã¡ãŒã¿ã®èšèªã¡ãã»ãŒãžããããã®ãã¡ã€ã«ã«è¿œå ããŸãã
vi node-red-contrib-swagger-petstore/locales/ja/node.json
{
"SwaggerPetstore": {
"label": {
"service": "ãµãŒãã¹",
"method": "ã¡ãœãã",
"host": "ãã¹ã",
"header": "ããã",
"value": "å€",
"isQuery": "ã¯ãšãª"
},
"status": {
"requesting": "èŠæ±äž"
},
"parameters": {
"addPet": "addPet",
"body": "body",
"updatePet": "updatePet",
"findPetsByStatus": "findPetsByStatus",
...
"optionalParameters": "ä»»æé
ç®"
}
}
}
ããŒããäžéšã®èšèªããµããŒãããªãå Žåã¯ãèšèªãã£ã¬ã¯ããªãåé€ããŸãã ïŒäŸãã°ãäžåœèªããµããŒãããããªãå Žåã¯ããzh-CNããã£ã¬ã¯ããªããšåé€ããŠãã ããïŒ
functionããŒãã«JavaScriptã³ãŒããèšè¿°ããåŸãfunctionããŒãã® "ã©ã€ãã©ãªãžä¿å..."ã¡ãã¥ãŒã䜿çšããŠãJavaScriptã³ãŒããjsãã¡ã€ã«ãšããŠæžãåºããŸãã ããŒããžã§ãã¬ãŒã¿ã¯functionããŒãåãçæããŒãã®ååãšããŠäœ¿çšãããããfunctionããŒãããšã¯ã¹ããŒãããåã«ããŒãåãå ¥åããæ¹ãããã§ãããã Node-REDã¯ãjsãã¡ã€ã«ã"/.node-red/lib/functions/"ãã£ã¬ã¯ããªã«ä¿åããŸãã ãããã£ãŠããã®ãã£ã¬ã¯ããªãšãã¡ã€ã«ãã¹ãã³ãã³ãã©ã€ã³ã®åŒæ°ãšããŠæå®ããŸãã
(1) functionããŒããjsãã¡ã€ã«ãšããŠãšã¯ã¹ããŒã
(2) node-red-nodegenã³ãã³ãã䜿çšããŠããŒããçæ
node-red-nodegen ~/.node-red/lib/function/lower-case.js
Node-REDãŠãŒã¶ã¯éåžžã以äžã®æé ã§çæããããŒããNode-REDãããŒãšãã£ã¿ã®ãã¬ããã«ã€ã³ããŒãããŸãã
(3) çæããããŒãã®ãã£ã¬ã¯ããªã«ãã£ã¬ã¯ããªãå€æŽ
cd node-red-contrib-lower-case
(4) ã·ã³ããªãã¯ãªã³ã¯ãæºå
sudo npm link
(5) ã«ã¬ã³ããã£ã¬ã¯ããªãNode-REDã®ããŒã ãã£ã¬ã¯ããªã«å€æŽããŸãïŒéåžžãNode-REDã®ããŒã ãã£ã¬ã¯ããªã¯ãããŒã ãã£ã¬ã¯ããªã®äžã®".node-red"ã§ãïŒ
cd ~/.node-red
(6) ã·ã³ããªãã¯ãªã³ã¯ãäœæ
npm link node-red-contrib-lower-case
(7) Node-REDãèµ·å
node-red
(8) Node-REDãããŒãšãã£ã¿ã«ã¢ã¯ã»ã¹ (http://localhost:1880)
-> çæãããããŒããNode-REDãããŒãšãã£ã¿ã®ãã¬ããã«è¡šç€ºãããŸãã
(9) çæãããããŒããã¯ãŒã¯ã¹ããŒã¹ã«ãã©ãã°ã¢ã³ããããã
(10) Node-REDãããŒãšãã£ã¿ã§ãããŒãäœæ
-> injectå ¥ããŒããçæãããããŒãããã³debugããŒããããªããããŒããæåã®ã¹ãããã«é©ããŠããŸãã
(11) ãããŒãå®è¡
-> ãã®äŸã§ã¯ãinjectããŒãã®ãã¿ã³ãã¯ãªãã¯ãããšãåä¿¡ããããŒã¿ããããã°ã¿ãã«è¡šç€ºããŸãã
çæããããŒããã«ã¹ã¿ãã€ãºããå Žåã¯ã次ã®æé ãã³ãã³ãã©ã€ã³ãªãã·ã§ã³ã圹ç«ã¡ãŸãã
ããŒããžã§ãã¬ãŒã¿ã¯ãã¢ãžã¥ãŒã«åã®ããã©ã«ãã®ãã¬ãã£ãã¯ã¹ãšã㊠"node-red-contrib-"ã䜿çšããŸãã ãããã£ãŠãããŒãåã "lower-case"ã®å Žåãã¢ãžã¥ãŒã«å㯠"node-red-contrib-lower-case"ã«ãªããŸãã ããã©ã«ãã®ã¢ãžã¥ãŒã«åãå€æŽãããå Žåã¯ã--moduleåã¯--prefixãªãã·ã§ã³ã䜿çšããŠã¢ãžã¥ãŒã«åãæå®ã§ããŸãã
node-red-nodegen ~/.node-red/lib/function/lower-case.js --module node-red-node-lower-case
node-red-nodegen ~/.node-red/lib/function/lower-case.js --prefix node-red-node
functionããŒãã®å ŽåãfunctionããŒãå ã®ããŒãåããçæãããããŒãã®ããŒãåãšããŠäœ¿çšããŸãã ããããã©ã«ãã®ããŒãåãå€æŽãããå Žåã¯ã--nameãªãã·ã§ã³ã䜿çšããŠããŒãåãèšå®ããŸãã
node-red-nodegen ~/.node-red/lib/function/lower-case.js --name new-node-name
ããã©ã«ãã§ã¯ãã¢ãžã¥ãŒã«ã®ããŒãžã§ã³çªå·ã¯åžžã«"0.0.1"ã§ãã ã¢ãžã¥ãŒã«ã®ããŒãžã§ã³çªå·ãæŽæ°ãããšãã¯ã--versionãªãã·ã§ã³ãæå®ããŸãã ç¹ã«ã"npm publish"ã³ãã³ãã䜿çšããŠã以åå ¬éããã¢ãžã¥ãŒã«ãšåãããŒãžã§ã³çªå·ãæã€ã¢ãžã¥ãŒã«ãå ¬éãããšã競åãšã©ãŒãçºçããŸãã ãã®å Žåãã¢ãžã¥ãŒã«ã®ããŒãžã§ã³çªå·ãæŽæ°ããã«ã¯ã--versionãªãã·ã§ã³ãæå®ããŸãã
node-red-nodegen ~/.node-red/lib/function/lower-case.js --version 0.0.2
--keywordsã¯ããããŒã©ã€ãã©ãªäžã®ã¢ãžã¥ãŒã«ã®ããŒã¯ãŒããæå®ã§ãã䟿å©ãªãªãã·ã§ã³ã§ãã ãããŒã©ã€ãã©ãªã®Webãµã€ãã§ã¯ã蚪åè ã¯ãã®ããŒã¯ãŒãã䜿çšããŠã¢ãžã¥ãŒã«ãæ€çŽ¢ããŸãã äŸãã°ãããŒã¯ãŒããšããŠ"lower-case"ã䜿çšããå Žåã¯ã--keywordsãªãã·ã§ã³ã䜿çšããŠãã®åèªãæå®ã§ããŸãã ããã©ã«ãã§ã¯ãããŒããžã§ãã¬ãŒã¿ã¯"node-red-nodegen"ãããŒã¯ãŒããšããŠäœ¿çšããŸãã
node-red-nodegen ~/.node-red/lib/function/lower-case.js --keywords lower-case
2ã€ä»¥äžã®ããŒã¯ãŒããè¿œå ããã«ã¯ãã³ã³ãåºåãã®ããŒã¯ãŒãã䜿çšããããšãã§ããŸãã
node-red-nodegen ~/.node-red/lib/function/lower-case.js --keywords lower-case,function
çæããããŒããå ¬éããåã« "--keywords node-red"ãæå®ãããšãããŒãã¯ãããŒã©ã€ãã©ãªã«ç»é²ã§ããNode-REDãããŒãšãã£ã¿ã§ããŒããã€ã³ã¹ããŒã«ã§ããŸãã
node-red-nodegen ~/.node-red/lib/function/lower-case.js --keywords lower-case,function,node-red
Node-REDãããŒãšãã£ã¿ã®ãã¬ããã§ã¯ãçæããããŒãã¯ããã©ã«ããšããŠæ©èœã«ããŽãªã«å ¥ããŸãã ã«ããŽãªãå€æŽããããã«ããŽãªåã«è£œååã䜿çšããããããå Žåã¯ã--categoryãªãã·ã§ã³ãçšããŸãã äŸãã°ã次ã®ã³ãã³ããåºåããããŒãã¯ãNode-REDãããŒãšãã£ã¿ã®ãåæãã«ããŽãªã«å ¥ããŸãã
node-red-nodegen ~/.node-red/lib/function/lower-case.js --category analysis
çŸåšãããŒããžã§ãã¬ãŒã¿ã¯ãçæããããŒãã®ã¢ã€ã³ã³ãã¡ã€ã«ãæå®ããããã®--iconãªãã·ã§ã³ããµããŒãããŠããŸããã ãããã£ãŠãã¢ã€ã³ã³ãã¡ã€ã«ãæåã§å€æŽããŸãã ïŒå°æ¥ã®ããŒãžã§ã³ã®ããŒããžã§ãã¬ãŒã¿ã¯ã--iconãªãã·ã§ã³ããµããŒãããäºå®ã§ãïŒ ããã©ã«ãã®ã¢ã€ã³ã³ãã¡ã€ã«ã¯ "icons/icon.png"ã«ããããããã®ã¢ã€ã³ã³ãã¡ã€ã«ãäžæžãããŸãã
mv new-icon.png node-red-contrib-lower-case/icons/icon.png
å ¬åŒããã¥ã¡ã³ãã®éããã¢ã€ã³ã³ã¯éæãªèæ¯äžã«çœè²ã§è¡šç€ºããPNGåã¯GIFãã¡ã€ã«ã§ãã ã¢ã€ã³ã³ã®ãµã€ãºã20 x 30ã§ãªããã°ãªããŸããã
çŸåšã®ããŒãžã§ã³ã®ããŒããžã§ãã¬ãŒã¿ã¯ãçæããããŒãã®è²ãæå®ãã--colorãªãã·ã§ã³ããµããŒãããŠããŸããã ãã®ãããçæããããŒãã®è²èšå®ãæåã§å€æŽããŸãã ïŒå°æ¥ã®ããŒãžã§ã³ã®ããŒããžã§ãã¬ãŒã¿ã¯ã--colorãªãã·ã§ã³ãã·ã§ã³ããµããŒãããäºå®ã§ãïŒ
vi node-red-contrib-lower-case/node.html
<script type="text/javascript">
RED.nodes.registerType('lower-case',{
color:"#C0DEED",
category: 'function',
defaults: {
name: {value:""},
},
inputs:1,
outputs: 1,
icon: "icon.png",
label: function() {
return this.name || 'lower-case';
}
});
</script>
"RED.nodes.registerType()"ã¯ã"color:"#C0DEED""ãšããè²ã®èšå®ãæã£ãŠããŸãã ããŒãã®è²ãå€æŽããã«ã¯ã ãã®"#C0DEED"ãããŒãã®è²ãä»ã®16é²æ°ã®æååã«çœ®ãæããŸãã
ããŒããžã§ãã¬ãŒã¿ã¯ããŒãæ å ±ã®ãã³ãã¬ãŒããnode.htmlãã¡ã€ã«ã«åºåããŸãã ããŒããšãšãã«ãã³ãã¬ãŒããå€æŽããŸãã ïŒå°æ¥ã®ããŒãžã§ã³ã®Node-REDãšããŒããžã§ãã¬ãŒã¿ã§ã¯ãããŒãéçºè ã¯ããŒãèšè¿°ããããã£ã䜿çšããŠãããŒãæ å ±ãæå®ã§ããŸãïŒ
vi node-red-contrib-lower-case/node.html
<script type="text/x-red" data-help-name="lower-case">
<p>Summary of the node.</p>
<h3>Inputs</h3>
<dl class="message-properties">
<dt>payload<span class="property-type">object</span></dt>
<dd>Explanation of payload.</dd>
<dt class="optional">topic <span class="property-type">string</span></dt>
<dd>Explanation of topic.</dd>
</dl>
<h3>Outputs</h3>
<dl class="message-properties">
<dt>payload<span class="property-type">object</span></dt>
<dd>Explanation of payload.</dd>
<dt class="optional">topic<span class="property-type">string</span></dt>
<dd>Explanation of topic.</dd>
</dl>
<h3>Details</h3>
<p>Explanation of the details.</p>
<p><b>Note</b>: Note of the node.</p>
</script>
ãã³ãã¬ãŒãã«ã¯ãããŒãã®èª¬æãš3ã€ã®ã»ã¯ã·ã§ã³ã®ãµããªãŒããããŸãã Inputã»ã¯ã·ã§ã³ã«ã¯ãå ¥åããã¡ãã»ãŒãžã®æ å ±ãèšèŒããŸãã Outputã»ã¯ã·ã§ã³ã«ã¯ãåºåããã¡ãã»ãŒãžã®æ å ±ãèšèŒããŸãã Detailsã»ã¯ã·ã§ã³ã«ã¯ãçæããããŒãã®è¿œå æ å ±ãèšèŒããŸãã
ããŒãã®è©³çŽ°ã説æã¯ãREADME.mdãšãããã¡ã€ã«ã«æžããŸãã ãããŒã©ã€ãã©ãªã«ããŒããå ¬éãããšããããŒã©ã€ãã©ãªã®Webãµã€ãã¯ãããŒãã®ããŒãžã§æ¬ãã¡ã€ã«ã衚瀺ããŸãã ããŒããžã§ãã¬ãŒã¿ã¯README.mdã®ãã³ãã¬ãŒããåºåããã®ã§ããã¡ã€ã«ãå€æŽããã ãã§ãã
vi node-red-contrib-lower-case/README.md
node-red-contrib-lower-case
=====================
Node-RED node for lower case
Install
-------
Run the following command in your Node-RED user directory - typically `~/.node-red`
npm install node-red-contrib-lower-case
ãã¹ãã±ãŒã¹ã¯ãæ¬çªç°å¢ã§äœ¿çšããããŒãã®å質ãç¶æããããã«æãéèŠã§ãã ããŒããžã§ãã¬ãŒã¿ã¯ãçæãããã£ã¬ã¯ããªã®äžã«ãããã¡ã€ã«"test/node_spec.js"ã«ãã¹ãã±ãŒã¹ã®ãã³ãã¬ãŒããã¡ã€ã«ãåºåããŸãã ãã¹ãã±ãŒã¹ãã¡ã€ã«ã§ã¯ãïŒ1ïŒãšïŒ2ïŒã®2è¡ãä¿®æ£ããŸãã
vi node-red-contrib-lower-case/test/node_spec.js
it('should have payload', function (done) {
var flow = [
{ id: "n1", type: "lower-case", name: "lower-case", wires: [["n2"]] },
{ id: "n2", type: "helper" }
];
helper.load(node, flow, function () {
var n2 = helper.getNode("n2");
var n1 = helper.getNode("n1");
n2.on("input", function (msg) {
msg.should.have.property('payload', 'abcd'); // (2) åºåã¡ãã»ãŒãžãå®çŸ©
done();
});
n1.receive({ payload: "AbCd" }); // (1) å
¥åã¡ãã»ãŒãžãå®çŸ©
});
});
ãã®äŸã§ã¯ãçæããããŒãã¯å€§æåãå°æåã«å€æããŸãã ãããã£ãŠãå ¥åã¡ãã»ãŒãžã¯ãAbCdãã§ãããåºåã¡ãã»ãŒãžã¯ãabcdãã§ãã ãã¹ãã±ãŒã¹ãå®è¡ãããå Žåã¯ãããŒããçæãããã£ã¬ã¯ããªã®äžã§"npm test"ã³ãã³ããå®è¡ããŸãã
cd node-red-contrib-lower-case
npm install
npm test