{"id":50892,"date":"2024-02-28T00:00:00","date_gmt":"2024-02-28T08:00:00","guid":{"rendered":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/%e6%9c%aa%e5%88%86%e9%a1%9e\/how-to-build-a-real-time-chat-application-with-node-js-and-griddb\/"},"modified":"2025-11-14T07:56:36","modified_gmt":"2025-11-14T15:56:36","slug":"how-to-build-a-real-time-chat-application-with-node-js-and-griddb","status":"publish","type":"post","link":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/how-to-build-a-real-time-chat-application-with-node-js-and-griddb\/","title":{"rendered":"Node.js\u3068GridDB\u3067\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u30fb\u30c1\u30e3\u30c3\u30c8\u30fb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3059\u308b\u65b9\u6cd5"},"content":{"rendered":"<h2>\u306f\u3058\u3081\u306b<\/h2>\n<p>\u3053\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3067\u306f\u3001\u30a8\u30ad\u30b5\u30a4\u30c6\u30a3\u30f3\u30b0\u306a\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u30c1\u30e3\u30c3\u30c8\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u4e16\u754c\u306b\u98db\u3073\u8fbc\u307f\u307e\u3059\u3002\u4e16\u754c\u4e2d\u306e\u3069\u3053\u306b\u3044\u3066\u3082\u3001\u53cb\u9054\u3084\u5bb6\u65cf\u3001\u540c\u50da\u3068\u3059\u3050\u306b\u3064\u306a\u304c\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u3053\u3068\u3092\u60f3\u50cf\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002\u305d\u308c\u304c\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u30fb\u30c1\u30e3\u30c3\u30c8\u306e\u529b\u3067\u3059\u3002\u4eca\u65e5\u306f\u3001\u305d\u308c\u3092\u30bc\u30ed\u304b\u3089\u4f5c\u308b\u65b9\u6cd5\u3092\u5b66\u3073\u307e\u3059\uff01<\/p>\n<p>Node.js\u3068\u3044\u3046\u4eba\u6c17\u306e\u3042\u308bJavaScript\u30e9\u30f3\u30bf\u30a4\u30e0\u3092\u4f7f\u3044\u3001\u30c1\u30e3\u30c3\u30c8\u30a2\u30d7\u30ea\u306e\u30b5\u30fc\u30d0\u30fc\u30b5\u30a4\u30c9\u306e\u51e6\u7406\u3092\u884c\u3044\u307e\u3059\u3002\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u306f\u3001\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u306e\u30c7\u30fc\u30bf\u51e6\u7406\u306b\u6700\u9069\u306a\u975e\u5e38\u306b\u52b9\u7387\u7684\u306aNoSQL\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3067\u3042\u308bGridDB\u3092\u5229\u7528\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u3068\u4e26\u884c\u3057\u3066\u3001Node.js\u7528\u306e\u6700\u5c0f\u9650\u306eWeb\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3042\u308bExpress\u3068\u3001\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u306e\u53cc\u65b9\u5411\u30a4\u30d9\u30f3\u30c8\u30d9\u30fc\u30b9\u901a\u4fe1\u3092\u53ef\u80fd\u306b\u3059\u308b\u30e9\u30a4\u30d6\u30e9\u30ea\u3067\u3042\u308bSocket.io\u3092\u7d44\u307f\u8fbc\u307f\u307e\u3059\u3002<\/p>\n<p>\u3053\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u306f\u3001JavaScript\u306e\u57fa\u672c\u7684\u306a\u7406\u89e3\u304c\u3042\u308a\u3001Node.js\u306b\u7cbe\u901a\u3057\u3066\u3044\u308b\u65b9\u3092\u5bfe\u8c61\u3068\u3057\u3066\u3044\u307e\u3059\u3002\u5c02\u9580\u5bb6\u3067\u306a\u304f\u3066\u3082\u5fc3\u914d\u7121\u7528\u3067\u3059\u3002\u5404\u30b9\u30c6\u30c3\u30d7\u3092\u308f\u304b\u308a\u3084\u3059\u304f\u7c21\u6f54\u306b\u30ac\u30a4\u30c9\u3057\u307e\u3059\u3002\u3053\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u304c\u7d42\u308f\u308b\u3053\u308d\u306b\u306f\u3001\u5b8c\u5168\u306b\u6a5f\u80fd\u3059\u308b\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u30c1\u30e3\u30c3\u30c8\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u624b\u306b\u5165\u308c\u3001\u3053\u308c\u3089\u306e\u6280\u8853\u304c\u3069\u306e\u3088\u3046\u306b\u9023\u643a\u3057\u3066\u3044\u308b\u306e\u304b\u3092\u3088\u308a\u6df1\u304f\u7406\u89e3\u3057\u3001\u5c06\u6765\u3088\u308a\u8907\u96d1\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3067\u304d\u308b\u57fa\u76e4\u3092\u624b\u306b\u5165\u308c\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u305d\u308c\u3067\u306f\u59cb\u3081\u307e\u3057\u3087\u3046\uff01<\/p>\n<h2>\u30c6\u30af\u30ce\u30ed\u30b8\u30fc\u3092\u7406\u89e3\u3057\u307e\u3059<\/h2>\n<p><img decoding=\"async\" src=\"https:\/\/drive.google.com\/uc?export=view&amp;id=14eOM6_-nxub982K67PJ79kqfb13JzPKA\" alt=\"\" \/><a href=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/02\/img2.png\"><img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/02\/img2.png\" alt=\"\" width=\"654\" height=\"360\" class=\"aligncenter size-full wp-image-29996\" srcset=\"\/wp-content\/uploads\/2024\/02\/img2.png 654w, \/wp-content\/uploads\/2024\/02\/img2-300x165.png 300w, \/wp-content\/uploads\/2024\/02\/img2-600x330.png 600w\" sizes=\"(max-width: 654px) 100vw, 654px\" \/><\/a><\/p>\n<h4>NodeJS:<\/h4>\n<p>Node.js\u306f\u3001JavaScript\u30b3\u30fc\u30c9\u3092\u5f93\u6765\u306eWeb\u30d6\u30e9\u30a6\u30b6\u306e\u67a0\u306b\u3068\u3089\u308f\u308c\u305a\u306b\u52d5\u4f5c\u3055\u305b\u308b\u30e9\u30f3\u30bf\u30a4\u30e0\u74b0\u5883\u3068\u3057\u3066\u6a5f\u80fd\u3057\u307e\u3059\u3002Chrome\u306eV8 JavaScript\u30a8\u30f3\u30b8\u30f3\u3092\u6d3b\u7528\u3057\u305fNode.js\u306e\u30ce\u30f3\u30d6\u30ed\u30c3\u30ad\u30f3\u30b0\u3001\u30a4\u30d9\u30f3\u30c8\u99c6\u52d5\u8a2d\u8a08\u306b\u3088\u308a\u3001\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u7ba1\u7406\u304c\u5bb9\u6613\u306b\u306a\u308a\u307e\u3059\u3002Node.js\u306f\u52b9\u7387\u6027\u3068\u5fdc\u7b54\u6027\u306b\u91cd\u70b9\u3092\u7f6e\u3044\u3066\u3044\u307e\u3059\u3002<\/p>\n<h4>GridDB:<\/h4>\n<p>GridDB\u306f\u3001\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u306e\u30e2\u30ce\u306e\u30a4\u30f3\u30bf\u30fc\u30cd\u30c3\u30c8\u30fb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u7279\u306b\u52b9\u679c\u3092\u767a\u63ee\u3057\u307e\u3059\u3002\u6700\u5c0f\u9650\u306e\u30ec\u30a4\u30c6\u30f3\u30b7\u30fc\u3067\u4fe1\u983c\u6027\u306e\u9ad8\u3044\u8fc5\u901f\u306a\u30a2\u30af\u30bb\u30b9\u3068\u3001\u52b9\u679c\u7684\u306a\u30c7\u30fc\u30bf\u7ba1\u7406\u3092\u4fdd\u8a3c\u3059\u308b\u3002GridDB\u306f\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u51e6\u7406\u306e\u305f\u3081\u306b\u8a2d\u8a08\u3055\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u30c1\u30e3\u30c3\u30c8\u30a2\u30d7\u30ea\u306e\u52b9\u7387\u7684\u306a\u30c7\u30fc\u30bf\u7ba1\u7406\u306b\u6700\u9069\u306a\u30c4\u30fc\u30eb\u3067\u3059\u3002<\/p>\n<h4>Express:<\/h4>\n<p>Express\u306fNode.js\u306eWeb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3001\u30e2\u30d0\u30a4\u30eb\u3084Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u4f5c\u6210\u3059\u308b\u305f\u3081\u306e\u591a\u304f\u306e\u6a5f\u80fd\u3092\u63d0\u4f9b\u3057\u3066\u3044\u308b\u3002\u30b7\u30f3\u30b0\u30eb\u30da\u30fc\u30b8\u3001\u30de\u30eb\u30c1\u30da\u30fc\u30b8\u3001\u30cf\u30a4\u30d6\u30ea\u30c3\u30c9\u306e\u30a6\u30a7\u30d6\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3059\u308b\u305f\u3081\u306b\u63a1\u7528\u3055\u308c\u3066\u3044\u308b\u3002Node.js\u306e\u30aa\u30fc\u30d0\u30fc\u30ec\u30a4\u3068\u3057\u3066\u3001Express\u306f\u30b5\u30fc\u30d0\u30fc\u3068\u30eb\u30fc\u30c8\u7ba1\u7406\u3092\u5408\u7406\u5316\u3057\u307e\u3059\u3002<\/p>\n<h4>Socket.io:<\/h4>\n<p>Socket.io\u3068\u547c\u3070\u308c\u308b\u30e9\u30a4\u30d6\u30e9\u30ea\u30fc\u306f\u3001\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u306e\u30a4\u30d9\u30f3\u30c8\u99c6\u52d5\u578b\u30a6\u30a7\u30d6\u30fb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u5411\u3051\u3067\u3059\u3002\u30a6\u30a7\u30d6\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3068\u30b5\u30fc\u30d0\u30fc\u9593\u306e\u53cc\u65b9\u5411\u901a\u4fe1\u3092\u53ef\u80fd\u306b\u3057\u307e\u3059\u3002<\/p>\n<h2>Prerequisites:<\/h2>\n<ul>\n<li>JavaScript\u306e\u57fa\u672c\u7684\u306a\u77e5\u8b58\u304c\u3042\u308b\u3053\u3068\u304c\u4e0d\u53ef\u6b20\u3067\u3059\u3002<\/li>\n<li>Node\u3068NPM\u304c\u30b3\u30f3\u30d4\u30e5\u30fc\u30bf\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/li>\n<\/ul>\n<h4>\u30b9\u30c6\u30c3\u30d7\u3054\u3068\u306e\u8a2d\u5b9a<\/h4>\n<p><a href=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/02\/img3.png\"><img decoding=\"async\" src=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/02\/img3.png\" alt=\"\" width=\"654\" height=\"360\" class=\"aligncenter size-full wp-image-29997\" srcset=\"\/wp-content\/uploads\/2024\/02\/img3.png 654w, \/wp-content\/uploads\/2024\/02\/img3-300x165.png 300w, \/wp-content\/uploads\/2024\/02\/img3-600x330.png 600w\" sizes=\"(max-width: 654px) 100vw, 654px\" \/><\/a> Create a folder by using the command:<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">mkdir folder_name<\/code><\/pre>\n<\/div>\n<p>\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u3063\u3066\u73fe\u5728\u306e\u4f5c\u696d\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u5909\u66f4\u3057\u307e\u3059\uff1a<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">cd folder_name<\/code><\/pre>\n<\/div>\n<p>\u305d\u306e\u5f8c\u3001Visual Studio Code\u3067\u5148\u307b\u3069\u4f5c\u6210\u3057\u305f\u30d5\u30a9\u30eb\u30c0\u3092\u958b\u304d\u3001\u65b0\u3057\u3044\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u8d77\u52d5\u3059\u308b\u305f\u3081\u306b\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059\uff1a<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">npm init -y<\/code><\/pre>\n<\/div>\n<p>\u51fa\u529b\u306f\u6b21\u306e\u3088\u3046\u306b\u308a\u307e\u3059\uff1a<\/p>\n<p><a href=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/02\/img4.png\"><img decoding=\"async\" src=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/02\/img4.png\" alt=\"\" width=\"657\" height=\"210\" class=\"aligncenter size-full wp-image-29998\" srcset=\"\/wp-content\/uploads\/2024\/02\/img4.png 657w, \/wp-content\/uploads\/2024\/02\/img4-300x96.png 300w, \/wp-content\/uploads\/2024\/02\/img4-600x192.png 600w\" sizes=\"(max-width: 657px) 100vw, 657px\" \/><\/a><\/p>\n<p>\u3055\u3066\u3001Express\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u306b\u306f\u3001\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u3044\u307e\u3059<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">npm install -save express<\/code><\/pre>\n<\/div>\n<p>\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u3063\u3066socket.io\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\uff1a<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">npm install -save socket.io<\/code><\/pre>\n<\/div>\n<h4>GridDB\u306e\u8a2d\u5b9a\uff1a<\/h4>\n<p><!-- ![](https:\/\/drive.google.com\/uc?export=view&id=1_zOCAtzyIUjews2xtiFz-ipyrLV_VGU5) --><\/p>\n<p>\u30b7\u30b9\u30c6\u30e0\u306e\u30bf\u30fc\u30df\u30ca\u30eb\u3067\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002<\/p>\n<p>rpm\u3067\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u5834\u5408\u306f\u3001\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059\uff1a<\/p>\n<p>\u307e\u305a\u3001apt repo\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u307e\u3059\uff1a<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">sudo sh -c 'echo \"deb https:\/\/www.griddb.net\/apt griddb\/5.3 multiverse\" >>  \/etc\/apt\/sources.list.d\/griddb.list'<\/code><\/pre>\n<\/div>\n<p>\u6b21\u306b\u3001\u30ad\u30fc\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u307e\u3059\uff1a<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">wget -qO - https:\/\/www.griddb.net\/apt\/griddb.asc | sudo apt-key add -<\/code><\/pre>\n<\/div>\n<p>\u6b21\u306b\u3001\u4ee5\u4e0b\u306e\u65b9\u6cd5\u3067\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3092\u78ba\u8a8d\u3057\u307e\u3059\uff1a<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">sudo apt update<\/code><\/pre>\n<\/div>\n<p>\u6700\u5f8c\u306b\u3001GridDB\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\uff1a<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">sudo apt install griddb-meta<\/code><\/pre>\n<\/div>\n<p>GridDB\u30b5\u30fc\u30d0\u3092\u8d77\u52d5\u3057\u307e\u3059\uff1a<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">sudo systemctl start gridstore<\/code><\/pre>\n<\/div>\n<p>\u30b5\u30fc\u30d0\u30fc\u3092\u505c\u6b62\u3057\u307e\u3059\uff1a<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">sudo systemctl stop gridstore<\/code><\/pre>\n<\/div>\n<p>\u30b3\u30de\u30f3\u30c9\u3092\u4f7f\u3063\u3066admin\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5909\u66f4\u3057\u307e\u3059\uff1a<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">export GS_HOME=\/var\/lib\/gridstore\/\nexport GS_LOG=\/var\/lib\/gridstore\/log\/\ngs_passwd admin\n<\/code><\/pre>\n<\/div>\n<p>GridDB Community Edition\u306b\u306finit\u30b9\u30af\u30ea\u30d7\u30c8\u304c\u306a\u3044\u305f\u3081\u3001GridDB\u306f\u624b\u52d5\u3067\u8d77\u52d5\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u30b5\u30fc\u30d3\u30b9\u8d77\u52d5\u5f8c\u3001\u4ed6\u30ce\u30fc\u30c9\u3068\u306e\u63a5\u7d9a\u3092\u78ba\u7acb\u3057\u307e\u3059\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">gs_startnode -u username\/password\ngs_joincluster -u admin\/admin<\/code><\/pre>\n<\/div>\n<p><a href=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/02\/start_node.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/02\/start_node.png\" alt=\"\" width=\"712\" height=\"246\" class=\"aligncenter size-full wp-image-30003\" srcset=\"\/wp-content\/uploads\/2024\/02\/start_node.png 712w, \/wp-content\/uploads\/2024\/02\/start_node-300x104.png 300w, \/wp-content\/uploads\/2024\/02\/start_node-600x207.png 600w\" sizes=\"(max-width: 712px) 100vw, 712px\" \/><\/a> You can verify the status of GridDB by using the command:<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">gs_stat -u admin\/admin<\/code><\/pre>\n<\/div>\n<p><strong>Output:<\/strong> <a href=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/02\/gs_stat.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/02\/gs_stat.png\" alt=\"\" width=\"1368\" height=\"768\" class=\"aligncenter size-full wp-image-29994\" srcset=\"\/wp-content\/uploads\/2024\/02\/gs_stat.png 1368w, \/wp-content\/uploads\/2024\/02\/gs_stat-300x168.png 300w, \/wp-content\/uploads\/2024\/02\/gs_stat-1024x575.png 1024w, \/wp-content\/uploads\/2024\/02\/gs_stat-768x431.png 768w, \/wp-content\/uploads\/2024\/02\/gs_stat-150x85.png 150w, \/wp-content\/uploads\/2024\/02\/gs_stat-600x337.png 600w\" sizes=\"(max-width: 1368px) 100vw, 1368px\" \/><\/a><\/p>\n<p><!-- https:\/\/drive.google.com\/file\/d\/1bdCCLt1zSAkTd1vaWRFNBWS5J_irQlUW\/view?usp=sharing --><\/p>\n<p>\u6b21\u306b\u3001Node\u304c\u30b5\u30fc\u30d0\u30fc\u3068\u3057\u3066\u6a5f\u80fd\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u308bserver.js\u3068\u3044\u3046\u30d5\u30a1\u30a4\u30eb\u3092\uff08Visual Studio Code\u3067\uff09\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n<p><strong>\u305d\u3053\u306b\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u3092\u8ffd\u52a0\u3059\u308b<\/strong><\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-js\">const express = require(\"express\");\nconst socketio = require(\"socket.io\");\nconst http = require(\"http\");\nconst app = express();\nconst griddb = require(\"griddb-node-api\");\n\nconst PORT = 3000;\nconst HOST = \"0.0.0.0\";\nconst server = http.createServer(app);\nconst io = socketio(server);\nconst factory = griddb.StoreFactory.getInstance();\nconst store = factory.getStore({\n  notificationMember: \"127.0.0.1:10001\",\n  clusterName: \"myCluster\",\n  username: \"admin\",\n  password: \"admin\",\n});\n\n\/\/ Schema\nvar timeConInfo = new griddb.ContainerInfo({\n  name: \"Chat\",\n  columnInfoList: [\n    [\"timestamp\", griddb.Type.TIMESTAMP],\n    [\"username\", griddb.Type.STRING],\n    [\"message\", griddb.Type.STRING],\n  ],\n  type: griddb.ContainerType.TIME_SERIES,\n  rowKey: true,\n});\n\n\/\/ Function to handle the \"chat_message\" event and store the message in GridDB\nasync function handleChatMessage(data) {\n  try {\n    let time_series;\n    store\n      .putContainer(timeConInfo, false)\n      .then((ts) => {\n        time_series = ts;\n        return ts.put([new Date(), data.username, data.message]);\n      })\n      .then(() => {\n        query = time_series.query(\n          \"select * where timestamp > TIMESTAMPADD(HOUR, NOW(), -6)\"\n        );\n        return query.fetch();\n      })\n      .then((rowset) => {\n        while (rowset.hasNext()) {\n          var row = rowset.next();\n          console.log(\n            \"Time =\",\n            row[0],\n            \"User =\",\n            row[1].toString(),\n            \"Text =\",\n            row[2]\n          );\n        }\n      })\n      .catch((err) => {\n        if (err.constructor.name == \"GSException\") {\n          for (var i = 0; i &lt; err.getErrorStackSize(); i++) {\n            console.log(\"[\", i, \"]\");\n            console.log(err.getErrorCode(i));\n            console.log(err.getMessage(i));\n          }\n        } else {\n          console.log(err);\n        }\n      });\n\n    console.log(\"Chat message stored successfully.\");\n  } catch (error) {\n    console.error(\"Error storing chat message:\", error);\n  }\n}\n\n\/\/ Fetch all data\nconst FetchAll = async function () {\n  const container = await store.getContainer(\"Chat\");\n\n  const query = container.query(\n    \"select * where timestamp > TIMESTAMPADD(HOUR, NOW(), -6)\"\n  );\n  const rowSet = await query.fetch();\n  let res = [];\n  while (rowSet.hasNext()) {\n    const row = await rowSet.next();\n    console.log(\"Name:\", row[1].toString(), \"Message:\", row[2]);\n    res.push({ username: row[1].toString(), message: row[2] });\n  }\n  return res;\n};\n\napp.use(express.static(__dirname + \"\/public\"));\n\napp.get(\"\/\", (req, res) => {\n  res.sendFile(__dirname + \"\/public\/index.html\");\n});\n\nio.on(\"connection\", (socket) => {\n  console.log(\"A user connected: \", socket.id);\n\n  socket.on(\"user_join\", (username) => {\n    io.emit(\"user_join\", username);\n  });\n\n  socket.on(\"chat_message\", (data) => {\n    io.emit(\"chat_message\", data);\n    handleChatMessage(data);\n  });\n\n  socket.on(\"disconnect\", () => {\n    console.log(\"User disconnected\");\n  });\n});\n\napp.get(\"\/\", (req, res) => {\n  res.send(\"Hello, World\");\n});\n\napp.get(\"\/api\/messages\", async (req, res) => {\n  const response = await FetchAll();\n  res.send(response);\n});\n\napp.post(\"\/api\/put\", async (req, res) => {\n  const { username, message } = req.query;\n  let data = {\n    username,\n    message,\n  };\n  handleChatMessage(data);\n\n  res.send(\"done\");\n});\n\nserver.listen(PORT, HOST);\nconsole.log(`Running on http:\/\/${HOST}:${PORT}`);<\/code><\/pre>\n<\/div>\n<h3>\u30b3\u30fc\u30c9\u306e\u8aac\u660e<\/h3>\n<p>\u4e0a\u8a18\u306e\u30b3\u30fc\u30c9\u3067\u306f\u3001Express\u3001Socket.io\u3001GridDB\u3092\u4f7f\u3063\u3066\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u30fb\u30c1\u30e3\u30c3\u30c8\u30fb\u30b5\u30fc\u30d0\u30fc\u3092\u4f5c\u6210\u3057\u3066\u3044\u307e\u3059\u3002GridDB\u306b\u63a5\u7d9a\u3057\u3001\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u3001\u30e6\u30fc\u30b6\u30fc\u540d\u3001\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u30ab\u30e9\u30e0\u3092\u6301\u3064\u6642\u7cfb\u5217\u30b3\u30f3\u30c6\u30ca\u306b\u30c1\u30e3\u30c3\u30c8\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u683c\u7d0d\u30fb\u53d6\u5f97\u3057\u307e\u3059\u3002\u30b5\u30fc\u30d0\u306f\u30e6\u30fc\u30b6\u306e\u63a5\u7d9a\u3001\u5207\u65ad\u3001\u30c1\u30e3\u30c3\u30c8\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u8a18\u9332\u3057\u307e\u3059\u3002\u95a2\u6570 <code>handleChatMessage<\/code> \u306f\u975e\u540c\u671f\u306b\u30c1\u30e3\u30c3\u30c8\u30e1\u30c3\u30bb\u30fc\u30b8\u3092 GridDB \u306b\u683c\u7d0d\u3057\u307e\u3059\u3002\u30b5\u30fc\u30d0\u306f\u30a6\u30a7\u30d6\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u306b Express \u3092\u3001\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u901a\u4fe1\u306b Socket-io \u3092\u4f7f\u7528\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u30b3\u30fc\u30c9\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u6280\u8853\u3092\u52b9\u679c\u7684\u306b\u7d71\u5408\u3057\u3001\u5305\u62ec\u7684\u306a\u30c1\u30e3\u30c3\u30c8\u30b5\u30fc\u30d0\u3092\u5b9f\u73fe\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<h3>GridDB Initialization and Configuration<\/h3>\n<p>GridDB\u30b9\u30c8\u30a2\u306e\u521d\u671f\u5316\uff1a<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">const factory = griddb.StoreFactory.getInstance();\nconst store = factory.getStore({...});<\/code><\/pre>\n<\/div>\n<p>\u3053\u308c\u3089\u306e\u884c\u306f GridDB \u30b9\u30c8\u30a2\u3078\u306e\u63a5\u7d9a\u3092\u521d\u671f\u5316\u3057\u307e\u3059\u3002\u305d\u3057\u3066\u3001getStore() \u3092\u4f7f\u7528\u3057\u3066\u3001\u30af\u30e9\u30b9\u30bf\u540d\u3001\u901a\u77e5\u30e1\u30f3\u30d0\uff08\u30b5\u30fc\u30d0\u30a2\u30c9\u30ec\u30b9\uff09\u3001\u8a8d\u8a3c\u60c5\u5831\u306a\u3069\u306e\u8a2d\u5b9a\u60c5\u5831\u3092\u542b\u3080\u30b9\u30c8\u30a2\u63a5\u7d9a\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n<h4>\u30c1\u30e3\u30c3\u30c8\u30b3\u30f3\u30c6\u30ca\u30b9\u30ad\u30fc\u30de\u306e\u5b9a\u7fa9\uff1a<\/h4>\n<p>var timeConInfo = new griddb.ContainerInfo({&#8230;});<code>\u3053\u3053\u3067\u306f<\/code>Chat<code>\u3068\u3044\u3046\u540d\u524d\u306e GridDB \u30b3\u30f3\u30c6\u30ca\u306e\u30b9\u30ad\u30fc\u30de\u3092\u5b9a\u7fa9\u3059\u308b\u3002GridDB\u306e\u30b3\u30f3\u30c6\u30ca\u306f\u30ea\u30ec\u30fc\u30b7\u30e7\u30ca\u30eb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30c6\u30fc\u30d6\u30eb\u306b\u4f3c\u3066\u3044\u308b\u3002\u30b9\u30ad\u30fc\u30de\u3067\u306f\u3001\u30c1\u30e3\u30c3\u30c8\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u5fc5\u9808\u306e\u30c7\u30fc\u30bf\u30ab\u30e9\u30e0\u3067\u3042\u308b\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u3001\u30e6\u30fc\u30b6\u540d\u3001\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u6307\u5b9a\u3059\u308b\u3002\u30b3\u30f3\u30c6\u30ca\u306e\u30bf\u30a4\u30d7\u306f<\/code>TIME_SERIES` \u306b\u8a2d\u5b9a\u3055\u308c\u3001\u30c7\u30fc\u30bf\u304c\u6642\u7cfb\u5217\u3067\u3042\u308b\u3053\u3068\u3092\u793a\u3059\u3002<\/p>\n<h4>\u30c1\u30e3\u30c3\u30c8\u30b3\u30f3\u30c6\u30ca\u306e\u4f5c\u6210\/\u30a2\u30af\u30bb\u30b9\u3068\u521d\u671f\u30c7\u30fc\u30bf\u306e\u633f\u5165\uff1a<\/h4>\n<p>store.putContainer()`\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3057\u3066\u3001\u65b0\u3057\u3044\u30b3\u30f3\u30c6\u30ca\u3092\u4f5c\u6210\u3059\u308b\u304b\u3001\u63d0\u4f9b\u3055\u308c\u305f\u30b9\u30ad\u30fc\u30de\u306b\u57fa\u3065\u3044\u3066\u65e2\u5b58\u306e\u30b3\u30f3\u30c6\u30ca\u306b\u30a2\u30af\u30bb\u30b9\u3057\u307e\u3059\u3002\u3053\u306e\u30b3\u30fc\u30c9\u3067\u306f\u3001\u6642\u7cfb\u5217\u30b3\u30f3\u30c6\u30ca\u306b\u30b5\u30f3\u30d7\u30eb\u30ec\u30b3\u30fc\u30c9\u3092\u633f\u5165\u3059\u308b\u3002<\/p>\n<h4>\u30c1\u30e3\u30c3\u30c8\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306e GridDB \u30c7\u30fc\u30bf\u51e6\u7406<\/h4>\n<p><strong>\u6700\u8fd1\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u30af\u30a8\u30ea<\/strong><\/p>\n<p>\u3053\u306e\u30b3\u30fc\u30c9\u306b\u306f\u3001\u904e\u53bb 6 \u6642\u9593\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u53d6\u5f97\u3059\u308b\u30af\u30a8\u30ea\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002\u3053\u306e\u30af\u30a8\u30ea\u306f <code>time_series.query()<\/code> \u3092\u4f7f\u7528\u3057\u3066\u304a\u308a\u3001GridDB \u304c\u6642\u9593\u30d9\u30fc\u30b9\u306e\u30af\u30a8\u30ea\u3092\u52b9\u7387\u7684\u306b\u51e6\u7406\u3067\u304d\u308b\u3053\u3068\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p><strong>\u30c1\u30e3\u30c3\u30c8\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u633f\u5165<\/strong><\/p>\n<p>handleChatMessage \u95a2\u6570\u306f\u3001GridDB \u30b3\u30f3\u30c6\u30ca\u3078\u306e\u30c1\u30e3\u30c3\u30c8\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u683c\u7d0d\u3092\u51e6\u7406\u3059\u308b\u975e\u540c\u671f\u95a2\u6570\u3067\u3059\u3002\u5404\u30e1\u30c3\u30bb\u30fc\u30b8\u306f\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u3068\u9001\u4fe1\u8005\u306e\u30e6\u30fc\u30b6\u540d\u3068\u5171\u306b <code>Chat<\/code> \u30b3\u30f3\u30c6\u30ca\u306b\u633f\u5165\u3055\u308c\u307e\u3059\u3002\u3053\u306e\u95a2\u6570\u306f\u3001GridDB \u306b\u65b0\u3057\u3044\u30c7\u30fc\u30bf\u304c\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u306b\u8ffd\u52a0\u3055\u308c\u308b\u69d8\u5b50\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u65b0\u898f\u30d5\u30a1\u30a4\u30eb <code>New File.<\/code> \u3092\u30af\u30ea\u30c3\u30af\u3057\u3066 <code>index.html<\/code> \u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n<p><strong>\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u3092\u8ffd\u52a0\u3057\u307e\u3059<\/strong><\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-html\">&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n  &lt;head&gt;\n    &lt;title&gt;Chat App&lt;\/title&gt;\n    &lt;meta\n      name=\"viewport\"\n      content=\"width=device-width,minimum-scale=1,initial-scale=1\"\n    \/&gt;\n    &lt;style&gt;\n      body {\n        margin: 0;\n        font-family: sans-serif;\n      }\n\n      form {\n        position: fixed;\n        bottom: 0;\n        left: 0;\n        width: 100%;\n        display: flex;\n        box-sizing: border-box;\n        padding: 0.25rem;\n      }\n\n      form input {\n        border: 0;\n        padding: 0.5rem;\n        width: 100%;\n        outline: 0;\n        margin-right: 0.5rem;\n        border-radius: 0.25rem;\n        background: #ccc;\n      }\n\n      form button {\n        width: 6rem;\n        background-color: #1b8c00;\n        color: white;\n        border: none;\n        padding: 0.5rem;\n        cursor: pointer;\n        border-radius: 0.25rem;\n        text-transform: uppercase;\n      }\n\n      form button:hover {\n        background-color: #166d01;\n      }\n\n      .messages {\n        margin: 0;\n        padding: 0;\n        margin-bottom: 3rem;\n      }\n\n      .messages li {\n        padding: 0.5rem;\n      }\n\n      .messages li:nth-child(odd) {\n        background: #eee;\n      }\n    &lt;\/style&gt;\n  &lt;\/head&gt;\n  &lt;body&gt;\n    &lt;ul class=\"messages\"&gt;&lt;\/ul&gt;\n    &lt;form&gt;\n      &lt;input type=\"text\" class=\"input\" autocomplete=\"off\" autofocus \/&gt;\n      &lt;button&gt;Send&lt;\/button&gt;\n    &lt;\/form&gt;\n    &lt;!--Client side--&gt;\n    &lt;script src=\"\/socket.io\/socket.io.js\"&gt;&lt;\/script&gt;\n\n    &lt;script&gt;\n      const form = document.querySelector(\"form\");\n      const input = document.querySelector(\".input\");\n      const messages = document.querySelector(\".messages\");\n      const username = prompt(\"Please Enter Your Name\");\n      const socket = io();\n\n      form.addEventListener(\n        \"submit\",\n        function (event) {\n          event.preventDefault();\n\n          \/\/ addMessage(username + \": \" + input.value);\n\n          socket.emit(\"chat_message\", {\n            username: username,\n            message: input.value,\n          });\n\n          input.value = \"\";\n          return false;\n        },\n        false\n      );\n\n      socket.on(\"chat_message\", function (data) {\n        addMessage(data.username + \": \" + data.message);\n      });\n\n      socket.on(\"user_join\", function (data) {\n        addMessage(data + \" Has Joined\");\n        fetch(\"\/api\/messages\", {\n          method: \"GET\",\n          headers: {\n            \"Content-Type\": \"application\/json\",\n          },\n        })\n          .then((res) =&gt; {\n            res\n              .json()\n              .then((data) =&gt; {\n                console.log(data);\n                data.forEach((message) =&gt; {\n                  addMessage(message.username + \": \" + message.message);\n                });\n              })\n              .catch((err) =&gt; {\n                console.log(err);\n              });\n          })\n          .catch((err) =&gt; {\n            console.log(err);\n          });\n      });\n\n      socket.on(\"user_leave\", function (data) {\n        addMessage(data + \" Has Left\");\n      });\n      socket.on(\"disconnect\", function () {\n        addMessage(\"You Have Disconnected\");\n      });\n\n      addMessage(\"You Have Joined As \" + username);\n      socket.emit(\"user_join\", username);\n\n      function addMessage(message) {\n        const li = document.createElement(\"li\");\n        li.innerHTML = message;\n        messages.appendChild(li);\n        window.scrollTo(0, document.body.scrollHeight);\n      }\n    &lt;\/script&gt;\n  &lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<\/div>\n<p><strong>\u30b3\u30fc\u30c9\u306e\u8aac\u660e:<\/strong><\/p>\n<p>\u4e0a\u306e\u30b3\u30fc\u30c9\u306f\u3001\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u30fb\u30c1\u30e3\u30c3\u30c8\u30fb\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30fb\u30b5\u30a4\u30c9\u90e8\u5206\u3092\u8868\u3057\u3066\u3044\u307e\u3059\u3002 \u30bb\u30af\u30b7\u30e7\u30f3\u3092\u4f7f\u7528\u3057\u3066\u30b9\u30bf\u30a4\u30ea\u30f3\u30b0\u3092\u7d44\u307f\u8fbc\u307f\u3001\u69cb\u9020\u306f\u5f93\u6765\u306e HTML5 \u3067\u3059\u3002\u30c1\u30e3\u30c3\u30c8\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u9806\u5e8f\u306a\u3057\u30ea\u30b9\u30c8\u306f\u3001\u5165\u529b\u30d5\u30a3\u30fc\u30eb\u30c9\u3068\u30e1\u30c3\u30bb\u30fc\u30b8\u5165\u529b\u306e\u305f\u3081\u306e\u4e0b\u90e8\u306b\u3042\u308b&#8217;\u9001\u4fe1&#8217;\u30dc\u30bf\u30f3\u3092\u6301\u3064\u56fa\u5b9a\u30d5\u30a9\u30fc\u30e0\u3068\u4e00\u7dd2\u306b\u3001\u30dc\u30c7\u30a3\u306b\u542b\u307e\u308c\u3066\u3044\u307e\u3059\u3002\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u901a\u4fe1\u306f\u3001\u57cb\u3081\u8fbc\u307e\u308c\u305fJavaScript\u304cSocket.io\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u4f7f\u7528\u3057\u3066\u30b5\u30fc\u30d0\u30fc\u306b\u63a5\u7d9a\u3059\u308b\u3053\u3068\u306b\u3088\u3063\u3066\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\u30ed\u30b0\u30a4\u30f3\u306b\u306f\u30e6\u30fc\u30b6\u30fc\u5165\u529b\u304c\u5fc5\u8981\u3067\u3001\u30d5\u30a9\u30fc\u30e0\u306e\u9001\u4fe1\u306a\u3069\u4e00\u90e8\u306e\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3\u3067\u306f\u30b5\u30fc\u30d0\u30fc\u304cSocket.io\u30a4\u30d9\u30f3\u30c8\u3092\u53d7\u4fe1\u3057\u307e\u3059\u3002\u3055\u3089\u306b\u3001\u30b9\u30af\u30ea\u30d7\u30c8\u306f\u30b5\u30fc\u30d0\u30fc\u304b\u3089\u9001\u4fe1\u3055\u308c\u308b\u3055\u307e\u3056\u307e\u306a\u30a4\u30d9\u30f3\u30c8\u3092\u30ea\u30c3\u30b9\u30f3\u3059\u308b\u3053\u3068\u3067\u3001\u30e6\u30fc\u30b6\u30fc\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092\u52d5\u7684\u306b\u66f4\u65b0\u3057\u307e\u3059\u3002<\/p>\n<p><strong>Output:<\/strong><\/p>\n<p><a href=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/02\/ld_lib.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/02\/ld_lib.png\" alt=\"\" width=\"1368\" height=\"768\" class=\"aligncenter size-full wp-image-30000\" srcset=\"\/wp-content\/uploads\/2024\/02\/ld_lib.png 1368w, \/wp-content\/uploads\/2024\/02\/ld_lib-300x168.png 300w, \/wp-content\/uploads\/2024\/02\/ld_lib-1024x575.png 1024w, \/wp-content\/uploads\/2024\/02\/ld_lib-768x431.png 768w, \/wp-content\/uploads\/2024\/02\/ld_lib-150x85.png 150w, \/wp-content\/uploads\/2024\/02\/ld_lib-600x337.png 600w\" sizes=\"(max-width: 1368px) 100vw, 1368px\" \/><\/a><\/p>\n<p>\u6b21\u306b\u3001\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u3066\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u5b9f\u884c\u3057\u307e\u3059\uff1a<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">node server.js<\/code><\/pre>\n<\/div>\n<p><a href=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/02\/start.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/02\/start.png\" alt=\"\" width=\"887\" height=\"318\" class=\"aligncenter size-full wp-image-30002\" srcset=\"\/wp-content\/uploads\/2024\/02\/start.png 887w, \/wp-content\/uploads\/2024\/02\/start-300x108.png 300w, \/wp-content\/uploads\/2024\/02\/start-768x275.png 768w, \/wp-content\/uploads\/2024\/02\/start-600x215.png 600w\" sizes=\"(max-width: 887px) 100vw, 887px\" \/><\/a><\/p>\n<p>\u6b21\u306b\u3001\u30d6\u30e9\u30a6\u30b6\u3092\u958b\u304d\u3001URL <code>http:\/\/localhost:3000\/<\/code> \u3092\u5165\u529b\u3057\u3066\u3001<code>\u30e6\u30fc\u30b6\u30fc1<\/code> \u3068\u3057\u3066\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u8d77\u52d5\u3057\u307e\u3059\u3002\u6b21\u306b\u3001\u5225\u306e\u30d6\u30e9\u30a6\u30b6\u30fc\u30a6\u30a3\u30f3\u30c9\u30a6\u3092\u958b\u304d\u3001\u540c\u3058URL\u3092\u5165\u529b\u3057\u3066<code>\u30e6\u30fc\u30b6\u30fc2<\/code>\u3068\u3057\u3066\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u8d77\u52d5\u3057\u307e\u3059\u3002<\/p>\n<p>\u6b21\u306b\u3001\u5165\u529b\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u5165\u529b\u3057\u3001<code>Send<\/code>\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3057\u307e\u3059\u3002\u30e1\u30c3\u30bb\u30fc\u30b8\u306f\u4e21\u65b9\u306e\u30d6\u30e9\u30a6\u30b6\u30fc\u30a6\u30a3\u30f3\u30c9\u30a6\u306b\u8868\u793a\u3055\u308c\u307e\u3059\u3002<\/p>\n<p>\u51fa\u529b\u306f\u3053\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\uff1a<\/p>\n<p><a href=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/02\/chat_ui.pngloads\/2024\/02\/chat_ui.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/griddb.net\/wp-content\/uploads\/2024\/02\/chat_ui.png\" alt=\"\" width=\"1368\" height=\"768\" class=\"aligncenter size-full wp-image-30004\" srcset=\"\/wp-content\/uploads\/2024\/02\/chat_ui.png 1368w, \/wp-content\/uploads\/2024\/02\/chat_ui-300x168.png 300w, \/wp-content\/uploads\/2024\/02\/chat_ui-1024x575.png 1024w, \/wp-content\/uploads\/2024\/02\/chat_ui-768x431.png 768w, \/wp-content\/uploads\/2024\/02\/chat_ui-150x85.png 150w, \/wp-content\/uploads\/2024\/02\/chat_ui-600x337.png 600w\" sizes=\"(max-width: 1368px) 100vw, 1368px\" \/><\/a><\/p>\n<p>\u3054\u89a7\u306e\u3088\u3046\u306b\u3001\u30e1\u30c3\u30bb\u30fc\u30b8\u306f\u4e21\u65b9\u306e\u30d6\u30e9\u30a6\u30b6\u30fb\u30a6\u30a3\u30f3\u30c9\u30a6\u306b\u8868\u793a\u3055\u308c\u307e\u3059\u3002\u30e1\u30c3\u30bb\u30fc\u30b8\u306fGridDB\u306b\u3082\u4fdd\u5b58\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<h2>\u307e\u3068\u3081<\/h2>\n<p>\u3053\u306e\u30ac\u30a4\u30c9\u3067\u306f\u3001Node.js \u306e\u30d1\u30ef\u30fc\u3068 GridDB \u306e\u5805\u7262\u306a\u30c7\u30fc\u30bf\u7ba1\u7406\u6a5f\u80fd\u3092\u7d44\u307f\u5408\u308f\u305b\u3066\u3001\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u30fb\u30c1\u30e3\u30c3\u30c8\u30fb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u4f5c\u6210\u3059\u308b\u624b\u9806\u3092\u8aac\u660e\u3057\u307e\u3057\u305f\u3002\u3053\u306e\u6280\u8853\u306e\u7d44\u307f\u5408\u308f\u305b\u306f\u3001\u30b5\u30fc\u30d0\u30fc\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3092\u52b9\u7387\u5316\u3059\u308bExpress\u3068\u30b7\u30fc\u30e0\u30ec\u30b9\u306a\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u901a\u4fe1\u3092\u5b9f\u73fe\u3059\u308bSocket.io\u3068\u3068\u3082\u306b\u3001\u5373\u6642\u3067\u30a4\u30f3\u30bf\u30e9\u30af\u30c6\u30a3\u30d6\u306a\u30e1\u30c3\u30bb\u30fc\u30b8\u30f3\u30b0\u306e\u305f\u3081\u306e\u30c0\u30a4\u30ca\u30df\u30c3\u30af\u306a\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3092\u5f62\u6210\u3057\u307e\u3059\u3002<\/p>\n<p>\u5404\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u304c\u3044\u304b\u306b\u91cd\u8981\u306a\u5f79\u5272\u3092\u679c\u305f\u3057\u3066\u3044\u308b\u304b\u3001\u304a\u5206\u304b\u308a\u3044\u305f\u3060\u3051\u305f\u3060\u3051\u305f\u3067\u3057\u3087\u3046\uff1a Node.js\u306f\u30d0\u30c3\u30af\u30dc\u30fc\u30f3\u3068\u3057\u3066\u6a5f\u80fd\u3057\u3001GridDB\u306f\u52b9\u7387\u7684\u306b\u30c1\u30e3\u30c3\u30c8\u30c7\u30fc\u30bf\u3092\u7ba1\u7406\u3057\u3001Express\u306f\u30a6\u30a7\u30d6\u30b5\u30fc\u30d0\u30fc\u306e\u8a2d\u5b9a\u3092\u7c21\u7d20\u5316\u3057\u3001Socket.io\u306f\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u3067\u30e1\u30c3\u30bb\u30fc\u30b8\u304c\u4ea4\u63db\u3055\u308c\u308b\u3053\u3068\u3092\u4fdd\u8a3c\u3057\u307e\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u306f\u3058\u3081\u306b \u3053\u306e\u30c1\u30e5\u30fc\u30c8\u30ea\u30a2\u30eb\u3067\u306f\u3001\u30a8\u30ad\u30b5\u30a4\u30c6\u30a3\u30f3\u30b0\u306a\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u30c1\u30e3\u30c3\u30c8\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u4e16\u754c\u306b\u98db\u3073\u8fbc\u307f\u307e\u3059\u3002\u4e16\u754c\u4e2d\u306e\u3069\u3053\u306b\u3044\u3066\u3082\u3001\u53cb\u9054\u3084\u5bb6\u65cf\u3001\u540c\u50da\u3068\u3059\u3050\u306b\u3064\u306a\u304c\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u3053\u3068\u3092\u60f3\u50cf\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002\u305d\u308c\u304c\u30ea\u30a2\u30eb\u30bf\u30a4 [&hellip;]<\/p>\n","protected":false},"author":41,"featured_media":49327,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1005],"tags":[],"class_list":["post-50892","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-1005"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Node.js\u3068GridDB\u3067\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u30fb\u30c1\u30e3\u30c3\u30c8\u30fb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3059\u308b\u65b9\u6cd5 | GridDB: Open Source Time Series Database for IoT<\/title>\n<meta name=\"description\" content=\"\u306f\u3058\u3081\u306b\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/griddb.net\/ja\/\u672a\u5206\u985e\/how-to-build-a-real-time-chat-application-with-node-js-and-griddb\/\" \/>\n<meta property=\"og:locale\" content=\"ja_JP\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Node.js\u3068GridDB\u3067\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u30fb\u30c1\u30e3\u30c3\u30c8\u30fb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3059\u308b\u65b9\u6cd5 | GridDB: Open Source Time Series Database for IoT\" \/>\n<meta property=\"og:description\" content=\"\u306f\u3058\u3081\u306b\" \/>\n<meta property=\"og:url\" content=\"https:\/\/griddb.net\/ja\/\u672a\u5206\u985e\/how-to-build-a-real-time-chat-application-with-node-js-and-griddb\/\" \/>\n<meta property=\"og:site_name\" content=\"GridDB: Open Source Time Series Database for IoT\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/griddbcommunity\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-02-28T08:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-14T15:56:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/griddb.net\/wp-content\/uploads\/2021\/11\/img1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"543\" \/>\n\t<meta property=\"og:image:height\" content=\"273\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"griddb-admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@GridDBCommunity\" \/>\n<meta name=\"twitter:site\" content=\"@GridDBCommunity\" \/>\n<meta name=\"twitter:label1\" content=\"\u57f7\u7b46\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"griddb-admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593\" \/>\n\t<meta name=\"twitter:data2\" content=\"5\u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/how-to-build-a-real-time-chat-application-with-node-js-and-griddb\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/how-to-build-a-real-time-chat-application-with-node-js-and-griddb\/\"},\"author\":{\"name\":\"griddb-admin\",\"@id\":\"https:\/\/griddb.net\/en\/#\/schema\/person\/4fe914ca9576878e82f5e8dd3ba52233\"},\"headline\":\"Node.js\u3068GridDB\u3067\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u30fb\u30c1\u30e3\u30c3\u30c8\u30fb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3059\u308b\u65b9\u6cd5\",\"datePublished\":\"2024-02-28T08:00:00+00:00\",\"dateModified\":\"2025-11-14T15:56:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/how-to-build-a-real-time-chat-application-with-node-js-and-griddb\/\"},\"wordCount\":143,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/griddb.net\/en\/#organization\"},\"image\":{\"@id\":\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/how-to-build-a-real-time-chat-application-with-node-js-and-griddb\/#primaryimage\"},\"thumbnailUrl\":\"\/wp-content\/uploads\/2021\/11\/img1.png\",\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/how-to-build-a-real-time-chat-application-with-node-js-and-griddb\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/how-to-build-a-real-time-chat-application-with-node-js-and-griddb\/\",\"url\":\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/how-to-build-a-real-time-chat-application-with-node-js-and-griddb\/\",\"name\":\"Node.js\u3068GridDB\u3067\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u30fb\u30c1\u30e3\u30c3\u30c8\u30fb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3059\u308b\u65b9\u6cd5 | GridDB: Open Source Time Series Database for IoT\",\"isPartOf\":{\"@id\":\"https:\/\/griddb.net\/en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/how-to-build-a-real-time-chat-application-with-node-js-and-griddb\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/how-to-build-a-real-time-chat-application-with-node-js-and-griddb\/#primaryimage\"},\"thumbnailUrl\":\"\/wp-content\/uploads\/2021\/11\/img1.png\",\"datePublished\":\"2024-02-28T08:00:00+00:00\",\"dateModified\":\"2025-11-14T15:56:36+00:00\",\"description\":\"\u306f\u3058\u3081\u306b\",\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/how-to-build-a-real-time-chat-application-with-node-js-and-griddb\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/how-to-build-a-real-time-chat-application-with-node-js-and-griddb\/#primaryimage\",\"url\":\"\/wp-content\/uploads\/2021\/11\/img1.png\",\"contentUrl\":\"\/wp-content\/uploads\/2021\/11\/img1.png\",\"width\":543,\"height\":273},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/griddb.net\/en\/#website\",\"url\":\"https:\/\/griddb.net\/en\/\",\"name\":\"GridDB: Open Source Time Series Database for IoT\",\"description\":\"GridDB is an open source time-series database with the performance of NoSQL and convenience of SQL\",\"publisher\":{\"@id\":\"https:\/\/griddb.net\/en\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/griddb.net\/en\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ja\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/griddb.net\/en\/#organization\",\"name\":\"Fixstars\",\"url\":\"https:\/\/griddb.net\/en\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\/\/griddb.net\/en\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png\",\"contentUrl\":\"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png\",\"width\":200,\"height\":83,\"caption\":\"Fixstars\"},\"image\":{\"@id\":\"https:\/\/griddb.net\/en\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/griddbcommunity\/\",\"https:\/\/x.com\/GridDBCommunity\",\"https:\/\/www.linkedin.com\/company\/griddb-by-toshiba\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/griddb.net\/en\/#\/schema\/person\/4fe914ca9576878e82f5e8dd3ba52233\",\"name\":\"griddb-admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\/\/griddb.net\/en\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/5bceca1cafc06886a7ba873e2f0a28011a1176c4dea59709f735b63ae30d0342?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/5bceca1cafc06886a7ba873e2f0a28011a1176c4dea59709f735b63ae30d0342?s=96&d=mm&r=g\",\"caption\":\"griddb-admin\"},\"url\":\"https:\/\/griddb.net\/ja\/author\/griddb-admin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Node.js\u3068GridDB\u3067\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u30fb\u30c1\u30e3\u30c3\u30c8\u30fb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3059\u308b\u65b9\u6cd5 | GridDB: Open Source Time Series Database for IoT","description":"\u306f\u3058\u3081\u306b","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/griddb.net\/ja\/\u672a\u5206\u985e\/how-to-build-a-real-time-chat-application-with-node-js-and-griddb\/","og_locale":"ja_JP","og_type":"article","og_title":"Node.js\u3068GridDB\u3067\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u30fb\u30c1\u30e3\u30c3\u30c8\u30fb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3059\u308b\u65b9\u6cd5 | GridDB: Open Source Time Series Database for IoT","og_description":"\u306f\u3058\u3081\u306b","og_url":"https:\/\/griddb.net\/ja\/\u672a\u5206\u985e\/how-to-build-a-real-time-chat-application-with-node-js-and-griddb\/","og_site_name":"GridDB: Open Source Time Series Database for IoT","article_publisher":"https:\/\/www.facebook.com\/griddbcommunity\/","article_published_time":"2024-02-28T08:00:00+00:00","article_modified_time":"2025-11-14T15:56:36+00:00","og_image":[{"width":543,"height":273,"url":"https:\/\/griddb.net\/wp-content\/uploads\/2021\/11\/img1.png","type":"image\/png"}],"author":"griddb-admin","twitter_card":"summary_large_image","twitter_creator":"@GridDBCommunity","twitter_site":"@GridDBCommunity","twitter_misc":{"\u57f7\u7b46\u8005":"griddb-admin","\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593":"5\u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/how-to-build-a-real-time-chat-application-with-node-js-and-griddb\/#article","isPartOf":{"@id":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/how-to-build-a-real-time-chat-application-with-node-js-and-griddb\/"},"author":{"name":"griddb-admin","@id":"https:\/\/griddb.net\/en\/#\/schema\/person\/4fe914ca9576878e82f5e8dd3ba52233"},"headline":"Node.js\u3068GridDB\u3067\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u30fb\u30c1\u30e3\u30c3\u30c8\u30fb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3059\u308b\u65b9\u6cd5","datePublished":"2024-02-28T08:00:00+00:00","dateModified":"2025-11-14T15:56:36+00:00","mainEntityOfPage":{"@id":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/how-to-build-a-real-time-chat-application-with-node-js-and-griddb\/"},"wordCount":143,"commentCount":0,"publisher":{"@id":"https:\/\/griddb.net\/en\/#organization"},"image":{"@id":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/how-to-build-a-real-time-chat-application-with-node-js-and-griddb\/#primaryimage"},"thumbnailUrl":"\/wp-content\/uploads\/2021\/11\/img1.png","inLanguage":"ja","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/how-to-build-a-real-time-chat-application-with-node-js-and-griddb\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/how-to-build-a-real-time-chat-application-with-node-js-and-griddb\/","url":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/how-to-build-a-real-time-chat-application-with-node-js-and-griddb\/","name":"Node.js\u3068GridDB\u3067\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u30fb\u30c1\u30e3\u30c3\u30c8\u30fb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u69cb\u7bc9\u3059\u308b\u65b9\u6cd5 | GridDB: Open Source Time Series Database for IoT","isPartOf":{"@id":"https:\/\/griddb.net\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/how-to-build-a-real-time-chat-application-with-node-js-and-griddb\/#primaryimage"},"image":{"@id":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/how-to-build-a-real-time-chat-application-with-node-js-and-griddb\/#primaryimage"},"thumbnailUrl":"\/wp-content\/uploads\/2021\/11\/img1.png","datePublished":"2024-02-28T08:00:00+00:00","dateModified":"2025-11-14T15:56:36+00:00","description":"\u306f\u3058\u3081\u306b","inLanguage":"ja","potentialAction":[{"@type":"ReadAction","target":["https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/how-to-build-a-real-time-chat-application-with-node-js-and-griddb\/"]}]},{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/how-to-build-a-real-time-chat-application-with-node-js-and-griddb\/#primaryimage","url":"\/wp-content\/uploads\/2021\/11\/img1.png","contentUrl":"\/wp-content\/uploads\/2021\/11\/img1.png","width":543,"height":273},{"@type":"WebSite","@id":"https:\/\/griddb.net\/en\/#website","url":"https:\/\/griddb.net\/en\/","name":"GridDB: Open Source Time Series Database for IoT","description":"GridDB is an open source time-series database with the performance of NoSQL and convenience of SQL","publisher":{"@id":"https:\/\/griddb.net\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/griddb.net\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ja"},{"@type":"Organization","@id":"https:\/\/griddb.net\/en\/#organization","name":"Fixstars","url":"https:\/\/griddb.net\/en\/","logo":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/griddb.net\/en\/#\/schema\/logo\/image\/","url":"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png","contentUrl":"https:\/\/griddb.net\/wp-content\/uploads\/2019\/04\/fixstars_logo_web_tagline.png","width":200,"height":83,"caption":"Fixstars"},"image":{"@id":"https:\/\/griddb.net\/en\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/griddbcommunity\/","https:\/\/x.com\/GridDBCommunity","https:\/\/www.linkedin.com\/company\/griddb-by-toshiba"]},{"@type":"Person","@id":"https:\/\/griddb.net\/en\/#\/schema\/person\/4fe914ca9576878e82f5e8dd3ba52233","name":"griddb-admin","image":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/griddb.net\/en\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/5bceca1cafc06886a7ba873e2f0a28011a1176c4dea59709f735b63ae30d0342?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5bceca1cafc06886a7ba873e2f0a28011a1176c4dea59709f735b63ae30d0342?s=96&d=mm&r=g","caption":"griddb-admin"},"url":"https:\/\/griddb.net\/ja\/author\/griddb-admin\/"}]}},"_links":{"self":[{"href":"https:\/\/griddb.net\/ja\/wp-json\/wp\/v2\/posts\/50892","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/griddb.net\/ja\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/griddb.net\/ja\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/griddb.net\/ja\/wp-json\/wp\/v2\/users\/41"}],"replies":[{"embeddable":true,"href":"https:\/\/griddb.net\/ja\/wp-json\/wp\/v2\/comments?post=50892"}],"version-history":[{"count":1,"href":"https:\/\/griddb.net\/ja\/wp-json\/wp\/v2\/posts\/50892\/revisions"}],"predecessor-version":[{"id":51713,"href":"https:\/\/griddb.net\/ja\/wp-json\/wp\/v2\/posts\/50892\/revisions\/51713"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/griddb.net\/ja\/wp-json\/wp\/v2\/media\/49327"}],"wp:attachment":[{"href":"https:\/\/griddb.net\/ja\/wp-json\/wp\/v2\/media?parent=50892"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/griddb.net\/ja\/wp-json\/wp\/v2\/categories?post=50892"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/griddb.net\/ja\/wp-json\/wp\/v2\/tags?post=50892"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}