{"id":50815,"date":"2022-03-25T00:00:00","date_gmt":"2022-03-25T07:00:00","guid":{"rendered":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/%e6%9c%aa%e5%88%86%e9%a1%9e\/visualize-data-with-griddb-and-the-webapi-using-react-js\/"},"modified":"2026-03-30T14:40:45","modified_gmt":"2026-03-30T21:40:45","slug":"visualize-data-with-griddb-and-the-webapi-using-react-js","status":"publish","type":"post","link":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/visualize-data-with-griddb-and-the-webapi-using-react-js\/","title":{"rendered":"React.js\u3092\u7528\u3044\u305fGridDB\u3068WebAPI\u306b\u3088\u308b\u30c7\u30fc\u30bf\u306e\u53ef\u8996\u5316"},"content":{"rendered":"<h2>\u306f\u3058\u3081\u306b<\/h2>\n<p>\u3053\u306e\u30d6\u30ed\u30b0\u3067\u306f\u3001Web\u30a2\u30d7\u30ea\u306e\u304a\u4f9b\u3068\u3057\u3066GridDB\u3092\u4f7f\u3046\u65b9\u6cd5\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002\u5177\u4f53\u7684\u306b\u306f\u3001\u30b9\u30ad\u30fc\u30de\u306e\u4f5c\u6210\u3001\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u3001\u30af\u30a8\u30ea\u306e\u3059\u3079\u3066\u306e\u30b9\u30c6\u30c3\u30d7\u3067<a href=\"https:\/\/griddb.net\/en\/blog\/griddb-webapi\/\">GridDB WebAPI<\/a>\u3092\u5229\u7528\u3059\u308b\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n<p>\u5168\u3066\u306e\u30d7\u30ed\u30bb\u30b9\u306fReact.js\u306e\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u3067\u51e6\u7406\u3055\u308c\u307e\u3059\u3002\u3064\u307e\u308a\u3001\u30e6\u30fc\u30b6\u306fGridDB WebAPI\u306e\u8a8d\u8a3c\u60c5\u5831\u3092\u5165\u529b\u3057\u3001CSV\u30d5\u30a1\u30a4\u30eb\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3057\u3001\u30b3\u30f3\u30c6\u30ca\u304c<code>COLLECTION<\/code>\u304b<code>TIMESERIES<\/code>\u304b\u3092\u9078\u629e\u3057\u3001GridDB\u306b\u9069\u5207\u306a\u30b9\u30ad\u30fc\u30de\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u30b3\u30f3\u30c6\u30ca\u304c\u4f5c\u6210\u3055\u308c\u308b\u3068\u3001<code>.csv<\/code>\u30d5\u30a1\u30a4\u30eb\u5168\u4f53\u304c\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u4e0a\u306b\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u307e\u3059\u3002<\/p>\n<p>\u30c7\u30fc\u30bf\u304c\u63c3\u3063\u305f\u3089\u3001\u30af\u30a8\u30ea\u3067\u30b5\u30fc\u30d0\u304b\u3089\u30c7\u30fc\u30bf\u3092\u53d7\u3051\u53d6\u308a\u3001\u6700\u7d42\u7684\u306b <code>recharts<\/code> <a href=\"https:\/\/recharts.github.io\/?p=\/en-US\">library<\/a> \u3092\u4f7f\u3063\u3066\u53ef\u8996\u5316\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<h2>\u524d\u63d0\u6761\u4ef6<\/h2>\n<p>\u307e\u305a\u306f\u3001GridDB\u30b5\u30fc\u30d0\u3092\u7acb\u3061\u4e0a\u3052\u3066\u304f\u3060\u3055\u3044\u3002\u307e\u305f\u3001GridDB WebAPI\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3001\u30b5\u30fc\u30d0\u4e0a\u3067\u52d5\u4f5c\u3055\u305b\u307e\u3059\u3002<\/p>\n<p>\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u3067\u306f\u3001react.js \u3068\u30c1\u30e3\u30fc\u30c8\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<code>package.json<\/code>\u30d5\u30a1\u30a4\u30eb\u3068\u306f\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u3082\u306e\u3067\u3059\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-javascript\">{\n  \"name\": \"griddb-charts\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"dependencies\": {\n    \"@emotion\/react\": \"^11.8.2\",\n    \"@emotion\/styled\": \"^11.8.1\",\n    \"@mui\/material\": \"^5.5.0\",\n    \"@testing-library\/jest-dom\": \"^5.16.2\",\n    \"@testing-library\/react\": \"^12.1.4\",\n    \"@testing-library\/user-event\": \"^13.5.0\",\n    \"axios\": \"^0.26.1\",\n    \"react\": \"^17.0.2\",\n    \"react-dom\": \"^17.0.2\",\n    \"react-scripts\": \"5.0.0\",\n    \"recharts\": \"^2.1.9\",\n    \"web-vitals\": \"^2.1.4\"\n  },\n  \"scripts\": {\n    \"start\": \"react-scripts start\",\n    \"build\": \"react-scripts build\",\n    \"test\": \"react-scripts test\",\n    \"eject\": \"react-scripts eject\"\n  },\n  \"eslintConfig\": {\n    \"extends\": [\n      \"react-app\",\n      \"react-app\/jest\"\n    ]\n  },\n  \"browserslist\": {\n    \"production\": [\n      \">0.2%\",\n      \"not dead\",\n      \"not op_mini all\"\n    ],\n    \"development\": [\n      \"last 1 chrome version\",\n      \"last 1 firefox version\",\n      \"last 1 safari version\"\n    ]\n  }\n}<\/code><\/pre>\n<\/div>\n<p>\u30d5\u30a1\u30a4\u30eb\u306e\u30c8\u30c3\u30d7\u306b\u306f\u3001\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u305f\u3082\u306e\u3082\u3059\u3079\u3066\u53d6\u308a\u8fbc\u307f\u307e\u3059\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-javascript\">import React, { useState, useEffect } from 'react';\nimport '.\/App.css';\nimport { usePapaParse } from 'react-papaparse';\n\nimport {\n  BarChart,\n  Bar,\n  XAxis,\n  YAxis,\n  Tooltip,\n  Legend\n} from \"recharts\";\nimport Box from '@mui\/material\/Box';\nimport InputLabel from '@mui\/material\/InputLabel';\nimport MenuItem from '@mui\/material\/MenuItem';\nimport FormControl from '@mui\/material\/FormControl';\nimport Select from '@mui\/material\/Select';\nimport Container from '@mui\/material\/Container';\nimport TextField from '@mui\/material\/TextField';\nimport Button from '@mui\/material\/Button';\nimport Dialog from '@mui\/material\/Dialog';\nimport DialogActions from '@mui\/material\/DialogActions';\nimport DialogContent from '@mui\/material\/DialogContent';\nimport FormHelperText from \"@mui\/material\/FormHelperText\";\nimport Grid from '@mui\/material\/Grid'<\/code><\/pre>\n<\/div>\n<h2>ETL<\/h2>\n<p>\u5b9f\u88c5\u306b\u3064\u3044\u3066\u306f\u3001\u30e6\u30fc\u30b6\u30fc\u8a8d\u8a3c\u3001\u30b9\u30ad\u30fc\u30de\u3068\u30b3\u30f3\u30c6\u30ca\u306e\u4f5c\u6210\u3068\u9001\u4fe1\u3001\u30b3\u30f3\u30c6\u30ca\u3078\u306e\u30c7\u30fc\u30bf\u306e\u30d7\u30c3\u30b7\u30e5\u3001\u30c7\u30fc\u30bf\u306e\u30af\u30a8\u30ea\u3001\u305d\u3057\u3066\u30c7\u30fc\u30bf\u3092\u30c1\u30e3\u30fc\u30c8\u306b\u8868\u793a\u3059\u308b\u3068\u3053\u308d\u307e\u3067\u3092\u9806\u756a\u306b\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n<h3>\u8a3c\u660e\u66f8<\/h3>\n<p>\u307e\u305a\u59cb\u3081\u306b\u3001\u30e6\u30fc\u30b6\u3068\u7ba1\u7406\u8005\u306e\u8a8d\u8a3c\u60c5\u5831\u3092\u5165\u529b\u3059\u308b\u305f\u3081\u306e\u7c21\u5358\u306a\u30c6\u30ad\u30b9\u30c8\u30fb\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u3044\u304f\u3064\u304b\u4f5c\u6210\u3057\u307e\u3059\u3002\u3053\u306e\u30d6\u30ed\u30b0\u3067\u306f\u3001GridDB \u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u3067\u3042\u308b admin\/admin \u3092\u3001\u30b3\u30f3\u30bb\u30d7\u30c8\u306e\u8a3c\u660e\u3068\u3057\u3066\u4f7f\u7528\u3059\u308b\u3053\u3068\u306b\u3057\u307e\u3059\u3002<\/p>\n<p>\u307e\u305f\u3001\u4f8b\u3092\u30b7\u30f3\u30d7\u30eb\u306b\u3059\u308b\u305f\u3081\u306b\u3001<a href=\"https:\/\/mui.com\/getting-started\/installation\/\">material ui<\/a> \u306eReact.js\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-html\">        &lt;TextField\n            id=\"user\"\n            label=\"Username\"\n            variant=\"standard\"\n            onChange={handleUser}\n            required={true}\n          \/&gt;\n          &lt;TextField\n            id=\"standard-basic\"\n            label=\"Password\"\n            variant=\"standard\"\n            onChange={handlePass}\n            required={true}\n          \/&gt;<\/code><\/pre>\n<\/div>\n<p>\u3053\u3053\u3067\u306f\u3001\u30c6\u30ad\u30b9\u30c8\u30d5\u30a3\u30fc\u30eb\u30c9\u3092\u5225\u3005\u306e\u95a2\u6570\u3067\u51e6\u7406\u3057\u3066\u3044\u308b\u3053\u3068\u304c\u308f\u304b\u308a\u307e\u3059\u3002React\u306e <code>useState<\/code> \u3092\u4f7f\u3063\u3066\u5909\u66f4\u3092\u51e6\u7406\u3057\u3001\u30e6\u30fc\u30b6\u30fc\u306e\u5165\u529b\u3092\u4fdd\u5b58\u3057\u3066\u3044\u307e\u3059\u3002\u30b7\u30f3\u30d7\u30eb\u306b\u3059\u308b\u305f\u3081\u306b\u3001\u4f55\u3089\u304b\u306e\u30c1\u30a7\u30c3\u30af\u306f\u884c\u308f\u305a\u3001\u5358\u7d14\u306b\u3059\u3079\u3066\u306e\u5165\u529b\u3092state\u306b\u4fdd\u5b58\u3057\u307e\u3059\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-javascript\">  const [user, setUser] = useState('')\n  const [pass, setPass] = useState('')\n\n  const handleUser = (event) => {\n    let val = event.target.value\n    setUser(val)\n  }\n\n  const handlePass = (event) => {\n    let val = event.target.value\n    setPass(val)\n  }<\/code><\/pre>\n<\/div>\n<p>\u9069\u5207\u306a javascript \u306e <code>fetch<\/code> \u30ea\u30af\u30a8\u30b9\u30c8\u3092\u4f5c\u6210\u3059\u308b\u305f\u3081\u306b\u3001\u30e6\u30fc\u30b6\u30fc\u306e\u8a8d\u8a3c\u60c5\u5831\u3092 base64 \u306b\u5909\u63db\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u306f\u6b21\u306e\u3088\u3046\u306b\u884c\u3044\u307e\u3059\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-javascript\">  const [encodedUserPass, setEncodedUserPass] = useState('')\n\n  useEffect(() => {\n    let encodedUserPass = btoa(user + \":\" + pass)\n    setEncodedUserPass(encodedUserPass)\n  }, [pass])<\/code><\/pre>\n<\/div>\n<p><code>useEffect<\/code>\u306e\u95a2\u6570\u30b3\u30fc\u30eb\u30d0\u30c3\u30af\u306e\u5f8c\u306e <code>[pass]<\/code> \u306f\u3001\u30b9\u30c6\u30fc\u30c8\u5909\u6570 <code>pass<\/code> \u304c\u66f4\u65b0\u3055\u308c\u305f\u3068\u304d\u306b\u3001\u3053\u306e\u7279\u5b9a\u306e\u95a2\u6570\u3092\u66f4\u65b0\u3059\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u3066\u3044\u307e\u3059\u3002\u6700\u3082\u304d\u308c\u3044\u306a\u89e3\u6c7a\u7b56\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u304c\u3001\u4eca\u56de\u306e\u76ee\u7684\u306b\u306f\u5408\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n<h3>CSV\u30d5\u30a1\u30a4\u30eb\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3059\u308b<\/h3>\n<p>\u307e\u305a\u3001\u30e6\u30fc\u30b6\u304c <code>.csv<\/code> \u30d5\u30a1\u30a4\u30eb\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u307e\u3057\u3087\u3046\u3002\u3053\u308c\u306fHTML\u3092\u4f7f\u3063\u3066\u975e\u5e38\u306b\u7c21\u5358\u306b\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-html\">&lt;label &gt;Choose a CSV File to Upload:&lt;\/label&gt;\n\n        &lt;input type=\"file\"\n          id=\"csvFile\" name=\"file\" onChange={fileHandler}\n          accept=\".csv\"&gt;&lt;\/input&gt;\n          <\/code><\/pre>\n<\/div>\n<p>\u3053\u306e <code>fileHandler<\/code> \u95a2\u6570\u306f <code>papa-parse<\/code> \u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u5229\u7528\u3057\u3066\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u307f\u3001\u5185\u5bb9\u3092\u30d1\u30fc\u30b9\u3057\u3066\u5f8c\u3067\u4f7f\u7528\u3059\u308b\u305f\u3081\u306b\u3044\u304f\u3064\u304b\u306e React \u30b9\u30c6\u30fc\u30c8\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-javascript\">import { usePapaParse } from 'react-papaparse';\n  const { readString } = usePapaParse();\n\n  const [fullCsvData, setFullCsvData] = useState(null);\n  const [fileName, setFileName] = useState('');\n  const [selectedFile, setSelectedFile] = useState(null);\n\n  const fileHandler = (event) => {\n    const file = event.target.files[0]\n    let name = file.name\n    let x = name.substring(0, name.indexOf('.')); \/\/remove the .csv file extension\n    const reader = new FileReader();\n    reader.addEventListener('load', (event) => {\n      var data = event.target.result\n\n      readString(data, {\n        worker: true,\n        complete: (results) => {\n          setFileName(x)\n          console.log(\"selected file: \", results.data[0])\n          setFullCsvData(results.data)\n          setSelectedFile(results.data[0]);\n          setOpen(true)\n        },\n      });\n    });\n\n    reader.readAsText(file);\n\n  };<\/code><\/pre>\n<\/div>\n<p>\u30e6\u30fc\u30b6\u304c <code>.csv<\/code> \u30d5\u30a1\u30a4\u30eb\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3059\u308b\u3068\u3001 <code>fileHandler<\/code> \u95a2\u6570\u304c\u8d77\u52d5\u3057\u3001 <code>event<\/code> \u3068\u3057\u3066\u30d5\u30a1\u30a4\u30eb\u3092\u53d7\u3051\u53d6\u308a\u307e\u3059\u3002\u305d\u3057\u3066\u3001\u30d5\u30a1\u30a4\u30eb\u306e\u5185\u5bb9\u3092\u8aad\u307f\u8fbc\u3093\u3067\u3001\u3059\u3079\u3066\u3092\u30d1\u30fc\u30b9\u3057\u307e\u3059\u3002\u30d1\u30fc\u30b9\u3055\u308c\u308b\u3068\u3001\u69d8\u3005\u306a React \u30b9\u30c6\u30fc\u30c8\u304c\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002\u30d5\u30a1\u30a4\u30eb\u540d\u3001csv \u30b3\u30f3\u30c6\u30f3\u30c4\u5168\u4f53\u3001\u305d\u3057\u3066\u30ab\u30e9\u30e0\u540d\u306b\u5bfe\u5fdc\u3059\u308b\u30c7\u30fc\u30bf\u306e\u6700\u521d\u306e\u914d\u5217\u304c\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002<\/p>\n<h3>\u30ab\u30e9\u30e0\u30bf\u30a4\u30d7\u3092\u8a2d\u5b9a\u3059\u308b<\/h3>\n<p>\u30e6\u30fc\u30b6\u30fc\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u89e3\u6790\u3059\u308b\u969b\u3001\u884c\u306e\u30c7\u30fc\u30bf\u578b\u3092\u78ba\u5b9f\u306b\u89e3\u6790\u3059\u308b\u3053\u3068\u304c\u56f0\u96e3\u306a\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e\u554f\u984c\u3092\u56de\u907f\u3059\u308b\u305f\u3081\u306b\u3001\u30d5\u30a1\u30a4\u30eb\u304c\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3055\u308c\u308b\u3068\u30e2\u30fc\u30c0\u30eb\u3092\u958b\u304d\u3001\u30e6\u30fc\u30b6\u30fc\u304c\u5404\u5217\u306e\u30c7\u30fc\u30bf\u578b\u3092\u8a2d\u5b9a\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u307e\u3059\u3002\u3053\u306e\u30c7\u30fc\u30bf\u3092\u4f7f\u7528\u3057\u3066\u3001Web API \u3067\u30b9\u30ad\u30fc\u30de\u3092\u4f5c\u6210\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3055\u308c\u308b\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u5f62\u6210\u3057\u307e\u3059\u3002<\/p>\n<p><a href=\"https:\/\/griddb.net\/wp-content\/uploads\/2022\/03\/column_types.png\"><img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/griddb.net\/wp-content\/uploads\/2022\/03\/column_types.png\" alt=\"\" width=\"1600\" height=\"799\" class=\"aligncenter size-full wp-image-28101\" srcset=\"\/wp-content\/uploads\/2022\/03\/column_types.png 1600w, \/wp-content\/uploads\/2022\/03\/column_types-300x150.png 300w, \/wp-content\/uploads\/2022\/03\/column_types-1024x511.png 1024w, \/wp-content\/uploads\/2022\/03\/column_types-768x384.png 768w, \/wp-content\/uploads\/2022\/03\/column_types-1536x767.png 1536w, \/wp-content\/uploads\/2022\/03\/column_types-600x300.png 600w, \/wp-content\/uploads\/2022\/03\/column_types-1280x640.png 1280w\" sizes=\"(max-width: 1600px) 100vw, 1600px\" \/><\/a><\/p>\n<p>WebAPI\u304c\u6c42\u3081\u308b\u69cb\u9020\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">'{\n    \"columns\": [\n        {\n            \"name\": \"timestamp\",\n            \"type\": \"TIMESTAMP\"\n        },\n        {\n            \"name\": \"name\",\n            \"type\": \"STRING\"\n        },\n        {\n            \"name\": \"value\",\n            \"type\": \"FLOAT\"\n        }\n    ],\n    \"container_name\": \"test\",\n    \"container_type\": \"TIME_SERIES\",\n    \"rowkey\": true\n}'<\/code><\/pre>\n<\/div>\n<p>\u30e6\u30fc\u30b6\u30fc\u304c\u30ab\u30e9\u30e0\u60c5\u5831\u3092\u5165\u529b\u3057\u3001\u300cCreate Schema\u300d\u30dc\u30bf\u30f3\u3092\u30af\u30ea\u30c3\u30af\u3059\u308b\u3068\u3001HTTP\u30ea\u30af\u30a8\u30b9\u30c8\u3067\u9001\u4fe1\u3059\u308b\u305f\u3081\u306e\u9069\u5207\u306a\u30c7\u30fc\u30bf\u304c\u6e96\u5099\u3055\u308c\u307e\u3059\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code>&lt;Button onClick={handleSchema} variant=\"contained\"&gt;Create Schema&lt;\/Button&gt;<\/code><\/pre>\n<\/div>\n<p>The <code>handleSchema<\/code> function simply calls our <code>putSchema<\/code> function<\/p>\n<h3>GridDB WebAPI HTTP Request (Put Schema\/Container)<\/h3>\n<div class=\"clipboard\">\n<pre><code class=\"language-javascript\">  const handleSchema = () => {\n    if (Object.keys(chartColumns).length !== 0) { \/\/chartColumns is an array of the column names from the csv\n      putSchema(chartColumns)\n    }\n  }\n\n  const putSchema = (obj) => {\n\n    let data = new Object();\n    data.columns = [];\n    let n = Object.keys(obj).length\n    let i = 0\n    for (const property in obj) {\n      if (i &lt; n) {\n        data.columns[i] = { \"name\": property, \"type\": (obj[property]).toUpperCase() }\n        i++\n      }\n    }\n    data[\"container_name\"] = fileName \/\/ grabbed from the react State \n    data[\"container_type\"] = \"COLLECTION\" \/\/ hardcoded for now\n    data[\"rowkey\"] = \"true\"\n\n    let raw = JSON.stringify(data);\n\n    let myHeaders = new Headers();\n    myHeaders.append(\"Content-type\", \"application\/json\")\n    myHeaders.append(\"Authorization\", \"Basic \" + encodedUserPass);\n\n    let requestOptions = {\n      method: 'POST',\n      headers: myHeaders,\n      body: raw,\n      redirect: 'follow'\n    };\n\n    fetch(`http:\/\/${ADDRESS}\/griddb\/v2\/defaultCluster\/dbs\/public\/containers`, requestOptions)\n      .then(response => response.text())\n      .then(result => {\n        setChartColumns(\"Successful. Now Push Data\") \/\/ displays where the object was being formed\n        console.log(result)\n      })\n      .catch(error => {\n        setChartColumns(error)\n        console.log(\"Error: \", error)\n      });\n  }<\/code><\/pre>\n<\/div>\n<p>\u3053\u3053\u3067\u306f\u3001\u6700\u521d\u306e Web API HTTP \u30ea\u30af\u30a8\u30b9\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u305d\u306e\u524d\u306b\u3001\u53ce\u96c6\u3057\u305f\u3059\u3079\u3066\u306e\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u3057\u3001API \u304c\u671f\u5f85\u3059\u308b\u30c7\u30fc\u30bf\u69cb\u9020\u3092\u5f62\u6210\u3057\u307e\u3059\u3002\u4eca\u306e\u3068\u3053\u308d\u3001\u30b3\u30f3\u30c6\u30ca \u30bf\u30a4\u30d7\u3092 <code>COLLECTION<\/code> \u306b\u30cf\u30fc\u30c9\u30b3\u30fc\u30c9\u3057\u3066\u3044\u307e\u3059\u304c\u3001\u3053\u308c\u306f\u30e2\u30fc\u30c0\u30eb\u306b\u30b9\u30a4\u30c3\u30c1\u3092\u8ffd\u52a0\u3059\u308b\u3053\u3068\u3067\u7c21\u5358\u306b\u4fee\u6b63\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u6b21\u306b\u3001\u5404\u30ab\u30e9\u30e0\u306e\u540d\u524d\u3068\u30bf\u30a4\u30d7\u3092\u542b\u3080\u30ab\u30e9\u30e0\u306e\u914d\u5217\u3092\u5185\u90e8\u306b\u6301\u3064\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u30c7\u30fc\u30bf\u69cb\u9020\u304c\u8a2d\u5b9a\u3055\u308c\u305f\u3089\u3001\u305d\u308c\u3092 <code>JSON.stringify<\/code> \u3057\u3066\u3001<code>requestOptions<\/code> \u3068\u5171\u306b\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u30dc\u30c7\u30a3\u306b\u9001\u4fe1\u3057\u307e\u3059\u3002\u4e00\u5ea6\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u884c\u308f\u308c\u308b\u3068\u3001\u30a8\u30e9\u30fc\u304c\u3042\u308b\u5834\u5408\u306f\u30e2\u30fc\u30c0\u30eb\u306b\u8868\u793a\u3055\u308c\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u6210\u529f\u3057\u305f\u5834\u5408\u306f\u3001\u30b7\u30f3\u30d7\u30eb\u306a\u30e1\u30c3\u30bb\u30fc\u30b8\u304c\u8868\u793a\u3055\u308c\u3001\u30c7\u30fc\u30bf\u3092\u30d7\u30c3\u30b7\u30e5\u3059\u308b\u3088\u3046\u30e6\u30fc\u30b6\u30fc\u306b\u4fc3\u3057\u307e\u3059\u3002<\/p>\n<h3>GridDB WebAPI \u30b3\u30f3\u30c6\u30ca\u3078\u306eCSV\u30c7\u30fc\u30bf\u30d7\u30c3\u30b7\u30e5\u6a5f\u80fd<\/h3>\n<p>\u6b21\u306b\u3001GridDB\u30b5\u30fc\u30d0\u304cHTTP\u30ea\u30af\u30a8\u30b9\u30c8\u3067\u30b3\u30f3\u30c6\u30ca\u3068\u30b9\u30ad\u30fc\u30de\u306e\u4f5c\u6210\u3092\u53d7\u3051\u5165\u308c\u305f\u3089\u3001HTTP\u30ea\u30af\u30a8\u30b9\u30c8\u3067 <code>.csv<\/code> \u30c7\u30fc\u30bf\u3092\u30b5\u30fc\u30d0\u306b\u9001\u4fe1\u3057\u307e\u3059\u3002<\/p>\n<p>\u30e6\u30fc\u30b6\u30fc\u306f <code>PUSH DATA<\/code> \u30dc\u30bf\u30f3\u3092\u62bc\u3057\u3066\u3001<code>putData<\/code> \u6a5f\u80fd\u3092\u8d77\u52d5\u3057\u307e\u3059\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-javascript\">  const handlePushingData = () => {\n    if (fullCsvData !== null) {\n      putData(fullCsvData)\n    }\n  }\n\nconst putData = (data) => {\n\n    data.shift();\n    let removeEmpties = data.filter(ele => ele.length > 1)\n    console.log(\"data: \", removeEmpties)\n\n    let raw = JSON.stringify(removeEmpties)\n    console.log(raw)\n\n    let myHeaders = new Headers();\n    myHeaders.append(\"Content-type\", \"application\/json\")\n    myHeaders.append(\"Authorization\", \"Basic \" + encodedUserPass);\n\n    let requestOptions = {\n      method: 'PUT',\n      headers: myHeaders,\n      body: raw,\n      redirect: 'follow'\n    };\n\n    fetch(`http:\/\/${ADDRESS}\/griddb\/v2\/defaultCluster\/dbs\/public\/containers\/${fileName}\/rows`, requestOptions)\n      .then(response => response.text())\n      .then(result => setChartColumns(\"Successful: \", result))\n      .catch(error => {\n        setChartColumns(error)\n        console.log(\"Error: \", error)\n      });\n  }<\/code><\/pre>\n<\/div>\n<p><code>putSchema<\/code>\u95a2\u6570\u3068\u540c\u69d8\u306b\u3001React \u306e\u30b9\u30c6\u30fc\u30c8\u304b\u3089\u30c7\u30fc\u30bf\u306e\u5168\u5185\u5bb9\u3092\u53d6\u5f97\u3057\u3001\u9001\u4fe1\u3059\u308b\u9069\u5207\u306a\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u3059\u308b\u305f\u3081\u306b\u3044\u304f\u3064\u304b\u306e\u57fa\u672c\u7684\u306a\u51e6\u7406\u3092\u884c\u3044\u307e\u3059\u3002\u307e\u305a\u3001\u914d\u5217\u306e\u6700\u521d\u306e\u8981\u7d20\u3092\u53d6\u308a\u9664\u304d\u3001\u3053\u308c\u306f\u5358\u306b\u30ab\u30e9\u30e0\u540d\u3067\u3059\u3002\u6b21\u306b\u3001\u7a7a\u306e\u8981\u7d20\u304c\u3042\u308b\u5834\u5408\u306f\u305d\u308c\u3092\u524a\u9664\u3057\u307e\u3059\u3002\u3053\u306e HTTP \u30ea\u30af\u30a8\u30b9\u30c8\u30e1\u30bd\u30c3\u30c9\u304c<code>PUT<\/code>(vs.<code>POST<\/code>) \u3067\u3042\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u6210\u529f\u3057\u305f\u5834\u5408\u3001\u30ab\u30e9\u30e0\u306e\u91cf\u304c\u30e2\u30fc\u30c0\u30eb\u306b\u8868\u793a\u3055\u308c\u307e\u3059\u3002\u30a8\u30e9\u30fc\u306e\u5834\u5408\u306f\u3001\u305d\u306e\u65e8\u3082\u30e2\u30fc\u30c0\u30eb\u306b\u8868\u793a\u3055\u308c\u307e\u3059\u3002\u3053\u3053\u307e\u3067\u3067\u3001<code>.csv<\/code>\u30c7\u30fc\u30bf\u3092\u30b5\u30fc\u30d0\u30fc\u306b\u53d6\u308a\u8fbc\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u3057\u305f\u3002\u6b21\u306f\u3001\u30af\u30a8\u30ea\u3068\u8868\u793a\u3067\u3059\u3002<\/p>\n<h3>\u30af\u30a8\u30ea<\/h3>\n<p>\u30c7\u30e2\u306e\u305f\u3081\u306b\u3001GridDB\u30b5\u30fc\u30d0\u306b\u554f\u3044\u5408\u308f\u305b\u3001\u30c7\u30fc\u30bf\u3092\u518d\u53d6\u5f97\u3057\u3066\u53ef\u8996\u5316\u3057\u307e\u3059\u3002WebAPI\u306b\u3088\u308b\u554f\u3044\u5408\u308f\u305b\u306f\u975e\u5e38\u306b\u7c21\u5358\u3067\u3059\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code>curl -X POST --basic -u admin:admin -H \"Content-type:application\/json\" http:\/\/127.0.0.1:8080\/griddb\/v2\/defaultCluster\/dbs\/public\/containers\/test\/rows -d  '{\"limit\":1000}'  <\/code><\/pre>\n<\/div>\n<p>\u3053\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306f\u3001\u30e6\u30fc\u30b6\u304c\u8a8d\u8a3c\u60c5\u5831\u3092\u5165\u529b\u3057\u3001QUERY \u30dc\u30bf\u30f3\u3092\u62bc\u3057\u3066 <code>handleSubmitCreds<\/code> \u95a2\u6570\u3092\u5b9f\u884c\u3057\u305f\u5f8c\u306b\u30ed\u30fc\u30c9\u3059\u308b\u3088\u3046\u306b\u3057\u307e\u3059\u3002\u30b5\u30fc\u30d0\u30fc\u306f\u30af\u30a8\u30ea\u306e\u5b8c\u5168\u306a\u30c7\u30fc\u30bf\u3067\u5fdc\u7b54\u3057\u307e\u3059\u3002\u305d\u306e\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u3057\u3001<code>recharts<\/code> \u304c\u8868\u793a\u3067\u304d\u308b\u3088\u3046\u306b\u5909\u63db\u3057\u307e\u3059\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-javascript\">  const handleSubmitCreds = () => {\n    let raw = JSON.stringify({\n      \"limit\": 100\n    });\n\n    let myHeaders = new Headers();\n    myHeaders.append(\"Content-type\", \"application\/json\")\n    myHeaders.append(\"Authorization\", \"Basic \" + encodedUserPass);\n\n    let requestOptions = {\n      method: 'POST',\n      headers: myHeaders,\n      body: raw,\n      redirect: 'follow'\n    };\n\n    fetch(`http:\/\/${ADDRESS}\/griddb\/v2\/defaultCluster\/dbs\/public\/containers\/CEREAL\/rows`, requestOptions)\n      .then(response => response.text())\n      .then(result => {\n        let resp = JSON.parse(result)\n        let rows = resp.rows\n\n        let c = resp.columns\n        let columns = [];\n        c.forEach(val => columns.push(val.name))\n\n        let map = new Map();\n        let fullChartData = [];\n        \/\/ transform data into more usable obj\n        for (let i = 0; i &lt; 72; i++) { \/\/hard coding the length of rows (72)\n          for (let j = 0; j &lt; 16; j++) { \/\/ hard coding length of columns (16)\n            map.set(columns[j], rows[i][j])\n          }\n          const obj = Object.fromEntries(map);\n          fullChartData.push(obj)\n        }\n        setData(fullChartData)\n\n      })\n      .catch(error => console.log('error', error));\n  }<\/code><\/pre>\n<\/div>\n<p><code>useEffect<\/code>\u306e\u4e2d\u306e\u7a7a\u306e\u914d\u5217\u306f\u3001React\u306b\u3053\u306e\u95a2\u6570\u3092\u30da\u30fc\u30b8\u30ed\u30fc\u30c9\u6642\u306e\u307f\u5b9f\u884c\u3059\u308b\u3088\u3046\u6307\u793a\u3059\u308b\u3060\u3051\u3067\u3001\u518d\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u306e\u305f\u3073\u306b\u5b9f\u884c\u3059\u308b\u308f\u3051\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002<\/p>\n<h2>\u30c7\u30fc\u30bf\u3092\u53ef\u8996\u5316\u3059\u308b<\/h2>\n<p>\u4e0a\u8a18\u306e\u95a2\u6570\u306b\u3088\u308a\u3001\u5358\u306b\u30c7\u30fc\u30bf\u3092\u7167\u4f1a\u3059\u308b\u3060\u3051\u3067\u306a\u304f\u3001\u30c7\u30fc\u30bf\u3092\u3088\u308a\u4f7f\u3044\u3084\u3059\u3044\u5f62\u306b\u5909\u63db\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3057\u305f\u3002<\/p>\n<p><code>recharts<\/code> \u304c\u671f\u5f85\u3059\u308b\u30c7\u30fc\u30bf\u3092\u5f97\u308b\u305f\u3081\u306b\u3001Javascript \u306e <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/JavaScript\/Reference\/Global_Objects\/Map\">map object<\/a> \u3092\u4f7f\u3063\u3066\u30ad\u30fc\u3068\u5024\u306e\u30c7\u30fc\u30bf\u30da\u30a2\u3092\u8a2d\u5b9a\u3057\u3001\u6b21\u306b <code>Object.fromEntries<\/code> \u3092\u4f7f\u3063\u3066\u305d\u306e\u30de\u30c3\u30d7\u304b\u3089\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<\/p>\n<p>\u4eca\u56de\u306e\u30c7\u30e2\u3067\u306f\u3001<a href=\"https:\/\/www.kaggle.com\/crawford\/80-cereals\">kaggle cereals dataset<\/a>\u3092\u4f7f\u7528\u3057\u307e\u3059\u3002\u4e0a\u306e\u95a2\u6570\u3067\u8aad\u307f\u8fbc\u3093\u3060\u30c7\u30fc\u30bf\u3067\u3001\u3059\u3079\u3066\u306e\u30c7\u30fc\u30bf\u3092\u6298\u308c\u7dda\u30b0\u30e9\u30d5\u306b\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u304c\u3001\u500b\u3005\u306e\u30b7\u30ea\u30a2\u30eb\u306e\u30de\u30af\u30ed\u304a\u3088\u3073\u30df\u30af\u30ed\u6804\u990a\u7d20\u3092\u68d2\u30b0\u30e9\u30d5\u3067\u8868\u793a\u3059\u308b\u65b9\u304c\u3001\u3088\u308a\u8208\u5473\u6df1\u3044\u30e6\u30fc\u30b9\u30b1\u30fc\u30b9\u3068\u306a\u308b\u3067\u3057\u3087\u3046\u3002\u305d\u306e\u305f\u3081\u306b\u3001\u3059\u3079\u3066\u306e\u30b7\u30ea\u30a2\u30eb\u304c\u30ea\u30b9\u30c8\u30a2\u30c3\u30d7\u3055\u308c\u305f\u30c9\u30ed\u30c3\u30d7\u30c0\u30a6\u30f3\u30ea\u30b9\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u30e6\u30fc\u30b6\u30fc\u304c\u30b7\u30ea\u30a2\u30eb\u3092\u9078\u629e\u3059\u308b\u3068\u3001\u30a2\u30d7\u30ea\u306f\u5bfe\u5fdc\u3059\u308b\u30c7\u30fc\u30bf\u3092\u898b\u3064\u3051\u3001\u305d\u308c\u3092\u30b0\u30e9\u30d5\u306b\u8868\u793a\u3057\u307e\u3059\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-html\">    &lt;FormControl fullWidth&gt;\n      &lt;InputLabel id=\"demo-simple-select-label\"&gt;Cereal&lt;\/InputLabel&gt;\n      &lt;Select labelId=\"demo-simple-select-label\" id=\"demo-simple-select\" value={choice} label=\"Cereal\" onChange={handleChange}&gt;\n        &lt;MenuItem value={\"100% Bran\"}&gt;100% Bran&lt;\/MenuItem&gt;\n        &lt;MenuItem value={\"100% Natural Bran\"}&gt;100% Natural Bran&lt;\/MenuItem&gt;\n        &lt;MenuItem value={\"All-Bran\"}&gt;All Bran&lt;\/MenuItem&gt;\n        &lt;MenuItem value={\"All-Bran with Extra Fiber\"}&gt; All-Bran with Extra Fiber&lt;\/MenuItem&gt;\n        &lt;MenuItem value={\"Almond Delight\"}&gt;Almond Delight&lt;\/MenuItem&gt;<\/code><\/pre>\n<\/div>\n<p>\u30e6\u30fc\u30b6\u30fc\u304c\u30b7\u30ea\u30a2\u30eb\u3092\u9078\u629e\u3059\u308b\u3068\u3001<code>handleChange<\/code>\u95a2\u6570\u304c\u5b9f\u884c\u3055\u308c\u307e\u3059\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-javascript\">  const handleChange = (event) => {\n    let val = event.target.value\n    console.log(\"val: \", val)\n    setChoice(val);\n  };<\/code><\/pre>\n<\/div>\n<p>\u3053\u308c\u306f\u3001\u30b7\u30ea\u30a2\u30eb\u540d\u3067\u9078\u629e\u3059\u308b\u305f\u3081\u306eReact\u30b9\u30c6\u30fc\u30c8\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u30a2\u30d7\u30ea\u304c\u305d\u306e\u5909\u5316\u3092\u691c\u51fa\u3059\u308b\u3068\u3001\u6b21\u306e\u3088\u3046\u306a\u95a2\u6570\u304c\u8d77\u52d5\u3057\u307e\u3059\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-javascript\">  useEffect(() => {\n    if (data !== null) {\n      let userChoice = data.find(val => val.NAME == choice)\n      setDisplayedData(userChoice);\n    } else console.log(\"data still null\")\n  }, [choice])<\/code><\/pre>\n<\/div>\n<p>\u3053\u306e\u95a2\u6570\u306f\u3001javascript \u306e\u914d\u5217\u306e find \u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3057\u3066\u3001React \u306e\u30b9\u30c6\u30fc\u30c8\u306b <code>data<\/code> \u3068\u3057\u3066\u4fdd\u5b58\u3055\u308c\u3066\u3044\u308b\u5b8c\u5168\u306a\u30c7\u30fc\u30bf\u30bb\u30c3\u30c8\u304b\u3089\u9069\u5207\u306a\u30c7\u30fc\u30bf\u3092\u63a2\u3057\u307e\u3059\u3002\u3053\u306e\u30c7\u30fc\u30bf\u304c\u898b\u3064\u304b\u308b\u3068\u3001\u68d2\u30b0\u30e9\u30d5\u306f\u9069\u5207\u306a\u30c7\u30fc\u30bf (<code>displayedData<\/code>) \u3092\u8868\u793a\u3057\u307e\u3059\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-html\">&lt;BarChart\n          width={1500}\n          height={500}\n          data={[displayedData]}\n          margin={{\n            top: 5,\n            right: 30,\n            left: 20,\n            bottom: 5,\n          }}\n        &gt;\n          &lt;XAxis dataKey=\"NAME\" \/&gt;\n          &lt;YAxis \/&gt;\n          &lt;Tooltip \/&gt;\n          &lt;Legend \/&gt;\n          &lt;Bar type=\"monotone\" stackId=\"a\" dataKey=\"MANUFACTURER\" fill=\"#FFF\" \/&gt;\n          &lt;Bar type=\"monotone\" stackId=\"a\" dataKey=\"TYPE\" fill=\"#FFF\" \/&gt;\n          &lt;Bar type=\"monotone\" stackId=\"b\" dataKey=\"CALORIES\" fill=\"red\" \/&gt;\n          &lt;Bar type=\"monotone\" stackId=\"c\" dataKey=\"PROTEIN\" fill=\"pink\" \/&gt;\n          &lt;Bar type=\"monotone\" stackId=\"c\" dataKey=\"FAT\" fill=\"orange\" \/&gt;\n          &lt;Bar type=\"monotone\" stackId=\"d\" dataKey=\"SODIUM\" fill=\"#82ca9d\" \/&gt;\n          &lt;Bar type=\"monotone\" stackId=\"d\" dataKey=\"FIBER\" fill=\"#82ca9d\" \/&gt;\n          &lt;Bar type=\"monotone\" stackId=\"c\" dataKey=\"CARBO\" fill=\"purple\" \/&gt;\n          &lt;Bar type=\"monotone\" stackId=\"e\" dataKey=\"SUGARS\" fill=\"#82ca9d\" \/&gt;\n          &lt;Bar type=\"monotone\" stackId=\"e\" dataKey=\"POTASS\" fill=\"#82ca9d\" \/&gt;\n          &lt;Bar type=\"monotone\" stackId=\"f\" dataKey=\"VITAMINS\" fill=\"#82ca9d\" \/&gt;\n          &lt;Bar type=\"monotone\" stackId=\"f\" dataKey=\"SHELF\" fill=\"#82ca9d\" \/&gt;\n          &lt;Bar type=\"monotone\" stackId=\"f\" dataKey=\"WEIGHT\" fill=\"#82ca9d\" \/&gt;\n        &lt;\/BarChart&gt;        <\/code><\/pre>\n<\/div>\n<p>\u3053\u306e\u30b0\u30e9\u30d5\u3067\u306f\u3001\u30df\u30af\u30ed\u3001\u30de\u30af\u30ed\u306e\u6804\u990a\u7d20\u3092\u597d\u304d\u306a\u3088\u3046\u306b\u8272\u5206\u3051\u3057\u3066\u7a4d\u307f\u91cd\u306d\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u4eca\u56de\u306e\u30c7\u30e2\u3067\u306f\u3001\u30ab\u30ed\u30ea\u30fc\u3092\u30d0\u30fc\u3067\u8868\u793a\u3059\u308b\u4ee5\u5916\u306b\u306f\u4f55\u3082\u8a2d\u5b9a\u3057\u3066\u3044\u307e\u305b\u3093\u3002\u4ee5\u4e0b\u306f\u3001\u30b7\u30ca\u30e2\u30f3\u30c8\u30fc\u30b9\u30c8\u30af\u30e9\u30f3\u30c1\u306e\u30c1\u30e3\u30fc\u30c8\u3067\u3059\u3002<\/p>\n<p><a href=\"https:\/\/griddb.net\/wp-content\/uploads\/2022\/03\/basic_bar_chart.png\"><img decoding=\"async\" src=\"https:\/\/griddb.net\/wp-content\/uploads\/2022\/03\/basic_bar_chart.png\" alt=\"\" width=\"1531\" height=\"659\" class=\"aligncenter size-full wp-image-28099\" srcset=\"\/wp-content\/uploads\/2022\/03\/basic_bar_chart.png 1531w, \/wp-content\/uploads\/2022\/03\/basic_bar_chart-300x129.png 300w, \/wp-content\/uploads\/2022\/03\/basic_bar_chart-1024x441.png 1024w, \/wp-content\/uploads\/2022\/03\/basic_bar_chart-768x331.png 768w, \/wp-content\/uploads\/2022\/03\/basic_bar_chart-600x258.png 600w\" sizes=\"(max-width: 1531px) 100vw, 1531px\" \/><\/a><\/p>\n<h2>\u307e\u3068\u3081<\/h2>\n<p>\u3053\u306e\u3088\u3046\u306b\u3057\u3066\u7c21\u5358\u306bcsv\u30c7\u30fc\u30bf\u3092\u53d6\u308a\u8fbc\u307f\u3001react.js\u306e <code>recharts<\/code> \u306b\u8aad\u307f\u8fbc\u3080\u3053\u3068\u304c\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\u3002<\/p>\n<p>\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u306e\u5168\u6587\u306f\u3001<a href=\"\">Github<\/a>\u30da\u30fc\u30b8\u3067\u3054\u89a7\u3044\u305f\u3060\u3051\u307e\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u306f\u3058\u3081\u306b \u3053\u306e\u30d6\u30ed\u30b0\u3067\u306f\u3001Web\u30a2\u30d7\u30ea\u306e\u304a\u4f9b\u3068\u3057\u3066GridDB\u3092\u4f7f\u3046\u65b9\u6cd5\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002\u5177\u4f53\u7684\u306b\u306f\u3001\u30b9\u30ad\u30fc\u30de\u306e\u4f5c\u6210\u3001\u30a4\u30f3\u30b8\u30a7\u30b9\u30c8\u3001\u30af\u30a8\u30ea\u306e\u3059\u3079\u3066\u306e\u30b9\u30c6\u30c3\u30d7\u3067GridDB WebAPI\u3092\u5229\u7528\u3059\u308b\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002 \u5168\u3066 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":50286,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1005],"tags":[],"class_list":["post-50815","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>React.js\u3092\u7528\u3044\u305fGridDB\u3068WebAPI\u306b\u3088\u308b\u30c7\u30fc\u30bf\u306e\u53ef\u8996\u5316 | 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\/visualize-data-with-griddb-and-the-webapi-using-react-js\/\" \/>\n<meta property=\"og:locale\" content=\"ja_JP\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"React.js\u3092\u7528\u3044\u305fGridDB\u3068WebAPI\u306b\u3088\u308b\u30c7\u30fc\u30bf\u306e\u53ef\u8996\u5316 | 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\/visualize-data-with-griddb-and-the-webapi-using-react-js\/\" \/>\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=\"2022-03-25T07:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-30T21:40:45+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/griddb.net\/wp-content\/uploads\/2022\/09\/react1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1160\" \/>\n\t<meta property=\"og:image:height\" content=\"653\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Israel\" \/>\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=\"Israel\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593\" \/>\n\t<meta name=\"twitter:data2\" content=\"6\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\/visualize-data-with-griddb-and-the-webapi-using-react-js\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/visualize-data-with-griddb-and-the-webapi-using-react-js\/\"},\"author\":{\"name\":\"Israel\",\"@id\":\"https:\/\/griddb.net\/en\/#\/schema\/person\/c8a430e7156a9e10af73b1fbb46c2740\"},\"headline\":\"React.js\u3092\u7528\u3044\u305fGridDB\u3068WebAPI\u306b\u3088\u308b\u30c7\u30fc\u30bf\u306e\u53ef\u8996\u5316\",\"datePublished\":\"2022-03-25T07:00:00+00:00\",\"dateModified\":\"2026-03-30T21:40:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/visualize-data-with-griddb-and-the-webapi-using-react-js\/\"},\"wordCount\":87,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/griddb.net\/en\/#organization\"},\"image\":{\"@id\":\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/visualize-data-with-griddb-and-the-webapi-using-react-js\/#primaryimage\"},\"thumbnailUrl\":\"\/wp-content\/uploads\/2022\/09\/react1.png\",\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/visualize-data-with-griddb-and-the-webapi-using-react-js\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/visualize-data-with-griddb-and-the-webapi-using-react-js\/\",\"url\":\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/visualize-data-with-griddb-and-the-webapi-using-react-js\/\",\"name\":\"React.js\u3092\u7528\u3044\u305fGridDB\u3068WebAPI\u306b\u3088\u308b\u30c7\u30fc\u30bf\u306e\u53ef\u8996\u5316 | 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\/visualize-data-with-griddb-and-the-webapi-using-react-js\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/visualize-data-with-griddb-and-the-webapi-using-react-js\/#primaryimage\"},\"thumbnailUrl\":\"\/wp-content\/uploads\/2022\/09\/react1.png\",\"datePublished\":\"2022-03-25T07:00:00+00:00\",\"dateModified\":\"2026-03-30T21:40:45+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\/visualize-data-with-griddb-and-the-webapi-using-react-js\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/visualize-data-with-griddb-and-the-webapi-using-react-js\/#primaryimage\",\"url\":\"\/wp-content\/uploads\/2022\/09\/react1.png\",\"contentUrl\":\"\/wp-content\/uploads\/2022\/09\/react1.png\",\"width\":1160,\"height\":653},{\"@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\/c8a430e7156a9e10af73b1fbb46c2740\",\"name\":\"Israel\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\/\/griddb.net\/en\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/4df8cfc155402a2928d11f80b0220037b8bd26c4f1b19c4598d826e0306e6307?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/4df8cfc155402a2928d11f80b0220037b8bd26c4f1b19c4598d826e0306e6307?s=96&d=mm&r=g\",\"caption\":\"Israel\"},\"url\":\"https:\/\/griddb.net\/ja\/author\/israel\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"React.js\u3092\u7528\u3044\u305fGridDB\u3068WebAPI\u306b\u3088\u308b\u30c7\u30fc\u30bf\u306e\u53ef\u8996\u5316 | 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\/visualize-data-with-griddb-and-the-webapi-using-react-js\/","og_locale":"ja_JP","og_type":"article","og_title":"React.js\u3092\u7528\u3044\u305fGridDB\u3068WebAPI\u306b\u3088\u308b\u30c7\u30fc\u30bf\u306e\u53ef\u8996\u5316 | GridDB: Open Source Time Series Database for IoT","og_description":"\u306f\u3058\u3081\u306b","og_url":"https:\/\/griddb.net\/ja\/\u672a\u5206\u985e\/visualize-data-with-griddb-and-the-webapi-using-react-js\/","og_site_name":"GridDB: Open Source Time Series Database for IoT","article_publisher":"https:\/\/www.facebook.com\/griddbcommunity\/","article_published_time":"2022-03-25T07:00:00+00:00","article_modified_time":"2026-03-30T21:40:45+00:00","og_image":[{"width":1160,"height":653,"url":"https:\/\/griddb.net\/wp-content\/uploads\/2022\/09\/react1.png","type":"image\/png"}],"author":"Israel","twitter_card":"summary_large_image","twitter_creator":"@GridDBCommunity","twitter_site":"@GridDBCommunity","twitter_misc":{"\u57f7\u7b46\u8005":"Israel","\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593":"6\u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/visualize-data-with-griddb-and-the-webapi-using-react-js\/#article","isPartOf":{"@id":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/visualize-data-with-griddb-and-the-webapi-using-react-js\/"},"author":{"name":"Israel","@id":"https:\/\/griddb.net\/en\/#\/schema\/person\/c8a430e7156a9e10af73b1fbb46c2740"},"headline":"React.js\u3092\u7528\u3044\u305fGridDB\u3068WebAPI\u306b\u3088\u308b\u30c7\u30fc\u30bf\u306e\u53ef\u8996\u5316","datePublished":"2022-03-25T07:00:00+00:00","dateModified":"2026-03-30T21:40:45+00:00","mainEntityOfPage":{"@id":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/visualize-data-with-griddb-and-the-webapi-using-react-js\/"},"wordCount":87,"commentCount":0,"publisher":{"@id":"https:\/\/griddb.net\/en\/#organization"},"image":{"@id":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/visualize-data-with-griddb-and-the-webapi-using-react-js\/#primaryimage"},"thumbnailUrl":"\/wp-content\/uploads\/2022\/09\/react1.png","inLanguage":"ja","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/visualize-data-with-griddb-and-the-webapi-using-react-js\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/visualize-data-with-griddb-and-the-webapi-using-react-js\/","url":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/visualize-data-with-griddb-and-the-webapi-using-react-js\/","name":"React.js\u3092\u7528\u3044\u305fGridDB\u3068WebAPI\u306b\u3088\u308b\u30c7\u30fc\u30bf\u306e\u53ef\u8996\u5316 | 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\/visualize-data-with-griddb-and-the-webapi-using-react-js\/#primaryimage"},"image":{"@id":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/visualize-data-with-griddb-and-the-webapi-using-react-js\/#primaryimage"},"thumbnailUrl":"\/wp-content\/uploads\/2022\/09\/react1.png","datePublished":"2022-03-25T07:00:00+00:00","dateModified":"2026-03-30T21:40:45+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\/visualize-data-with-griddb-and-the-webapi-using-react-js\/"]}]},{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/visualize-data-with-griddb-and-the-webapi-using-react-js\/#primaryimage","url":"\/wp-content\/uploads\/2022\/09\/react1.png","contentUrl":"\/wp-content\/uploads\/2022\/09\/react1.png","width":1160,"height":653},{"@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\/c8a430e7156a9e10af73b1fbb46c2740","name":"Israel","image":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/griddb.net\/en\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/4df8cfc155402a2928d11f80b0220037b8bd26c4f1b19c4598d826e0306e6307?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4df8cfc155402a2928d11f80b0220037b8bd26c4f1b19c4598d826e0306e6307?s=96&d=mm&r=g","caption":"Israel"},"url":"https:\/\/griddb.net\/ja\/author\/israel\/"}]}},"_links":{"self":[{"href":"https:\/\/griddb.net\/ja\/wp-json\/wp\/v2\/posts\/50815","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\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/griddb.net\/ja\/wp-json\/wp\/v2\/comments?post=50815"}],"version-history":[{"count":2,"href":"https:\/\/griddb.net\/ja\/wp-json\/wp\/v2\/posts\/50815\/revisions"}],"predecessor-version":[{"id":55158,"href":"https:\/\/griddb.net\/ja\/wp-json\/wp\/v2\/posts\/50815\/revisions\/55158"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/griddb.net\/ja\/wp-json\/wp\/v2\/media\/50286"}],"wp:attachment":[{"href":"https:\/\/griddb.net\/ja\/wp-json\/wp\/v2\/media?parent=50815"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/griddb.net\/ja\/wp-json\/wp\/v2\/categories?post=50815"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/griddb.net\/ja\/wp-json\/wp\/v2\/tags?post=50815"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}