{"id":195,"date":"2024-07-06T08:47:20","date_gmt":"2024-07-05T23:47:20","guid":{"rendered":"https:\/\/shirakawa.weblike.jp\/blog-page\/?p=195"},"modified":"2026-02-06T11:20:35","modified_gmt":"2026-02-06T02:20:35","slug":"html-css-node-js%e3%81%ae%e7%b7%b4%e7%bf%92-%e5%ae%9f%e8%b7%b5-%e9%9b%91%e5%a4%9a%e3%81%aa%e8%a8%98%e9%8c%b2","status":"publish","type":"post","link":"https:\/\/shirakawa.weblike.jp\/blog-page\/2024\/07\/06\/html-css-node-js%e3%81%ae%e7%b7%b4%e7%bf%92-%e5%ae%9f%e8%b7%b5-%e9%9b%91%e5%a4%9a%e3%81%aa%e8%a8%98%e9%8c%b2\/","title":{"rendered":"HTML\/CSS\/Node.js\u306e\u7df4\u7fd2 \u5b9f\u8df5 \u96d1\u591a\u306a\u8a18\u9332"},"content":{"rendered":"<p>HTML\/CSS\/GoLang\u306e\u7df4\u7fd2 \u5b9f\u8df5 \u96d1\u591a\u306a\u8a18\u9332<br \/>\n<a href=\"https:\/\/shirakawa.weblike.jp\/blog-page\/2022\/06\/14\/html-css-golang%e3%81%ae%e7%b7%b4%e7%bf%92-%e5%ae%9f%e8%b7%b5-%e9%9b%91%e5%a4%9a%e3%81%aa%e8%a8%98%e9%8c%b2\/\">https:\/\/shirakawa.weblike.jp\/blog-page\/2022\/06\/14&#8230;<\/a><br \/>\n\u306e\u30b3\u30fc\u30c9\u3092AI\u3067Node.js\u306b\u5909\u63db\u3057\u5b9f\u884c\u3057\u3066\u307f\u308b\u3002<br \/>\n<a href=\"https:\/\/chat.openai.com\/auth\/login\">https:\/\/chat.openai.com\/auth\/login<\/a><\/p>\n<p>GoLang\u3092Node.js\u306b\u5909\u63db\u3057\u5b9f\u884c\u3057\u3066\u3044\u308b\u3046\u3061\u306b\u81ea\u7136\u3068Express\u306e\u7df4\u7fd2\u3082\u3084\u3063\u3066\u3044\u305f\u3002\u542b\u3093\u3067\u3044\u305f\u3002<br \/>\nHTML\/CSS\/JavaScript\u306e\u7df4\u7fd2 \u5b9f\u8df5 \u96d1\u591a\u306a\u8a18\u93323.2<br \/>\n<a href=\"https:\/\/shirakawa.weblike.jp\/blog-page\/2024\/01\/07\/html-css-javascript%e3%81%ae%e7%b7%b4%e7%bf%92-%e5%ae%9f%e8%b7%b5-%e9%9b%91%e5%a4%9a%e3%81%aa%e8%a8%98%e9%8c%b23-2\/\">https:\/\/shirakawa.weblike.jp\/blog-page\/2024\/01\/07&#8230;<\/a><\/p>\n<p>practice900\/\uff5epractice999\/\uff1a<br \/>\n\u6700\u521d\u306e\u65b9\u306fnpm_init\u3059\u308b\u7a0b\u3067\u3082\u306a\u304f\u3001fmt.Printf();\u306f\u3001console.log();\u3002\u95a2\u6570\u3082\u4f3c\u305f\u3088\u3046\u306a\u3082\u306e\u3002<br \/>\nJS\u306e\u5fa9\u7fd2\u306b\u3082\u306a\u3063\u3066\u826f\u3044\u3002<\/p>\n<p>\/*************************************************************************************\/<br \/>\nGo\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u5b9f\u8df5\u5165\u9580\uff1a\u53c2\u8003\u66f8\u7c4d\uff15<br \/>\nJS\u306e\u57fa\u672c\u306f\u3001<a href=\"https:\/\/shirakawa.weblike.jp\/blog-page\/2022\/06\/19\/html-css-javascript%e3%81%ae%e7%b7%b4%e7%bf%92-%e5%ae%9f%e8%b7%b5-%e9%9b%91%e5%a4%9a%e3%81%aa%e8%a8%98%e9%8c%b2\/\">https:\/\/shirakawa.weblike.jp\/blog-page\/2022\/06\/19<\/a> \u3067\u3084\u3063\u3066\u308b\u306f\u305a\u3060\u304c\u3002\u3002<br \/>\n\u3068\u307b\u307b\u306eJS\u5165\u9580\u3082\u305d\u3053\u305d\u3053\u898b\u305f\u3002\u5fd8\u308c\u305f\u3089\u307e\u305f\u898b\u308b\u3002<br \/>\nGo\u306fbuild\u3057\u305f\u30d0\u30a4\u30ca\u30ea\u3092\u5b9f\u884c\u3059\u308b\u3068\u3001(init()\u306e\u5f8c\u306b)main()\u304b\u3089\u5b9f\u884c\u3059\u308b\u3002Node.js\u306fmain()\u3092<br \/>\n\u5b9a\u7fa9\u3057\u305f\u5834\u5408\u306f\u3001\u95a2\u6570\u3092\u30b3\u30fc\u30eb\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u3002<\/p>\n<p>\u7b2c\uff11\u7ae0 Go\u8a00\u8a9e\u306fWeb\u30a2\u30d7\u30ea\u958b\u767a\u306b\u6700\u9069\u306a\u8a00\u8a9e (2024.07)<br \/>\n(HTTP\u901a\u4fe1\u306e\u304a\u3055\u3089\u3044\u306fGoLang\u306e\u7df4\u7fd2\u30e1\u30e2 <a href=\"https:\/\/shirakawa.weblike.jp\/blog-page\/2022\/06\/14\/html-css-golang%e3%81%ae%e7%b7%b4%e7%bf%92-%e5%ae%9f%e8%b7%b5-%e9%9b%91%e5%a4%9a%e3%81%aa%e8%a8%98%e9%8c%b2\/\">https:\/\/shirakawa.weblike.jp\/blog-page\/2022\/06\/14&#8230;<\/a> \u3092\u8aad\u3080\u306e\u307f\u306b\u7559\u3081\u305f)<\/p>\n<p>\u7b2c\uff12\u7ae0<br \/>\nAmazon\u8a55\u4fa1\u53c2\u8003\u306b\u5b66\u7fd2\u306e\u9806\u756a\u3092\u5909\u66f4\u3002\u3053\u306e\u7ae0\u306f\u5f8c\u56de\u3057\u3002<\/p>\n<p>\u7b2c\uff13\u7ae0 net\/http\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u4f7f\u3063\u305f\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u53d7\u3051\u4ed8\u3051<br \/>\nNode.js\u3067\u306f\u3001\u30dd\u30fc\u30c8\u756a\u53f7\u304c\u6307\u5b9a\u3055\u308c\u3066\u3044\u306a\u3044\u5834\u5408\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u30dd\u30fc\u30c88080\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002<br \/>\nconst http = require(&#8216;http&#8217;);<br \/>\nfunction handler(req, res) { \/\/Go\u3068\u4f3c\u305f\u3088\u3046\u306a\u611f\u3058\u306b\u30cf\u30f3\u30c9\u30e9\u95a2\u6570\u5316\u3059\u308b<br \/>\nres.writeHead(200, {&#8216;Content-Type&#8217;: &#8216;text\/plain&#8217;});<br \/>\nres.end(); \/\/\u3053\u308c\u304cres\u9001\u4fe1\u30c8\u30ea\u30ac\u30fc\u3089\u3057\u3044<br \/>\nNode.js\u6a19\u6e96\u30e9\u30a4\u30d6\u30e9\u30ea\u3067\u306f\u3001Go\u8a00\u8a9e\u306ex509.Certificate\u306b\u76f8\u5f53\u3059\u308b\u76f4\u63a5\u7684\u306aAPI\u304c\u306a\u3044\u305f\u3081\u3001<br \/>\n\u30b5\u30fc\u30c9\u30d1\u30fc\u30c6\u30a3\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u4f7f\u7528\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<br \/>\nnode-forge\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u4f7f\u3046\u3053\u3068\u3067\u3001\u81ea\u5df1\u7f72\u540dSSL\u8a3c\u660e\u66f8\u3068\u30b5\u30fc\u30d0\u306e\u79d8\u5bc6\u9375\u3092\u751f\u6210\u3067\u304d\u307e\u3059\u3002<br \/>\n$ npm install node-forge<br \/>\nconst forge = require(&#8216;node-forge&#8217;);<br \/>\nGo\u8a00\u8a9e\u3067\u306eHttpRouter\u3092\u4f7f\u3063\u305f\u5b9f\u88c5\u306f\u3001Node.js\u3067\u306f\u3001express\u30e2\u30b8\u30e5\u30fc\u30eb\u3068express.Router\u3092<br \/>\n\u4f7f\u7528\u3057\u3066\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u3092\u884c\u3044\u307e\u3059\u3002<br \/>\n$ npm install express<br \/>\nconst express = require(&#8216;express&#8217;);<br \/>\nNode.js\u3067\u306fHTTP\/2\u30b5\u30fc\u30d0\u30fc\u3092\u69cb\u7bc9\u3059\u308b\u305f\u3081\u306b\u3001\u6a19\u6e96\u306ehttp2\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002<br \/>\nconst http2 = require(&#8216;http2&#8217;);<br \/>\nGo\u306f\u69cb\u9020\u4f53\u306e\u5b9a\u7fa9\u6642\u306b\u95a2\u6570\u3092\u542b\u3081\u308b\u4e8b\u306f\u3067\u304d\u306a\u3044\u304c\u3001JS\u306f(\u30af\u30e9\u30b9\u3067)\u3067\u304d\u308b\u3057Go\u540c\u69d8\u8ffd\u52a0\u3082\u3067\u304d\u308b\u3002<br \/>\nNode.js\u3067\u306f\u3001append\u95a2\u6570\u306e\u4ee3\u308f\u308a\u306b\u914d\u5217\u306epush\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u307e\u305f\u3001\u914d\u5217\u306e\u9577\u3055\u306f<br \/>\nlength\u30d7\u30ed\u30d1\u30c6\u30a3\u3067\u53d6\u5f97\u3067\u304d\u307e\u3059\u304c\u3001\u5bb9\u91cf\u306e\u6982\u5ff5\u306fJavaScript\u306e\u914d\u5217\u306b\u306f\u5b58\u5728\u3057\u306a\u3044\u305f\u3081\u3001<br \/>\n\u305d\u306e\u90e8\u5206\u306f\u7701\u7565\u3057\u307e\u3059\u3002Go\u306e\u30b9\u30e9\u30a4\u30b9\u306f\u666e\u901a\u306b\u914d\u5217\u306b\u5909\u63db\u3055\u308c\u305f\u3002append()\u306f\u30e1\u30f3\u30d0\u95a2\u6570\u3067\u306f\u306a\u304f<br \/>\n\u30b9\u30e9\u30a4\u30b9\u7528\u306e?\u7d44\u8fbc\u307f\u95a2\u6570\u3002<br \/>\n\/\/Go<br \/>\nt := time.Now(); \/\/ \u73fe\u5728\u306e\u6642\u9593\u3092\u53d6\u5f97.<br \/>\nfmt.Println(t);<br \/>\nduration := time.Now().Sub(t); \/\/ \u73fe\u5728\u306e\u6642\u9593\u3068 t \u306e\u5dee\u5206\u3092\u8a08\u7b97.<br \/>\nfmt.Println(duration);<br \/>\n$ .\/time_now_div<br \/>\n2024-07-21 xx:yy:10.797096849 +0900 JST m=+0.000063092<br \/>\n282.342&#181;s<br \/>\n\/\/JS<br \/>\nlet t = new Date()<br \/>\nconsole.log(t)<br \/>\nlet duration = (new Date()) &#8211; t<br \/>\nconsole.log(duration + &#8220;ms&#8221;)<br \/>\n$ node time_now_div.js<br \/>\n2024-07-21Txx:yy:16.999Z<br \/>\n5ms<br \/>\nawait\u306fJavaScript\uff08\u304a\u3088\u3073TypeScript\uff09\u306e\u975e\u540c\u671f\u51e6\u7406\u3092\u6271\u3046\u305f\u3081\u306e\u69cb\u6587\u3067\u3001\u7279\u306basync\u95a2\u6570\u5185\u3067<br \/>\n\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002await\u3092\u4f7f\u3046\u3068\u3001Promise\u306e\u89e3\u6c7a\u3092\u5f85\u3064\u3053\u3068\u304c\u3067\u304d\u3001\u975e\u540c\u671f\u95a2\u6570\u306e\u7d50\u679c\u3092\u7c21\u5358\u306b<br \/>\n\u6271\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002await\u3092\u4f7f\u7528\u305b\u305a\u306bPromise\u30c1\u30a7\u30fc\u30f3\u3092\u4f7f\u3046\u5834\u5408\u3068\u6bd4\u8f03\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002<br \/>\n<a href=\"https:\/\/shirakawa.weblike.jp\/blog-page\/2026\/02\/05\/%e5%90%8c%e6%9c%9f%e5%87%a6%e7%90%86%e9%80%9a%e5%b8%b8%e3%81%ae%e9%96%a2%e6%95%b0%e3%81%a8%e9%9d%9e%e5%90%8c%e6%9c%9f%e5%87%a6%e7%90%86%e3%83%96%e3%83%ad%e3%83%83%e3%82%af%e7%8a%b6%e6%85%8b\/\">https:\/\/shirakawa.weblike.jp\/blog-page\/2026\/02\/05&#8230;<\/a><\/p>\n<p>\u7b2c\uff14\u7ae0 \u30ea\u30af\u30a8\u30b9\u30c8\u306e\u30c7\u30fc\u30bf\u69cb\u9020\u3068\u305d\u306e\u51e6\u7406<br \/>\nconst h = req.headers;<br \/>\nres.writeHead(200, { &#8216;Content-Type&#8217;: &#8216;application\/json&#8217; });<br \/>\nif (req.url === &#8216;\/headers&#8217; &amp;&amp; req.method === &#8216;GET&#8217;) {<br \/>\napp.get(&#8216;\/headers&#8217;, (req, res) =&gt; { \/\/express<br \/>\nconst parsedUrl = url.parse(req.url, true); \/\/ \/headers?hello=world&amp;thread=123 \u3068\u304b\u306e\u5834\u5408<br \/>\nif (parsedUrl.pathname === &#8216;\/headers&#8217;) {<br \/>\nreq.on(&#8216;data&#8217;, chunk =&gt; { body += chunk; });\u306fNode.js\u306ehttp\u30e2\u30b8\u30e5\u30fc\u30eb\u306b\u304a\u3051\u308b\u30a4\u30d9\u30f3\u30c8<br \/>\n\u99c6\u52d5\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u4e00\u4f8b\u3067\u3059\u3002\u3053\u306e\u30b3\u30fc\u30c9\u306f\u3001HTTP\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u30dc\u30c7\u30a3\u30c7\u30fc\u30bf\u3092\u975e\u540c\u671f\u306b\u53d7\u4fe1<br \/>\n\u3059\u308b\u305f\u3081\u306e\u3082\u306e\u3067\u3059\u3002<br \/>\n\u5177\u4f53\u7684\u306b\u306f\u3001req.on(&#8216;data&#8217;, callback)\u306f\u3001\u30ea\u30af\u30a8\u30b9\u30c8\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\uff08req\uff09\u304cdata\u30a4\u30d9\u30f3\u30c8\u3092<br \/>\n\u767a\u706b\u3059\u308b\u305f\u3073\u306b\u6307\u5b9a\u3055\u308c\u305f\u30b3\u30fc\u30eb\u30d0\u30c3\u30af\u95a2\u6570\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002\u30ea\u30af\u30a8\u30b9\u30c8\u30dc\u30c7\u30a3\u306e\u30c7\u30fc\u30bf\u306f\u30c1\u30e3\u30f3\u30af<br \/>\n\uff08\u5c0f\u7247\uff09\u3068\u3057\u3066\u6e21\u3055\u308c\u307e\u3059\u3002\u8907\u6570\u306e\u30c1\u30e3\u30f3\u30af\u3092\u53d7\u4fe1\u3059\u308b\u5834\u5408\u304c\u3042\u308b\u305f\u3081\u3001\u3053\u308c\u3089\u3092\u4e00\u3064\u306e\u5909\u6570\u306b<br \/>\n\u9023\u7d50\u3057\u3066\u5b8c\u5168\u306a\u30ea\u30af\u30a8\u30b9\u30c8\u30dc\u30c7\u30a3\u3092\u69cb\u6210\u3057\u307e\u3059\u3002<br \/>\nreq.on(&#8216;end&#8217;, &#8230;)\u306f\u3001\u3059\u3079\u3066\u306e\u30c7\u30fc\u30bf\u30c1\u30e3\u30f3\u30af\u304c\u53d7\u4fe1\u3055\u308c\u305f\u5f8c\u306b\u547c\u3073\u51fa\u3055\u308c\u307e\u3059\u3002<br \/>\nif (req.url === &#8216;\/body&#8217; &amp;&amp; req.method === &#8216;POST&#8217;) {<br \/>\napp.post(&#8216;\/body&#8217;, (req, res) =&gt; { \/\/express<br \/>\nconst body = req.body;<br \/>\nGo\u8a00\u8a9e\u306e\u30b3\u30fc\u30c9\u3067\u306f\u3001r.ParseForm() \u3068 r.ParseMultipartForm() \u304c\u30d5\u30a9\u30fc\u30e0\u30c7\u30fc\u30bf\u306e\u89e3\u6790\u3092<br \/>\n\u884c\u3044\u307e\u3059\u304c\u3001Node.js\u3067\u306f querystring (\u3068 formidable) \u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u4f7f\u7528\u3057\u3066\u540c\u69d8\u306e\u6a5f\u80fd\u3092\u5b9f\u73fe\u3057\u307e\u3059\u3002<br \/>\n\\<br \/>\n\u4f8b\u3048\u3070\u3001Express.js\u306e\u3001const app = express();\u306e\u3001app.post()\u306e\u3001res.end()\u306e\u5f15\u6570\u304c\u30c6\u30ad\u30b9\u30c8\u304b\u30d0\u30c3\u30d5\u30a1\u30aa\u30d6\u30b7\u30a7\u30af\u30c8\u3092\u5165\u308c\u308b\u4e8b\u306b\u306a\u3063\u3066\u3044\u308b\u306e\u306f\u3069\u306e\u30aa\u30f3\u30e9\u30a4\u30f3Doc\u3092\u898b\u308c\u3070\u5206\u304b\u308b? (-&gt;ChatGPT)<br \/>\nExpress.js\u306eres\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306f\u3001Node.js\u306ehttp.ServerResponse\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u62e1\u5f35\u3067\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001res.end()\u30e1\u30bd\u30c3\u30c9\u306e\u8a73\u7d30\u306b\u3064\u3044\u3066\u306f\u3001Node.js\u306eHTTP\u30e2\u30b8\u30e5\u30fc\u30eb\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u53c2\u7167\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<br \/>\nExpress 4.x API Reference &#8211; app.post()\u3001Node.js HTTP module &#8211; res.end()\u3001\u3067\u30b0\u30b0\u3063\u305f\uff1a<br \/>\nhttps:\/\/expressjs.com\/ja\/api.html#res.end<br \/>\nhttps:\/\/nodejs.org\/api\/http.html#http_response_end_data_encoding_callback<br \/>\nhttps:\/\/www.tohoho-web.com\/ex\/express.html<br \/>\nhttps:\/\/qiita.com\/kotaro-caffeinism\/items\/54e10de2164fa35c7141<br \/>\n\\<br \/>\nChatGPT\u306b\u5909\u63db\u3055\u305b\u305f\u3089\u3001formidable,fs,path,url\u3092require\u3057\u3066\u308b\u304c\u3001\u5b9f\u969b\u306b\u3053\u308c\u3089\u3092\u4f7f\u3063\u305f\u5b9f\u88c5<br \/>\n\u304c\u3055\u308c\u3066\u308b\u3082\u306e\u306a\u306e\u304b\u3001node.js const form = new formidable.IncomingForm();\u3001<br \/>\n\u3067\u30b0\u30b0\u3063\u305f\u3089\u3001\u307e\u3042\u4f7f\u308f\u308c\u3066\u308b\u3093\u3060\u308d\u3046\u3002(2024.08)<br \/>\nhttps:\/\/curucuru.co.jp\/blog\/20230502_nextjs_api_file_upload<br \/>\n<a href=\"https:\/\/www.koki.muhen.jp\/archives\/1716\">https:\/\/www.koki.muhen.jp\/archives\/1716<\/a><br \/>\nhttps:\/\/qiita.com\/sengok\/items\/70144a4733e9306a9960<br \/>\nhttps:\/\/zenn.dev\/masumomo\/articles\/971424e0515c71<br \/>\n\\<br \/>\n\u77e5\u3089\u306a\u3044\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3084\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u3046\u3053\u3068\u306b\u306a\u308a\u3001\u3084\u3063\u3071 VSCode\u306b\u623b\u308b\u304b\uff5e\u3001\u3068\u601d\u3063\u305f\u304c\u3001<br \/>\n\u7d50\u5c40\u3001ChatGPT\u304c\u59a5\u5f53\u306a\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3084\u30e1\u30bd\u30c3\u30c9\u3092\u6559\u3048\u3066\u304f\u308c\u308b\u306a\u3089\u3001VSCode\u306e\u88dc\u5b8c\u306f\u8981\u3089\u306a\u3044\u304b?\u3002<br \/>\n\u30a8\u30c7\u30a3\u30bf\u306fEmacs\u306e\u307e\u307e\u3067\u3044\u3044\u304b\u3002<br \/>\n\u3068\u3044\u3046\u304b\u6b63\u306b\u3053\u308c\u3001ChatGPT\u3067\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u304c\u975e\u5e38\u306b\u697d\u306b\u306a\u3063\u305f\u3001\u3067\u30b0\u30b0\u3063\u305f\uff1a<br \/>\nChatGPT\u3067\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u30d5\u30e9\u30c3\u30c8\u5316\u304c\u306f\u3058\u307e\u3063\u3066\u3044\u308b<br \/>\nhttps:\/\/ascii.jp\/elem\/000\/004\/140\/4140826\/<br \/>\n(\u4eca\u5f8c\u3082ChatGPT\u3078\u306e\u4f9d\u5b58\u304c\u7d9a\u304d\u305d\u3046\u3060\u3002ChatGPT\u304c\u5b8c\u5168\u6709\u6599\u5316\u306b\u306a\u3063\u305f\u5834\u5408\u3092\u8003\u3048\u3066\u3001\u5168\u90e8\u306e\u554f\u7b54\u3092<br \/>\n\u30e1\u30e2\u3063\u3066\u304a\u304f\u304b)<\/p>\n<p>\u7b2c\uff15\u7ae0 \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30a8\u30f3\u30b8\u30f3\u3092\u4f7f\u3063\u305f\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u8868\u793a<br \/>\nGo\u8a00\u8a9e\u306b\u306f\u3001\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30a8\u30f3\u30b8\u30f3\u3092\u4f7f\u3063\u305f\u30b3\u30f3\u30c6\u30f3\u30c4\u306e\u8868\u793a\u3001\u3068\u3044\u3046\u6a5f\u80fd\u304c\u3042\u308b\u304c\u3001Node.js\u3067\u306f\u3069\u3046\u304b\uff1f<br \/>\nNode.js\u306b\u3082\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30a8\u30f3\u30b8\u30f3\u3092\u4f7f\u7528\u3057\u3066\u30b3\u30f3\u30c6\u30f3\u30c4\u3092\u8868\u793a\u3059\u308b\u6a5f\u80fd\u304c\u3042\u308a\u307e\u3059\u3002Go\u8a00\u8a9e\u3067\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30a8\u30f3\u30b8\u30f3\u306fhtml\/template\u3084text\/template\u304c\u4ee3\u8868\u7684\u3067\u3059\u304c\u3001Node.js\u306b\u306f\u8907\u6570\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30a8\u30f3\u30b8\u30f3\u304c\u3042\u308a\u3001\u4ee3\u8868\u7684\u306a\u3082\u306e\u3068\u3057\u3066\u4ee5\u4e0b\u304c\u3042\u308a\u307e\u3059\u3002<br \/>\n1. EJS (Embedded JavaScript)<br \/>\nEJS\u306f\u3001JavaScript\u30b3\u30fc\u30c9\u3092HTML\u5185\u306b\u57cb\u3081\u8fbc\u3080\u3053\u3068\u304c\u3067\u304d\u308b\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30a8\u30f3\u30b8\u30f3\u3067\u3059\u3002<br \/>\n\u30b7\u30f3\u30d7\u30eb\u3067\u4f7f\u3044\u3084\u3059\u304f\u3001\u5b66\u7fd2\u30b3\u30b9\u30c8\u304c\u4f4e\u3044\u306e\u304c\u7279\u5fb4\u3067\u3059\u3002<br \/>\n2. Pug (\u65e7Jade)<br \/>\nPug\u306f\u30a4\u30f3\u30c7\u30f3\u30c8\u30d9\u30fc\u30b9\u3067\u66f8\u304b\u308c\u308b\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30a8\u30f3\u30b8\u30f3\u3067\u3001\u7c21\u6f54\u306b\u8a18\u8ff0\u3067\u304d\u308b\u306e\u304c\u7279\u5fb4\u3067\u3059\u3002<br \/>\nHTML\u306e\u30bf\u30b0\u3092\u7701\u7565\u3057\u3066\u66f8\u304f\u3053\u3068\u304c\u3067\u304d\u308b\u305f\u3081\u3001\u30b3\u30fc\u30c9\u304c\u8aad\u307f\u3084\u3059\u304f\u306a\u308a\u307e\u3059\u3002<br \/>\n3. Handlebars<br \/>\nHandlebars\u306fMustache\u306e\u4e0a\u4f4d\u4e92\u63db\u3067\u3001\u518d\u5229\u7528\u53ef\u80fd\u306a\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u69cb\u9020\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u307e\u3059\u3002<br \/>\n\u7279\u5fb4\u7684\u306a\u4e8c\u91cd\u306e\u4e2d\u62ec\u5f27{{ }}\u3092\u4f7f\u3063\u3066\u30c7\u30fc\u30bf\u3092\u57cb\u3081\u8fbc\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<br \/>\n\\<br \/>\nNode.js\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30a8\u30f3\u30b8\u30f3\u3092\u4f7f\u3046\u3088\u308a\u3082\u3001React.js\u3084Next.js\u3092\u4f7f\u3046\u4e8b\u306e\u65b9\u304c\u591a\u304f\u306a\u3044\u304b\uff1f<br \/>\n\u306f\u3044\u3001\u73fe\u5728\u306e\u30a6\u30a7\u30d6\u958b\u767a\u306b\u304a\u3044\u3066\u306f\u3001React.js\u3084Next.js\u306e\u3088\u3046\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u4f7f\u3046\u3053\u3068\u306e\u65b9\u304c\u4e00\u822c\u7684\u3067\u3059\u3002\u3053\u308c\u3089\u306e\u30c4\u30fc\u30eb\u306f\u3001\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30b5\u30a4\u30c9\u3067\u306e\u52d5\u7684\u306aUI\u306e\u69cb\u7bc9\u3084\u3001\u30b5\u30fc\u30d0\u30b5\u30a4\u30c9\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\uff08SSR\uff09\u3092\u5bb9\u6613\u306b\u3059\u308b\u305f\u3081\u3001\u3088\u308a\u8907\u96d1\u3067\u30a4\u30f3\u30bf\u30e9\u30af\u30c6\u30a3\u30d6\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u9069\u3057\u3066\u3044\u307e\u3059\u3002<br \/>\n\u4e00\u65b9\u3001Node.js\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30a8\u30f3\u30b8\u30f3\uff08\u4f8b: EJS, Pug, Handlebars\uff09\u306f\u3001\u6bd4\u8f03\u7684\u30b7\u30f3\u30d7\u30eb\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3084\u3001\u30b5\u30fc\u30d0\u30fc\u30b5\u30a4\u30c9\u3067\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3055\u308c\u305fHTML\u3092\u63d0\u4f9b\u3059\u308b\u7528\u9014\u306b\u9069\u3057\u3066\u3044\u307e\u3059\u3002\u305f\u3060\u3057\u3001React.js\u3084Next.js\u306e\u666e\u53ca\u306b\u3088\u308a\u3001\u3053\u308c\u3089\u306e\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30a8\u30f3\u30b8\u30f3\u306e\u4f7f\u7528\u306f\u6e1b\u5c11\u3057\u3066\u3044\u307e\u3059\u3002<br \/>\n\u305d\u306e\u7406\u7531\u306e\u4e00\u3064\u306f\u3001React.js\u3084Next.js\u304c\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u30d9\u30fc\u30b9\u306e\u8a2d\u8a08\u3092\u63a1\u7528\u3057\u3066\u304a\u308a\u3001\u518d\u5229\u7528\u53ef\u80fd\u306aUI\u90e8\u54c1\u3092\u7c21\u5358\u306b\u4f5c\u6210\u3067\u304d\u308b\u3053\u3068\u3067\u3059\u3002\u307e\u305f\u3001Next.js\u306fSSR\u3084\u9759\u7684\u30b5\u30a4\u30c8\u751f\u6210\uff08SSG\uff09\u3092\u6a19\u6e96\u3067\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u304a\u308a\u3001SEO\u306e\u6539\u5584\u3084\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u5411\u4e0a\u306b\u3082\u5f79\u7acb\u3061\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u591a\u304f\u306e\u958b\u767a\u8005\u304c\u3053\u308c\u3089\u306e\u30e2\u30c0\u30f3\u306a\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306b\u79fb\u884c\u3059\u308b\u50be\u5411\u304c\u3042\u308a\u307e\u3059\u3002<br \/>\n\\<br \/>\n\u3053\u306e\u7ae0\u306f\u5fc5\u8981\u306b\u306a\u3063\u305f\u3089\u7df4\u7fd2\u3057\u3088\u3046\u3001\u4fdd\u7559\u3002<\/p>\n<p>\u7b2c\uff12\u7ae0 Go\u30d7\u30ed\u30b0\u30e9\u30e0\u300cChitChat\u300d&#8212;\u5178\u578b\u7684\u306aGo Web\u30a2\u30d7\u30ea\u306e\u30c7\u30b6\u30a4\u30f3<br \/>\nGo\u8a00\u8a9e\u3067\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u7c21\u5358\u306aWeb\u30b5\u30fc\u30d0\u3092\u69cb\u7bc9\u3057\u305f\u304c\u3001<br \/>\nhttps:\/\/seesaawiki.jp\/lifewithslackzaurus_15_0\/d\/HTML\/CSS\/GoLang%a4%ce%ce%fd%bd%ac%20%bc%c2%c1%a9%20%bb%a8%c2%bf%a4%ca%b5%ad%cf%bf<br \/>\n\\package main<br \/>\n\\import &#8220;net\/http&#8221;<br \/>\n\\func main() {<br \/>\n\\ \/\/ \u9759\u7684\u30d5\u30a1\u30a4\u30eb\u3092\u63d0\u4f9b\u3059\u308b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u6307\u5b9a<br \/>\n\\ fs := http.FileServer(http.Dir(&#8220;.\/static&#8221;));<br \/>\n\\ \/\/ \/static\/\u30d1\u30b9\u3078\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u3092fs\u3067\u51e6\u7406\u3059\u308b\u3088\u3046\u306b\u8a2d\u5b9a<br \/>\n\\ http.Handle(&#8220;\/static\/&#8221;, http.StripPrefix(&#8220;\/static\/&#8221;, fs));<br \/>\n\\ \/\/ Web\u30b5\u30fc\u30d0\u3092\u958b\u59cb<br \/>\n\\ http.ListenAndServe(&#8220;:8080&#8221;, nil);<br \/>\n\\}<br \/>\n\u540c\u69d8\u306a\u4e8b\u304cNode.js\u3067\u3082\u3067\u304d\u308b\u306e\u304b\uff1f<br \/>\n\u306f\u3044\u3001Node.js\u3067\u3082\u540c\u69d8\u306eWeb\u30b5\u30fc\u30d0\u3092\u69cb\u7bc9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u306f\u3001Node.js\u3067\u9759\u7684\u30d5\u30a1\u30a4\u30eb\u3092\u63d0\u4f9b\u3059\u308bWeb\u30b5\u30fc\u30d0\u306e\u4f8b\u3067\u3059\u3002\u3053\u306e\u4f8b\u3067\u306f\u3001express\u3068\u3044\u3046\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u4f7f\u7528\u3057\u3066\u3044\u307e\u3059\u3002<br \/>\n\u307e\u305a\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4f5c\u6210\u3057\u3001\u5fc5\u8981\u306a\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002(\u7701\u7565)<br \/>\n\u6b21\u306b\u3001\u4ee5\u4e0b\u306e\u5185\u5bb9\u3067server.js\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<br \/>\n\\const express = require(&#8216;express&#8217;);<br \/>\n\\const path = require(&#8216;path&#8217;);<br \/>\n\\const app = express();<br \/>\n\\\/\/ \u9759\u7684\u30d5\u30a1\u30a4\u30eb\u3092\u63d0\u4f9b\u3059\u308b\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u6307\u5b9a<br \/>\n\\app.use(&#8216;\/static&#8217;, express.static(path.join(__dirname, &#8216;static&#8217;)));<br \/>\n\\\/\/ Web\u30b5\u30fc\u30d0\u3092\u958b\u59cb<br \/>\n\\app.listen(8080, () =&gt; {<br \/>\n\\ console.log(&#8216;Server is running on http:\/\/localhost:8080&#8217;);<br \/>\n\\});<br \/>\n\u3053\u308c\u3067\u3001server.js\u3092\u5b9f\u884c\u3059\u308b\u3068\u3001static\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u5185\u306e\u30d5\u30a1\u30a4\u30eb\u304c\/static\u30d1\u30b9\u3067\u63d0\u4f9b\u3055\u308c\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<br \/>\n$ node server.js<br \/>\n\u3053\u308c\u3067\u3001Go\u8a00\u8a9e\u306e\u30b5\u30fc\u30d0\u3068\u540c\u69d8\u306b\u3001Node.js\u3092\u4f7f\u7528\u3057\u3066\u9759\u7684\u30d5\u30a1\u30a4\u30eb\u3092\u63d0\u4f9b\u3059\u308bWeb\u30b5\u30fc\u30d0\u304c\u52d5\u4f5c\u3057\u307e\u3059\u3002<br \/>\n\\<br \/>\nPHP\u3067\u306fPOST\u3067\u53d7\u3051\u53d6\u3063\u305f\u5909\u6570\u306b\u30b5\u30cb\u30bf\u30a4\u30ba\u51e6\u7406\u3092\u884c\u3046\u304c\u3001Node.js\u3067\u306f\u884c\u3046\u5fc5\u8981\u304c\u3042\u308b\u304b\uff1f<br \/>\n\u306f\u3044\u3001Node.js\u3067\u3082POST\u3067\u53d7\u3051\u53d6\u3063\u305f\u30c7\u30fc\u30bf\u306b\u30b5\u30cb\u30bf\u30a4\u30ba\u51e6\u7406\u3092\u884c\u3046\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u30b5\u30cb\u30bf\u30a4\u30ba\u306f\u3001\u53d7\u3051\u53d6\u3063\u305f\u30c7\u30fc\u30bf\u304c\u60aa\u610f\u306e\u3042\u308b\u30b3\u30fc\u30c9\u3084\u4e0d\u6b63\u306a\u5165\u529b\u3067\u306a\u3044\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3092\u4fdd\u3064\u305f\u3081\u306b\u91cd\u8981\u3067\u3059\u3002<br \/>\nPHP\u3068\u540c\u69d8\u306b\u3001Node.js\u3067\u3082\u30e6\u30fc\u30b6\u30fc\u304b\u3089\u306e\u5165\u529b\u3092\u305d\u306e\u307e\u307e\u4f7f\u7528\u3059\u308b\u3068\u3001XSS\uff08\u30af\u30ed\u30b9\u30b5\u30a4\u30c8\u30b9\u30af\u30ea\u30d7\u30c6\u30a3\u30f3\u30b0\uff09\u3084SQL\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u306a\u3069\u306e\u653b\u6483\u306b\u5bfe\u3057\u3066\u8106\u5f31\u306b\u306a\u308a\u307e\u3059\u3002\u305d\u306e\u305f\u3081\u3001\u30b5\u30cb\u30bf\u30a4\u30ba\u51e6\u7406\u3084\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u3092\u884c\u3046\u3053\u3068\u304c\u63a8\u5968\u3055\u308c\u307e\u3059\u3002<br \/>\nNode.js\u3067\u306e\u30b5\u30cb\u30bf\u30a4\u30ba\u65b9\u6cd5<br \/>\n\u30fb\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u30e9\u30a4\u30d6\u30e9\u30ea: express-validator \u306a\u3069\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u4f7f\u3063\u3066\u3001\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u30c7\u30fc\u30bf\u3092\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u3057\u3001\u30b5\u30cb\u30bf\u30a4\u30ba\u3092\u884c\u3044\u307e\u3059\u3002<br \/>\n\u30fbXSS\u5bfe\u7b56: xss-clean \u306a\u3069\u306e\u30df\u30c9\u30eb\u30a6\u30a7\u30a2\u3092\u4f7f\u7528\u3057\u3066\u3001\u5165\u529b\u30c7\u30fc\u30bf\u304b\u3089\u60aa\u610f\u306e\u3042\u308b\u30b9\u30af\u30ea\u30d7\u30c8\u3092\u524a\u9664\u3057\u307e\u3059\u3002<br \/>\n\u30fb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u95a2\u9023\u306e\u5bfe\u7b56: mongoose \u306a\u3069\u3092\u4f7f\u3046\u5834\u5408\u306f\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30af\u30a8\u30ea\u306b\u30d7\u30ec\u30fc\u30b9\u30db\u30eb\u30c0\u30fc\u3092\u4f7f\u3046\u3053\u3068\u3067SQL\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u306e\u30ea\u30b9\u30af\u3092\u6e1b\u3089\u3057\u307e\u3059\u3002<br \/>\n\u4ee5\u4e0b\u306b\u3001express-validator \u3092\u4f7f\u7528\u3057\u305f\u4f8b\u3092\u793a\u3057\u307e\u3059\u3002list-2.1.js\u3068\u3057\u3066\u4fdd\u5b58\u3057\u305f\u3002<br \/>\n\u3053\u306e\u3088\u3046\u306b\u3001Node.js\u3067\u3082\u30b5\u30cb\u30bf\u30a4\u30ba\u51e6\u7406\u3092\u884c\u3046\u3053\u3068\u3067\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u5b89\u5168\u6027\u3092\u4fdd\u3064\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<br \/>\n\\<br \/>\n\u3053\u308c\u3089\u306e\u30b5\u30cb\u30bf\u30a4\u30ba\u51e6\u7406\u306f\u3001Next.js\u3067SSR\u3092\u4f7f\u3046\u5834\u5408\u306f\u3001Next.js\u5074\u3067\u7528\u610f\u3057\u3066\u3044\u308b\u306e\u304b\uff1f<br \/>\nNext.js\u81ea\u4f53\u306f\u3001\u7279\u5b9a\u306e\u30b5\u30cb\u30bf\u30a4\u30ba\u51e6\u7406\u3084\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u3092\u81ea\u52d5\u7684\u306b\u884c\u3046\u6a5f\u80fd\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u305b\u3093\u3002\u305d\u306e\u305f\u3081\u3001Next.js\u3067\u30b5\u30fc\u30d0\u30fc\u30b5\u30a4\u30c9\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\uff08SSR\uff09\u3092\u5229\u7528\u3059\u308b\u5834\u5408\u3067\u3082\u3001\u30e6\u30fc\u30b6\u30fc\u304b\u3089\u306e\u5165\u529b\u306b\u5bfe\u3059\u308b\u30b5\u30cb\u30bf\u30a4\u30ba\u3084\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u51e6\u7406\u3092\u958b\u767a\u8005\u81ea\u8eab\u3067\u5b9f\u88c5\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<br \/>\nNext.js\u306fReact\u3092\u30d9\u30fc\u30b9\u306b\u3057\u3066\u3044\u308b\u305f\u3081\u3001React\u3084Node.js\u3067\u4f7f\u7528\u3055\u308c\u308b\u4e00\u822c\u7684\u306a\u30b5\u30cb\u30bf\u30a4\u30ba\u3084\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u305d\u306e\u307e\u307e\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002\u305f\u3068\u3048\u3070\u3001express-validator \u3084 validator \u306a\u3069\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u4f7f\u3063\u3066\u3001API\u30eb\u30fc\u30c8\u3084\u30b5\u30fc\u30d0\u30fc\u30b5\u30a4\u30c9\u30b3\u30fc\u30c9\u3067\u30b5\u30cb\u30bf\u30a4\u30ba\u51e6\u7406\u3092\u884c\u3044\u307e\u3059\u3002<br \/>\nNext.js\u3067\u306e\u30b5\u30cb\u30bf\u30a4\u30ba\u65b9\u6cd5\u306e\u4f8b<br \/>\nNext.js\u3067\u306f\u3001getServerSideProps \u3084 API\u30eb\u30fc\u30c8\u3067\u306e\u30b5\u30cb\u30bf\u30a4\u30ba\u51e6\u7406\u304c\u4e00\u822c\u7684\u3067\u3059\u3002\u4ee5\u4e0b\u306fAPI\u30eb\u30fc\u30c8\u3067\u30b5\u30cb\u30bf\u30a4\u30ba\u51e6\u7406\u3092\u884c\u3046\u4f8b\u3067\u3059\u3002list-2.2.js\u3068\u3057\u3066\u4fdd\u5b58\u3057\u305f\u3002<br \/>\n\u4e3b\u306a\u30dd\u30a4\u30f3\u30c8<br \/>\n\u30fbAPI\u30eb\u30fc\u30c8: Next.js\u306eAPI\u30eb\u30fc\u30c8\u3067\u30b5\u30cb\u30bf\u30a4\u30ba\u51e6\u7406\u3092\u884c\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u4e0a\u8a18\u306e\u4f8b\u3067\u306f\u3001express-validator \u3092\u4f7f\u3063\u3066\u5165\u529b\u3092\u30b5\u30cb\u30bf\u30a4\u30ba\u3057\u3066\u3044\u307e\u3059\u3002<br \/>\n\u30fbgetServerSideProps\u3084getStaticProps: \u3053\u308c\u3089\u306e\u30b5\u30fc\u30d0\u30fc\u30b5\u30a4\u30c9\u3067\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u3059\u308b\u95a2\u6570\u3067\u3082\u3001\u30b5\u30cb\u30bf\u30a4\u30ba\u51e6\u7406\u304c\u5fc5\u8981\u306a\u5834\u5408\u306f\u540c\u69d8\u306b\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u4f7f\u7528\u3057\u3066\u884c\u3044\u307e\u3059\u3002<br \/>\n\u30b5\u30cb\u30bf\u30a4\u30ba\u306b\u95a2\u3059\u308b\u6ce8\u610f\u70b9<br \/>\n\u30fbXSS\u5bfe\u7b56: React\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30a8\u30b9\u30b1\u30fc\u30d7\u6a5f\u80fd\u306b\u3088\u308a\u3001XSS\u653b\u6483\u306e\u30ea\u30b9\u30af\u306f\u3042\u308b\u7a0b\u5ea6\u8efd\u6e1b\u3055\u308c\u307e\u3059\u304c\u3001\u5165\u529b\u30c7\u30fc\u30bf\u3092\u305d\u306e\u307e\u307e\u4f7f\u7528\u3059\u308b\u5834\u5408\u306f\u8ffd\u52a0\u306e\u30b5\u30cb\u30bf\u30a4\u30ba\u304c\u5fc5\u8981\u3067\u3059\u3002<br \/>\n\u30fbSQL\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u5bfe\u7b56: \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u3092\u884c\u3046\u969b\u306b\u306f\u3001ORM\uff08Object-Relational Mapping\uff09\u30c4\u30fc\u30eb\u3084\u30d7\u30ea\u30da\u30a2\u30fc\u30c9\u30b9\u30c6\u30fc\u30c8\u30e1\u30f3\u30c8\u3092\u4f7f\u7528\u3057\u3066\u3001SQL\u30a4\u30f3\u30b8\u30a7\u30af\u30b7\u30e7\u30f3\u3092\u9632\u3050\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002<br \/>\n\u307e\u3068\u3081\u308b\u3068\u3001Next.js\u306f\u81ea\u52d5\u7684\u306b\u30b5\u30cb\u30bf\u30a4\u30ba\u51e6\u7406\u3092\u884c\u308f\u306a\u3044\u305f\u3081\u3001\u958b\u767a\u8005\u81ea\u8eab\u304c\u9069\u5207\u306a\u30b5\u30cb\u30bf\u30a4\u30ba\u3068\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u3092\u884c\u3046\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<br \/>\n\\<br \/>\n(\u5f53\u521d\u306e\u76ee\u7684\u3060\u3063\u305f\u9759\u7684\u30b5\u30a4\u30c8(https:\/\/oldcygwin.web.fc2.com\/ )\u306eWeb\u8868\u793a\u3092Node.js\u3092\u4f7f\u3063\u3066local\u3067\u3067\u304d\u305f(server.js)\u306e\u3067\u3001\u3053\u3053\u3067\u4e00\u65e6\u4fdd\u7559\u3057\u3066DB\u306e\u7ae0\u3078\u884c\u304f)<\/p>\n<p>\u7b2c\uff16\u7ae0 \u30c7\u30fc\u30bf\u306e\u8a18\u61b6 &#8212;\u69cb\u9020\u4f53\u3001\u30d5\u30a1\u30a4\u30eb\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9<br \/>\nGoLang\u3067\u306f\u7d44\u307f\u8fbc\u307f\u7cfb\u3092\u610f\u8b58\u3057\u3066SQLite\u3092\u4f7f\u3063\u305f\u304c\u3001Node.js\u3067\u306fMySQL(MariaDB)\u3092\u4f7f\u3046\u3002<br \/>\nNode.js\u306f\u5358\u72ec\u3067\u30b5\u30fc\u30d0\u306b\u306a\u308b\u4e8b\u306f\u5c11\u306a\u3044 https:\/\/seesaawiki.jp\/lifewithslackzaurus_15_0\/d\/%a5%ed%a1%bc%a5%ab%a5%eb%a5%b5%a1%bc%a5%d0%20apache%a1%dcnode%2ejs<br \/>\n\u3088\u3046\u306a\u306e\u3067\u3001https:\/\/oldcygwin.web.fc2.com\/ \u306e\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3092local\u3067Apache+PHP+MySQL\u304b\u3089Apache+Node.js+MySQL\u306b\u3057\u3066\u307f\u308b\u4e8b\u306b\u3057\u305f\u3002<br \/>\n$ node main.js (\u4e88\u5b9a\u3001\u3068\u3044\u3046\u304b\u30b5\u30fc\u30d0\u6a5f\u80fd\u306fApache\u306b\u4efb\u305b\u308b\u304b\u3089\u3001\u3053\u308c\u306f\u7121\u3057 -&gt;\u5fc5\u8981\u3060\u3063\u305f node app.js)<br \/>\n\u4ee5\u524d\u3001https:\/\/seesaawiki.jp\/lifewithslackzaurus_15_0\/d\/HTML\/CSS\/PHP%a4%ce%ce%fd%bd%ac%20%bc%c2%c1%a9%20%bb%a8%c2%bf%a4%ca%b5%ad%cf%bf \u3067\u4f5c\u3063\u305fPHP\u306e\u6ce8\u6587Form\u3092\u554f\u3044\u5408\u308f\u305bForm\u306b\u6539\u9020\u3057\u3066\u3044\u305f\u3082\u306e\u3092\u3001ChatGPT\u306bNode.js\u3078\u5909\u63db\u3055\u305b\u308b\u3002(app.js(main.js) shop_form_check.js shop_form_done_mysql.js)<br \/>\nApache\u3068\u306e\u9023\u643a\u306f\u3053\u3063\u3061\u306b\u30e1\u30e2\u3002https:\/\/seesaawiki.jp\/lifewithslackzaurus_15_0\/d\/%a5%ed%a1%bc%a5%ab%a5%eb%a5%b5%a1%bc%a5%d0%20apache%a1%dcnode%2ejs<br \/>\n\u4ee5\u4e0b\u306f\u3001\u5178\u578b\u7684\u306a\u30d5\u30a1\u30a4\u30eb\u69cb\u6210\u306e\u4f8b\u3067\u3059\uff1a<br \/>\n\u30fbapp.js \u307e\u305f\u306f index.js\uff08\u30a8\u30f3\u30c8\u30ea\u30fc\u30dd\u30a4\u30f3\u30c8\uff09<br \/>\n\u30fbroutes\/shop.js\uff08\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u8a2d\u5b9a\uff09<br \/>\n\u30fbcontrollers\/shop_form_check.js\uff08shopFormCheck \u95a2\u6570\u306a\u3069\u306e\u30ed\u30b8\u30c3\u30af\uff09<br \/>\n(\u4eca\u56de\u306f\u898f\u6a21\u304c\u5c0f\u3055\u3044\u306e\u3067\u540c\u3058dir\u306b\u7f6e\u3044\u305f\u305f\u3081\u3001dir\u306f\u4f5c\u3089\u306a\u304b\u3063\u305f\u3002\u304c\u5f8c\u304b\u3089\u898b\u3089\u308c\u308b\u3068\u30de\u30ba\u3044\u30d5\u30a1\u30a4\u30eb<br \/>\n\u304c\u51fa\u3066\u304d\u305f\u306e\u3067\u3001\u6b21\u56de\u4f5c\u308b\u6642\u306fdir\u5206\u3051\u3057\u3088\u3046\u3002\u30ea\u30d0\u30fc\u30b9\u30d7\u30ed\u30ad\u30b7\u8a2d\u5b9a\u3057\u305f)<br \/>\n$ node app.js<br \/>\nServer running on port 3000<br \/>\nError: connect ECONNREFUSED 127.0.0.1:3306<br \/>\nDB\u3078\u306e\u30a2\u30af\u30bb\u30b9\u306b\u5931\u6557\u3059\u308b\u3002https:\/\/seesaawiki.jp\/lifewithslackzaurus_15_0\/d\/MySQL%28MariaDB%29<\/p>\n<p>(\u5f53\u521d\u306e\u76ee\u7684\u3060\u3063\u305f\u9759\u7684\u30b5\u30a4\u30c8(https:\/\/oldcygwin.web.fc2.com\/ )\u306e\u52d5\u7684\u90e8\u5206?\u304cNode.js\u3092\u4f7f\u3063\u3066local\u3067\u3067\u304d\u305f\u306e\u3067\u3001\u3053\u3053\u3067\u4e00\u65e6\u4fdd\u7559\u3059\u308b)<\/p>\n<p>\/*************************************************************************************\/<\/p>\n<p>\u53c2\u8003\u66f8\u7c4d\uff1a<br \/>\nHTTP\u901a\u4fe1\u306b\u3064\u3044\u3066\u306e\u57fa\u672c\u77e5\u8b58\u306f\u3053\u3063\u3061\u306b\u307e\u3068\u3081\u308b<br \/>\n<a href=\"https:\/\/shirakawa.weblike.jp\/blog-page\/2024\/01\/02\/db%e3%81%b8%e3%81%aeapi\/\">https:\/\/shirakawa.weblike.jp\/blog-page\/2024\/01\/02&#8230;<\/a><br \/>\nGo\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u5b9f\u8df5\u5165\u9580 \u6a19\u6e96\u30e9\u30a4\u30d6\u30e9\u30ea\u3067\u30bc\u30ed\u304b\u3089Web\u30a2\u30d7\u30ea\u3092\u4f5c\u308b<br \/>\n<a href=\"https:\/\/book.impress.co.jp\/books\/1115101145\">https:\/\/book.impress.co.jp\/books\/1115101145<\/a><br \/>\n<a href=\"https:\/\/www.marlin-arms.com\/support\/goweb\/\">https:\/\/www.marlin-arms.com\/support\/goweb\/<\/a><br \/>\n\u305d\u306e\u5185\u3001Node.js\u306e\u672c\u3082\u8cb7\u3063\u3066\u3001\u53d6\u308a\u3053\u307c\u3057\u30c1\u30a7\u30c3\u30af\u3057\u3088\u3046\u3002<\/p>\n<p>\u53c2\u8003\u60c5\u5831\uff1a<br \/>\nWeb\u30b5\u30fc\u30d3\u30b9 node.js vs golang\u3001\u3067\u30b0\u30b0\u3063\u305f\uff1a<br \/>\n<a href=\"https:\/\/jp.quora.com\/Golang%E3%82%88%E3%82%8ANode-js%E3%81%AE%E3%81%BB%E3%81%86%E3%81%8C%E8%89%AF%E3%81%84%E3%82%93%E3%81%A7%E3%81%99%E3%81%8B\">https:\/\/jp.quora.com\/Golang%E3%82%88%E3%82%8ANode-&#8230;<\/a><br \/>\n<a href=\"https:\/\/jp.quora.com\/Go%E3%81%A8Node-js%E3%82%92%E6%AF%94%E8%BC%83%E3%81%97%E3%81%9F%E5%A0%B4%E5%90%88-%E4%BB%8A%E5%BE%8C%E3%83%8B%E3%83%BC%E3%82%BA%E3%81%8C%E5%A4%9A%E3%81%84%E3%81%AE%E3%81%AF%E3%81%A9%E3%81%A1%E3%82%89%E3%81%A0-1\">https:\/\/jp.quora.com\/Go%E3%81%A8Node-js%E3%82%92%E&#8230;<\/a><\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>HTML\/CSS\/GoLang\u306e\u7df4\u7fd2 \u5b9f\u8df5 \u96d1\u591a\u306a\u8a18\u9332 https:\/\/shirakawa.weblike.jp\/blog-page\/2022\/06\/14&#8230; \u306e\u30b3\u30fc\u30c9\u3092AI\u3067Node.js\u306b\u5909\u63db\u3057\u5b9f\u884c\u3057\u3066\u307f\u308b [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-195","post","type-post","status-publish","format-standard","hentry","category-web-practice"],"_links":{"self":[{"href":"https:\/\/shirakawa.weblike.jp\/blog-page\/wp-json\/wp\/v2\/posts\/195","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/shirakawa.weblike.jp\/blog-page\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/shirakawa.weblike.jp\/blog-page\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/shirakawa.weblike.jp\/blog-page\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/shirakawa.weblike.jp\/blog-page\/wp-json\/wp\/v2\/comments?post=195"}],"version-history":[{"count":11,"href":"https:\/\/shirakawa.weblike.jp\/blog-page\/wp-json\/wp\/v2\/posts\/195\/revisions"}],"predecessor-version":[{"id":2098,"href":"https:\/\/shirakawa.weblike.jp\/blog-page\/wp-json\/wp\/v2\/posts\/195\/revisions\/2098"}],"wp:attachment":[{"href":"https:\/\/shirakawa.weblike.jp\/blog-page\/wp-json\/wp\/v2\/media?parent=195"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/shirakawa.weblike.jp\/blog-page\/wp-json\/wp\/v2\/categories?post=195"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/shirakawa.weblike.jp\/blog-page\/wp-json\/wp\/v2\/tags?post=195"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}