{"id":50931,"date":"2025-03-20T00:00:00","date_gmt":"2025-03-20T07:00:00","guid":{"rendered":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/%e6%9c%aa%e5%88%86%e9%a1%9e\/optimizing-software-development-vcs-activity-monitoring-with-griddb\/"},"modified":"2025-11-14T07:57:05","modified_gmt":"2025-11-14T15:57:05","slug":"optimizing-software-development-vcs-activity-monitoring-with-griddb","status":"publish","type":"post","link":"https:\/\/www.griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/optimizing-software-development-vcs-activity-monitoring-with-griddb\/","title":{"rendered":"\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u958b\u767a\u306e\u6700\u9069\u5316\uff1aGridDB \u3092\u7528\u3044\u305f\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u306e\u6d3b\u52d5\u76e3\u8996"},"content":{"rendered":"<h2><strong>\u6982\u8981<\/strong><\/h2>\n<p>\u73fe\u5728\u306e\u7af6\u4e89\u306e\u6fc0\u3057\u3044\u30d3\u30b8\u30cd\u30b9\u74b0\u5883\u306b\u304a\u3044\u3066\u3001\u9ad8\u54c1\u8cea\u306a\u88fd\u54c1\u3092\u8fc5\u901f\u306b\u63d0\u4f9b\u3059\u308b\u305f\u3081\u306b\u306f\u3001\u52b9\u7387\u7684\u306a\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u958b\u767a\u304c\u4e0d\u53ef\u6b20\u3067\u3059\u3002\u3053\u306e\u76ee\u6a19\u3092\u9054\u6210\u3059\u308b\u305f\u3081\u306e\u91cd\u8981\u306a\u8981\u7d20\u306e\u4e00\u3064\u304c\u3001\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\uff08VCS\uff09\u306b\u304a\u3051\u308b\u958b\u767a\u8005\u306e\u6d3b\u52d5\u3092\u76e3\u8996\u3057\u3001\u30b3\u30e9\u30dc\u30ec\u30fc\u30b7\u30e7\u30f3\u3068\u30b3\u30fc\u30c9\u306e\u54c1\u8cea\u3092\u6700\u9069\u5316\u3059\u308b\u3053\u3068\u3067\u3059\u3002\u30b3\u30fc\u30c9\u306e\u30b3\u30df\u30c3\u30c8\u3001\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u3001\u30de\u30fc\u30b8\u3001\u30d6\u30e9\u30f3\u30c1\u30f3\u30b0\u306a\u3069\u306e\u30d1\u30bf\u30fc\u30f3\u3092\u5206\u6790\u3059\u308b\u3053\u3068\u3067\u3001\u7d44\u7e54\u306f\u30dc\u30c8\u30eb\u30cd\u30c3\u30af\u3092\u7279\u5b9a\u3057\u3001\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u6539\u5584\u3057\u3001\u6700\u7d42\u7684\u306b\u751f\u7523\u6027\u3092\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>Git\u3001SVN\u3001GitLab\u306a\u3069\u306e\u4eba\u6c17\u306eVCS\u30c4\u30fc\u30eb\u306f\u5909\u66f4\u3092\u8ffd\u8de1\u3067\u304d\u307e\u3059\u304c\u3001\u5927\u898f\u6a21\u306a\u958b\u767a\u6d3b\u52d5\u3092\u6642\u9593\u8ef8\u3067\u5206\u6790\u3059\u308b\u3053\u3068\u306f\u56f0\u96e3\u3067\u3059\u3002\u3053\u3053\u3067GridDB\u3001\u9ad8\u6027\u80fd\u306a\u6642\u7cfb\u5217\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304c\u771f\u4fa1\u3092\u767a\u63ee\u3057\u307e\u3059\u3002\u5927\u91cf\u306e\u30bf\u30a4\u30e0\u30bb\u30f3\u30b7\u30c6\u30a3\u30d6\u30c7\u30fc\u30bf\u3092\u7ba1\u7406\u3059\u308b\u305f\u3081\u306b\u8a2d\u8a08\u3055\u308c\u305fGridDB\u306f\u3001VCS\u30a4\u30d9\u30f3\u30c8\u3092\u52b9\u7387\u7684\u306b\u30ad\u30e3\u30d7\u30c1\u30e3\u3001\u4fdd\u5b58\u3001\u5206\u6790\u53ef\u80fd\u3067\u3059\u3002<\/p>\n<h3><strong>VCS\u6d3b\u52d5\u76e3\u8996\u306bGridDB\u3092\u4f7f\u3046\u7406\u7531<\/strong><\/h3>\n<p><strong>\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u4ed8\u304d\u30c7\u30fc\u30bf\u306e\u51e6\u7406<\/strong> VCS\u5185\u306e\u30b3\u30df\u30c3\u30c8\u3001\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u3001\u30de\u30fc\u30b8\u30a4\u30d9\u30f3\u30c8\u306f\u3001\u305d\u308c\u305e\u308c\u7279\u5b9a\u306e\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u3068\u95a2\u9023\u4ed8\u3051\u3089\u308c\u3066\u3044\u307e\u3059\u3002GridDB\u306f\u6642\u7cfb\u5217\u30c7\u30fc\u30bf\u51e6\u7406\u306b\u6700\u9069\u5316\u3055\u308c\u3066\u304a\u308a\u3001\u6642\u9593\u4f9d\u5b58\u306e\u30c7\u30d9\u30ed\u30c3\u30d1\u30fc\u6d3b\u52d5\u3092\u6355\u6349\u3057\u5206\u6790\u3059\u308b\u306e\u306b\u7406\u60f3\u7684\u3067\u3059\u3002<\/p>\n<p><strong>\u30b9\u30b1\u30fc\u30e9\u30d3\u30ea\u30c6\u30a3<\/strong> \u5927\u898f\u6a21\u306a\u5206\u6563\u30c1\u30fc\u30e0\u3067\u306f\u30011\u65e5\u3042\u305f\u308a\u6570\u5343\u4ef6\u306e\u30b3\u30df\u30c3\u30c8\u3084\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u767a\u751f\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002GridDB\u306e\u30b9\u30b1\u30fc\u30e9\u30d6\u30eb\u306a\u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u306f\u3001\u5927\u91cf\u306eVCS\u30a4\u30d9\u30f3\u30c8\u3092\u52b9\u7387\u7684\u306b\u53d6\u308a\u8fbc\u307f\u3001\u30af\u30a8\u30ea\u5b9f\u884c\u6642\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u4f4e\u4e0b\u306a\u3057\u306b\u51e6\u7406\u3067\u304d\u307e\u3059\u3002<\/p>\n<p><strong>\u52b9\u7387\u7684\u306a\u30c7\u30fc\u30bf\u53d6\u5f97<\/strong> GridDB\u306f\u6642\u9593\u30d9\u30fc\u30b9\u306e\u30af\u30a8\u30ea\u3092\u53ef\u80fd\u306b\u3057\u3001\u7279\u5b9a\u306e\u671f\u9593\uff08\u4f8b\uff1a\u65e5\u6b21\u3001\u9031\u6b21\u3001\u6708\u6b21\uff09\u306e\u30c7\u30d9\u30ed\u30c3\u30d1\u30fc\u6d3b\u52d5\u3092\u8fc5\u901f\u306b\u53d6\u5f97\u3067\u304d\u307e\u3059\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u30c1\u30fc\u30e0\u306e\u30d7\u30ed\u30c0\u30af\u30c6\u30a3\u30d3\u30c6\u30a3\u3084\u30b3\u30e9\u30dc\u30ec\u30fc\u30b7\u30e7\u30f3\u306e\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u306a\u6d1e\u5bdf\u3092\u5f97\u3089\u308c\u307e\u3059\u3002<\/p>\n<p><strong>\u904e\u53bb\u306e\u6d1e\u5bdf<\/strong> \u904e\u53bb\u306e\u30a4\u30d9\u30f3\u30c8\uff08\u4f8b\uff1a\u30b3\u30fc\u30c9\u885d\u7a81\u306e\u6025\u5897\u3084\u6d3b\u52d5\u304c\u4f4e\u3044\u671f\u9593\uff09\u3092\u5206\u6790\u3059\u308b\u3053\u3068\u3067\u3001\u30c1\u30fc\u30e0\u306f\u3088\u308a\u52b9\u7387\u7684\u306a\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u306b\u3064\u306a\u304c\u308b\u30d1\u30bf\u30fc\u30f3\u3092\u767a\u898b\u3067\u304d\u307e\u3059\u3002GridDB\u306e\u904e\u53bb\u306e\u30c7\u30fc\u30bf\u3092\u4fdd\u5b58\u3057\u30af\u30a8\u30ea\u3059\u308b\u6a5f\u80fd\u306f\u3001\u958b\u767a\u30c8\u30ec\u30f3\u30c9\u306e\u6df1\u3044\u5206\u6790\u3092\u53ef\u80fd\u306b\u3057\u307e\u3059\u3002<\/p>\n<p>\u3053\u306e\u30d6\u30ed\u30b0\u3067\u306f\u3001\u30b7\u30f3\u30d7\u30eb\u306aSpring Boot\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f7f\u7528\u3057\u3066GridDB\u3067<strong>\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\uff08VCS\uff09\u306e\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3<\/strong>\u3092\u76e3\u8996\u3059\u308b\u65b9\u6cd5\u3092\u63a2\u308a\u307e\u3059\u3002\u5177\u4f53\u7684\u306b\u306f\u3001\u4ee5\u4e0b\u306e\u4e3b\u8981\u306a\u958b\u767a\u30a4\u30d9\u30f3\u30c8\u3092\u8ffd\u8de1\u3057\u307e\u3059\uff1a<\/p>\n<ul>\n<li>\u30b3\u30fc\u30c9\u30b3\u30df\u30c3\u30c8<\/li>\n<li>\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8<\/li>\n<li>\u30b3\u30fc\u30c9\u30de\u30fc\u30b8<\/li>\n<\/ul>\n<p>GridDB\u3067\u3053\u306e\u30c7\u30fc\u30bf\u3092\u4fdd\u5b58\u3057\u5206\u6790\u3059\u308b\u3053\u3068\u3067\u3001\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u30c1\u30fc\u30e0\u3084\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30de\u30cd\u30fc\u30b8\u30e3\u30fc\u306f\uff1a<\/p>\n<ul>\n<li>\u30b3\u30fc\u30c9\u306e\u5909\u66f4\u5c65\u6b74\u3092\u8ffd\u8de1\u3059\u308b\u3053\u3068\u3067\u958b\u767a\u8005\u306e\u751f\u7523\u6027\u3092\u76e3\u8996\u3067\u304d\u307e\u3059\u3002<\/li>\n<li>\u30de\u30fc\u30b8\u885d\u7a81\u3084\u6d3b\u52d5\u306e\u9ad8\u4f4e\u671f\u306a\u3069\u306e\u30d1\u30bf\u30fc\u30f3\u3092\u7279\u5b9a\u3059\u308b\u3002<\/li>\n<li>\u30d6\u30e9\u30f3\u30c1\u6226\u7565\u3084\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u8a55\u4fa1\u3057\u3066\u5354\u696d\u3092\u6700\u9069\u5316\u3059\u308b\u3002<\/li>\n<li>\u6b74\u53f2\u7684\u5206\u6790\u3092\u5b9f\u65bd\u3057\u3001\u9577\u671f\u7684\u306a\u958b\u767a\u30c8\u30ec\u30f3\u30c9\u3068\u5b9f\u8df5\u3092\u6539\u5584\u3059\u308b\u3002<\/li>\n<\/ul>\n<h2>GridDB\u30af\u30e9\u30b9\u30bf\u30fc\u3068Spring Boot\u306e\u7d71\u5408\uff1a\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u76e3\u8996\u306e\u305f\u3081\u306e\u8a2d\u5b9a<\/h2>\n<p>\u6700\u521d\u306e\u30b9\u30c6\u30c3\u30d7\u306f\u3001GridDB\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u8a2d\u5b9a\u3057\u3001Spring Boot\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3068\u7d71\u5408\u3059\u308b\u3053\u3068\u3067\u3059\u3002<\/p>\n<ul>\n<li><strong>\u3053\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9<\/strong><\/li>\n<\/ul>\n<p>GridDBnet \u30d6\u30ed\u30b0\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u30af\u30ed\u30fc\u30f3\u3057\u3001\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u7528\u306e\u9069\u5207\u306a\u30d6\u30e9\u30f3\u30c1\u3092\u53d6\u5f97\u3057\u307e\u3059\u3002<\/p>\n<p><code>$ git clone https:\/\/github.com\/griddbnet\/Blogs.git --branch vcs<\/code><\/p>\n<ul>\n<li><strong>GridDB \u30af\u30e9\u30b9\u30bf\u30fc\u306e\u8a2d\u5b9a<\/strong><\/li>\n<\/ul>\n<p>GridDB\u306f\u3001\u3055\u307e\u3056\u307e\u306a\u8981\u4ef6\u306b\u5bfe\u5fdc\u3059\u308b\u305f\u3081\u306e\u67d4\u8edf\u306a\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u3002\u958b\u767a\u6bb5\u968e\u3067\u306f\u3001\u30ed\u30fc\u30ab\u30eb\u30de\u30b7\u30f3\u4e0a\u306e\u5358\u4e00\u30ce\u30fc\u30c9\u30af\u30e9\u30b9\u30bf\u30fc\u3067\u5341\u5206\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002\u305f\u3060\u3057\u3001\u672c\u756a\u74b0\u5883\u3067\u306f\u3001\u969c\u5bb3\u8010\u6027\u3068\u30b9\u30b1\u30fc\u30e9\u30d3\u30ea\u30c6\u30a3\u3092\u5411\u4e0a\u3055\u305b\u308b\u305f\u3081\u3001\u8907\u6570\u306e\u30de\u30b7\u30f3\u306b\u5206\u6563\u3057\u305f\u30af\u30e9\u30b9\u30bf\u30fc\u304c\u4e00\u822c\u7684\u306b\u63a8\u5968\u3055\u308c\u307e\u3059\u3002\u30af\u30e9\u30b9\u30bf\u30fc\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u306b\u95a2\u3059\u308b\u8a73\u7d30\u306a\u30ac\u30a4\u30c9\u30e9\u30a4\u30f3\u306f\u3001GridDB\u306e\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3092\u53c2\u7167\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>GridDB\u30af\u30e9\u30b9\u30bf\u30fc\u3092\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3059\u308b\u306b\u306f\u3001\u4ee5\u4e0b\u306e\u624b\u9806\u306b\u5f93\u3063\u3066\u304f\u3060\u3055\u3044 <a href=\"https:\/\/docs.griddb.net\/gettingstarted\/using-apt\/#install-with-apt-get\">\u3053\u3061\u3089<\/a>.<\/p>\n<ul>\n<li><strong>Spring Boot \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7<\/strong><\/li>\n<\/ul>\n<p>GridDB \u30af\u30e9\u30b9\u30bf\u30fc\u304c\u6b63\u5e38\u306b\u52d5\u4f5c\u3057\u3066\u3044\u308b\u5834\u5408\u3001\u6b21\u306e\u30b9\u30c6\u30c3\u30d7\u306f\u3053\u308c\u3092 Spring Boot \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u63a5\u7d9a\u3059\u308b\u3053\u3068\u3067\u3059\u3002GridDB Java Client API \u306f\u3001\u3053\u306e\u63a5\u7d9a\u3092\u78ba\u7acb\u3059\u308b\u305f\u3081\u306e\u5fc5\u8981\u306a\u30c4\u30fc\u30eb\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002\u30d7\u30ed\u30bb\u30b9\u3092\u7c21\u7d20\u5316\u3059\u308b\u305f\u3081\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4f9d\u5b58\u95a2\u4fc2\u3068\u3057\u3066 <code>griddb-spring-boot-starter<\/code> \u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u542b\u3081\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u306f\u3001\u63a5\u7d9a\u8a2d\u5b9a\u3092\u7c21\u7d20\u5316\u3059\u308b\u4e8b\u524d\u8a2d\u5b9a\u6e08\u307f\u306e Bean \u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002<\/p>\n<p><strong>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u69cb\u9020<\/strong><\/p>\n<p>\u4ee5\u4e0b\u306f\u3001\u3053\u306e\u3088\u3046\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u305f\u3081\u306e\u63a8\u5968\u3055\u308c\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u69cb\u9020\u3067\u3059\uff1a<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">\u251c\u2500\u2500\u2500my-griddb-app\n\u2502 \u00a0 \u2502 \u00a0 pom.xml\n\u2502 \u00a0 \u2502 \u00a0 \n\u2502 \u00a0 \u251c\u2500\u2500\u2500src\n\u2502 \u00a0 \u2502 \u00a0 \u251c\u2500\u2500\u2500main\n\u2502 \u00a0 \u2502 \u00a0 \u2502 \u00a0 \u251c\u2500\u2500\u2500java\n\u2502 \u00a0 \u2502 \u00a0 \u2502 \u00a0 \u2502 \u00a0 \u2514\u2500\u2500\u2500mycode\n\u2502 \u00a0 \u2502 \u00a0 \u2502 \u00a0 \u2502 \u00a0 \u00a0 \u00a0 \u2502 \u00a0 MySpringBootApplication.java\n\u2502 \u00a0 \u2502 \u00a0 \u2502 \u00a0 \u2502 \u00a0 \u00a0 \u00a0 \u2502\n\u2502 \u00a0 \u2502 \u00a0 \u2502 \u00a0 \u2502 \u00a0 \u00a0 \u00a0 \u251c\u2500\u2500\u2500config\n\u2502 \u00a0 \u2502 \u00a0 \u2502 \u00a0 \u2502 \u00a0 \u00a0 \u00a0 \u2502 \u00a0 \u00a0 \u00a0 GridDBConfig.java\n\u2502 \u00a0 \u2502 \u00a0 \u2502 \u00a0 \u2502 \u00a0 \u00a0 \u00a0 \u2502\n\u2502 \u00a0 \u2502 \u00a0 \u2502 \u00a0 \u2502 \u00a0 \u00a0 \u00a0 \u251c\u2500\u2500\u2500controller\n\u2502 \u00a0 \u2502 \u00a0 \u2502 \u00a0 \u2502 \u00a0 \u00a0 \u00a0 \u2502 \u00a0 \u00a0 \u00a0 ChartController.java\n\u2502 \u00a0 \u2502 \u00a0 \u2502 \u00a0 \u2502 \u00a0 \u00a0 \u00a0 \u2502\n\u2502 \u00a0 \u2502 \u00a0 \u2502 \u00a0 \u2502 \u00a0 \u00a0 \u00a0 \u251c\u2500\u2500\u2500dto\n\u2502 \u00a0 \u2502 \u00a0 \u2502 \u00a0 \u2502 \u00a0 \u00a0 \u00a0 \u2502 \u00a0 \u00a0 \u00a0 VcsActivityDTO.java\n\u2502 \u00a0 \u2502 \u00a0 \u2502 \u00a0 \u2502 \u00a0 \u00a0 \u00a0 \u2502\n\u2502 \u00a0 \u2502 \u00a0 \u2502 \u00a0 \u2502 \u00a0 \u00a0 \u00a0 \u2514\u2500\u2500\u2500service\n\u2502 \u00a0 \u2502 \u00a0 \u2502 \u00a0 \u2502 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ChartService.java\n\u2502 \u00a0 \u2502 \u00a0 \u2502 \u00a0 \u2502 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 MetricsCollectionService.java\n\u2502 \u00a0 \u2502 \u00a0 \u2502 \u00a0 \u2502 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 RestTemplateConfig.java\n\u2502 \u00a0 \u2502 \u00a0 \u2502 \u00a0 \u2502\n\u2502 \u00a0 \u2502 \u00a0 \u2502 \u00a0 \u2514\u2500\u2500\u2500resources\n\u2502 \u00a0 \u2502 \u00a0 \u2502 \u00a0 \u00a0 \u00a0 \u2502 \u00a0 application.properties\n\u2502 \u00a0 \u2502 \u00a0 \u2502 \u00a0 \u00a0 \u00a0 \u2502\n\u2502 \u00a0 \u2502 \u00a0 \u2502 \u00a0 \u00a0 \u00a0 \u2514\u2500\u2500\u2500templates\n\u2502 \u00a0 \u2502 \u00a0 \u2502 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 charts.html<\/code><\/pre>\n<\/div>\n<p>\u3053\u306e\u69cb\u9020\u306f\u3001\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u3001\u30e2\u30c7\u30eb\u3001\u30ea\u30dd\u30b8\u30c8\u30ea\u3001\u30b5\u30fc\u30d3\u30b9\u3001\u304a\u3088\u3073\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30a8\u30f3\u30c8\u30ea\u30dd\u30a4\u30f3\u30c8\u3092\u72ec\u7acb\u3057\u305f\u5c64\u306b\u5206\u96e2\u3057\u3001\u30e2\u30b8\u30e5\u30fc\u30eb\u6027\u3068\u4fdd\u5b88\u6027\u3092\u5411\u4e0a\u3055\u305b\u307e\u3059\u3002<\/p>\n<p><strong>GridDB \u4f9d\u5b58\u95a2\u4fc2\u306e\u8ffd\u52a0<\/strong><\/p>\n<p>Spring Boot \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067 GridDB \u3068\u76f8\u4e92\u4f5c\u7528\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b\u306b\u306f\u3001GridDB Java Client API \u4f9d\u5b58\u95a2\u4fc2\u3092\u542b\u3081\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u308c\u306b\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30d3\u30eb\u30c9\u30d5\u30a1\u30a4\u30eb\uff08Maven \u306e <code>pom.xml<\/code> \u307e\u305f\u306f Gradle \u306e\u76f8\u5f53\u3059\u308b\u30d5\u30a1\u30a4\u30eb\uff09\u306b\u9069\u5207\u306a\u8a2d\u5b9a\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002<\/p>\n<p><code>pom.xml<\/code> \u30d5\u30a1\u30a4\u30eb\u3067\u306e\u4f9d\u5b58\u95a2\u4fc2\u306e\u8a2d\u5b9a\u4f8b\uff1a<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">&lt;project \n\u00a0 xmlns_xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\n\u00a0 xsi_schemaLocation=\"http:\/\/maven.apache.org\/POM\/4.0.0 http:\/\/maven.apache.org\/maven-v4_0_0.xsd\"&gt;\n\u00a0 &lt;modelVersion&gt;4.0.0&lt;\/modelVersion&gt;\n\u00a0 &lt;groupId&gt;com.example&lt;\/groupId&gt;\n\u00a0 &lt;artifactId&gt;my-griddb-app&lt;\/artifactId&gt;\n\u00a0 &lt;version&gt;1.0-SNAPSHOT&lt;\/version&gt;\n\u00a0 &lt;name&gt;my-griddb-app&lt;\/name&gt;\n\u00a0 &lt;url&gt;http:\/\/maven.apache.org&lt;\/url&gt;\n\n\u00a0 &lt;parent&gt;\n\u00a0 \u00a0 &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;\n\u00a0 \u00a0 &lt;artifactId&gt;spring-boot-starter-parent&lt;\/artifactId&gt;\n\u00a0 \u00a0 &lt;version&gt;3.2.4&lt;\/version&gt;\n\u00a0 \u00a0 &lt;relativePath \/&gt; &lt;!-- lookup parent from repository --&gt;\n\u00a0 &lt;\/parent&gt;\n\n\u00a0 &lt;properties&gt;\n\u00a0 \u00a0 &lt;maven.compiler.source&gt;17&lt;\/maven.compiler.source&gt;\n\u00a0 \u00a0 &lt;maven.compiler.target&gt;17&lt;\/maven.compiler.target&gt;\n\u00a0 &lt;\/properties&gt;\n\n\u00a0 &lt;dependencies&gt;\n\u00a0 \u00a0 &lt;dependency&gt;\n\u00a0 \u00a0 \u00a0 &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;\n\u00a0 \u00a0 \u00a0 &lt;artifactId&gt;spring-boot-starter-actuator&lt;\/artifactId&gt;\n\u00a0 \u00a0 &lt;\/dependency&gt;\n\u00a0 \u00a0 &lt;dependency&gt;\n\u00a0 \u00a0 \u00a0 &lt;groupId&gt;junit&lt;\/groupId&gt;\n\u00a0 \u00a0 \u00a0 &lt;artifactId&gt;junit&lt;\/artifactId&gt;\n\u00a0 \u00a0 \u00a0 &lt;version&gt;3.8.1&lt;\/version&gt;\n\u00a0 \u00a0 \u00a0 &lt;scope&gt;test&lt;\/scope&gt;\n\u00a0 \u00a0 &lt;\/dependency&gt;\n\u00a0 \u00a0 &lt;dependency&gt;\n\u00a0 \u00a0 \u00a0 &lt;groupId&gt;com.github.griddb&lt;\/groupId&gt;\n\u00a0 \u00a0 \u00a0 &lt;artifactId&gt;gridstore&lt;\/artifactId&gt;\n\u00a0 \u00a0 \u00a0 &lt;version&gt;5.6.0&lt;\/version&gt;\n\u00a0 \u00a0 &lt;\/dependency&gt;\n\u00a0 \u00a0 &lt;!-- Spring Boot dependencies --&gt;\n\u00a0 \u00a0 &lt;dependency&gt;\n\u00a0 \u00a0 \u00a0 &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;\n\u00a0 \u00a0 \u00a0 &lt;artifactId&gt;spring-boot-starter-web&lt;\/artifactId&gt;\n\u00a0 \u00a0 \u00a0 &lt;exclusions&gt;\n\u00a0 \u00a0 \u00a0 \u00a0 &lt;exclusion&gt;\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;artifactId&gt;spring-boot-starter-logging&lt;\/artifactId&gt;\n\u00a0 \u00a0 \u00a0 \u00a0 &lt;\/exclusion&gt;\n\u00a0 \u00a0 \u00a0 &lt;\/exclusions&gt;\n\u00a0 \u00a0 &lt;\/dependency&gt;\n\u00a0 \u00a0 &lt;dependency&gt;\n\u00a0 \u00a0 \u00a0 &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;\n\u00a0 \u00a0 \u00a0 &lt;artifactId&gt;spring-boot-starter-test&lt;\/artifactId&gt;\n\u00a0 \u00a0 \u00a0 &lt;scope&gt;test&lt;\/scope&gt;\n\u00a0 \u00a0 &lt;\/dependency&gt;\n\u00a0 \u00a0 &lt;dependency&gt;\n\u00a0 \u00a0 \u00a0 &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;\n\u00a0 \u00a0 \u00a0 &lt;artifactId&gt;spring-boot-starter-thymeleaf&lt;\/artifactId&gt;\n\u00a0 \u00a0 &lt;\/dependency&gt;\n\u00a0 \u00a0 &lt;!-- JSON processing --&gt;\n\u00a0 \u00a0 &lt;dependency&gt;\n\u00a0 \u00a0 \u00a0 &lt;groupId&gt;com.fasterxml.jackson.core&lt;\/groupId&gt;\n\u00a0 \u00a0 \u00a0 &lt;artifactId&gt;jackson-databind&lt;\/artifactId&gt;\n\u00a0 \u00a0 \u00a0 &lt;version&gt;2.15.0&lt;\/version&gt; &lt;!-- or the latest version --&gt;\n\u00a0 \u00a0 &lt;\/dependency&gt;\n\u00a0 \u00a0 &lt;!-- Lombok --&gt;\n\u00a0 \u00a0 &lt;dependency&gt;\n\u00a0 \u00a0 \u00a0 &lt;groupId&gt;org.projectlombok&lt;\/groupId&gt;\n\u00a0 \u00a0 \u00a0 &lt;artifactId&gt;lombok&lt;\/artifactId&gt;\n\u00a0 \u00a0 \u00a0 &lt;optional&gt;true&lt;\/optional&gt;\n\u00a0 \u00a0 &lt;\/dependency&gt;\n\u00a0 &lt;\/dependencies&gt;\n&lt;\/project&gt;<\/code><\/pre>\n<\/div>\n<p><strong>GitHub API \u30a2\u30af\u30bb\u30b9 \u30c8\u30fc\u30af\u30f3\u3092\u751f\u6210\u3059\u308b<\/strong><\/p>\n<p>GitHub \u306e\u30c7\u30fc\u30bf\uff08\u30b3\u30df\u30c3\u30c8\u3084\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u306a\u3069\uff09\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u306b\u306f\u3001<strong>GitHub \u500b\u4eba\u7528\u30a2\u30af\u30bb\u30b9 \u30c8\u30fc\u30af\u30f3<\/strong>\u304c\u5fc5\u8981\u3067\u3059\u3002\u516c\u5f0f\u306e GitHub \u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u624b\u9806\u306b\u5f93\u3063\u3066\u4f5c\u6210\u3057\u3066\u304f\u3060\u3055\u3044\uff1a<\/p>\n<ol>\n<li>GitHub \u306b\u30ed\u30b0\u30a4\u30f3\u3057\u307e\u3059\u3002<\/li>\n<li><a href=\"https:\/\/docs.github.com\/en\/enterprise-server@3.3\/authentication\/keeping-your-account-and-data-secure\/creating-a-personal-access-token\"><strong>GitHub \u500b\u4eba\u30a2\u30af\u30bb\u30b9 \u30c8\u30fc\u30af\u30f3 \u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/strong><\/a>\u306b\u79fb\u52d5\u3057\u307e\u3059\u3002<\/li>\n<li>\u5fc5\u8981\u306a\u30b9\u30b3\u30fc\u30d7\uff08<code>repo<\/code>\u3001<code>user<\/code>\uff09\u3092\u542b\u3080\u30c8\u30fc\u30af\u30f3\u3092\u751f\u6210\u3059\u308b\u624b\u9806\u306b\u5f93\u3044\u307e\u3059\u3002<\/li>\n<\/ol>\n<p><strong>GridDB\u63a5\u7d9a\u306e\u8a2d\u5b9a<\/strong><\/p>\n<p>GridDB\u4f9d\u5b58\u95a2\u4fc2\u3092\u8ffd\u52a0\u3057\u305f\u5f8c\u3001\u6b21\u306e\u30b9\u30c6\u30c3\u30d7\u306fSpring Boot\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067GridDB\u30af\u30e9\u30b9\u30bf\u30fc\u306e\u63a5\u7d9a\u8a73\u7d30\u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u3059\u3002\u3053\u308c\u306f\u901a\u5e38\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8a2d\u5b9a\u3092\u6307\u5b9a\u3059\u308b<code>application.properties<\/code>\u30d5\u30a1\u30a4\u30eb\u3067\u8a2d\u5b9a\u3055\u308c\u307e\u3059\u3002<\/p>\n<p>\u63a5\u7d9a\u8a73\u7d30\u3092\u8a2d\u5b9a\u3059\u308b\u4f8b\u3092\u4ee5\u4e0b\u306b\u793a\u3057\u307e\u3059\uff1a<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">GRIDDB_NOTIFICATION_MEMBER=127.0.0.1:10001\nGRIDDB_CLUSTER_NAME=myCluster\nGRIDDB_USER=admin\nGRIDDB_PASSWORD=admin\nmanagement.endpoints.web.exposure.include=*\nserver.port=9090\n\n\n# GitHub API token and configuration\ngithub.api.token=github_DXXXXXXXXXXXXA5OyZwdXr\ngithub.api.base-url=https:\/\/api.github.com<\/code><\/pre>\n<\/div>\n<ul>\n<li><code>griddb.cluster.host<\/code>: GridDB \u30af\u30e9\u30b9\u30bf\u30fc\u306e\u30db\u30b9\u30c8\u540d\u307e\u305f\u306f IP \u30a2\u30c9\u30ec\u30b9\u3002<\/li>\n<li><code>griddb.cluster.port<\/code>: GridDB \u30af\u30e9\u30b9\u30bf\u30fc\u304c\u30ea\u30b9\u30cb\u30f3\u30b0\u3057\u3066\u3044\u308b\u30dd\u30fc\u30c8\u756a\u53f7<\/li>\n<li><code>griddb.cluster.user<\/code>: GridDB \u30af\u30e9\u30b9\u30bf\u30fc\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306e\u30e6\u30fc\u30b6\u30fc\u540d\u3002<\/li>\n<li><code>griddb.cluster.password<\/code>: \u6307\u5b9a\u3057\u305f GridDB \u30e6\u30fc\u30b6\u30fc\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\uff08\u5b9f\u969b\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u306b\u7f6e\u304d\u63db\u3048\u3066\u304f\u3060\u3055\u3044\uff09\u3002<\/li>\n<li><code>server.port=9090<\/code>: Spring Boot \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u5b9f\u884c\u3055\u308c\u308b\u30dd\u30fc\u30c8\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002<\/li>\n<li><code>github.api.token<\/code>: GitHub API \u3078\u306e\u8a8d\u8a3c\u306b\u4f7f\u7528\u3059\u308b\u500b\u4eba\u7528\u30a2\u30af\u30bb\u30b9 \u30c8\u30fc\u30af\u30f3\uff08\u751f\u6210\u6e08\u307f\uff09<\/li>\n<li><code>github.api.base-url<\/code>: GitHub API \u3078\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u9001\u4fe1\u7528\u306e\u30d9\u30fc\u30b9 URL\uff08\u4f8b\uff1a <code>https:\/\/api.github.com<\/code>\uff09\u3002<\/li>\n<\/ul>\n<p><strong>GridDB \u30af\u30e9\u30a4\u30a2\u30f3\u30c8 Bean \u306e\u4f5c\u6210<\/strong><\/p>\n<p>Spring Boot \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067 GridDB \u3068\u52b9\u679c\u7684\u306b\u9023\u643a\u3059\u308b\u305f\u3081\u306b\u306f\u3001GridDB \u63a5\u7d9a\u3092\u7ba1\u7406\u3059\u308b\u5c02\u7528\u306e Spring Bean \u3092\u4f5c\u6210\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u3053\u306e Bean \u306f\u3001<code>application.properties<\/code> \u30d5\u30a1\u30a4\u30eb\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u30d1\u30e9\u30e1\u30fc\u30bf\u30fc\u3092\u4f7f\u7528\u3057\u3066\u63a5\u7d9a\u3092\u78ba\u7acb\u3057\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u5168\u4f53\u3067 GridDB \u30af\u30e9\u30b9\u30bf\u30fc\u3068\u3084\u308a\u53d6\u308a\u3059\u308b\u305f\u3081\u306e\u4e2d\u592e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3068\u3057\u3066\u6a5f\u80fd\u3057\u307e\u3059\u3002<\/p>\n<p>\u4ee5\u4e0b\u306f\u3001<code>GridDbConfig.java<\/code> \u3068\u3044\u3046\u540d\u524d\u306e Java \u30af\u30e9\u30b9\u3067\u3053\u306e Bean \u3092\u5b9a\u7fa9\u3059\u308b\u4f8b\u3067\u3059\uff1a<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-java\">package mycode.config;\n\nimport java.util.Properties;\n\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\nimport org.springframework.context.annotation.PropertySource;\n\nimport com.toshiba.mwcloud.gs.GSException;\nimport com.toshiba.mwcloud.gs.GridStore;\nimport com.toshiba.mwcloud.gs.GridStoreFactory;\n\n@Configuration\n@PropertySource(\"classpath:application.properties\")\npublic class GridDBConfig {\n\n @Value(\"${GRIDDB_NOTIFICATION_MEMBER}\")\n\u00a0 private String notificationMember;\n\n @Value(\"${GRIDDB_CLUSTER_NAME}\")\n\u00a0 private String clusterName;\n\n @Value(\"${GRIDDB_USER}\")\n\u00a0 private String user;\n\n @Value(\"${GRIDDB_PASSWORD}\")\n\u00a0 private String password;\n\n @Bean\n\u00a0 public GridStore gridStore() throws GSException {\n\u00a0 \u00a0 \/\/ Acquiring a GridStore instance\n\u00a0 \u00a0 Properties properties = new Properties();\n\u00a0 \u00a0 properties.setProperty(\"notificationMember\", notificationMember);\n\u00a0 \u00a0 properties.setProperty(\"clusterName\", clusterName);\n\u00a0 \u00a0 properties.setProperty(\"user\", user);\n\u00a0 \u00a0 properties.setProperty(\"password\", password);\n\u00a0 \u00a0 return GridStoreFactory.getInstance().getGridStore(properties);\n }\n}<\/code><\/pre>\n<\/div>\n<h2>\u30e1\u30c8\u30ea\u30af\u30b9\u53ce\u96c6<\/h2>\n<p>\u6b21\u306b\u3001\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u306eVCS\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3\u76e3\u8996\u306e\u305f\u3081\u306b\u3001GitHub\u30c7\u30fc\u30bf\u306e\u53ce\u96c6\u3001\u5909\u63db\u3001\u304a\u3088\u3073\u4fdd\u5b58\u306b\u7126\u70b9\u3092\u5f53\u3066\u307e\u3059\u3002\u8ffd\u8de1\u3059\u308b\u4e3b\u8981\u306a\u30e1\u30c8\u30ea\u30af\u30b9\u306b\u306f\u3001<code>\u30b3\u30df\u30c3\u30c8<\/code>\u3001<code>\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8<\/code>\u3001\u304a\u3088\u3073\u958b\u767a\u8005\u306e\u751f\u7523\u6027\u3084\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3\u306b\u95a2\u3059\u308b\u6d1e\u5bdf\u3092\u63d0\u4f9b\u3059\u308b\u305d\u306e\u4ed6\u306eGitHub\u30a4\u30d9\u30f3\u30c8\u304c\u542b\u307e\u308c\u307e\u3059\u3002<\/p>\n<p>\u5fc5\u8981\u306a\u30c7\u30fc\u30bf\u3092\u53ce\u96c6\u3059\u308b\u305f\u3081\u306b\u3001GitHub\u304c\u63d0\u4f9b\u3059\u308b\u7279\u5b9a\u306eAPI\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u3092\u5229\u7528\u3057\u307e\u3059\u3002\u3053\u308c\u3089\u306e\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u306b\u3088\u308a\u3001\u3055\u307e\u3056\u307e\u306a\u958b\u767a\u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3\u3092\u8ffd\u8de1\u3067\u304d\u307e\u3059\uff1a<\/p>\n<ul>\n<li>\n<p><strong>Commits<\/strong>:\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8 <code>GET \/repos\/\uff5bowner\uff5d\/\uff5brepo\uff5d\/commits<\/code> \u7d4c\u7531\u3067\u30a2\u30af\u30bb\u30b9\u3067\u304d\u3001\u6307\u5b9a\u3055\u308c\u305f\u30ea\u30dd\u30b8\u30c8\u30ea\u5185\u306e\u30b3\u30df\u30c3\u30c8\u4e00\u89a7\u3092\u53d6\u5f97\u3057\u307e\u3059\u3002<\/p>\n<\/li>\n<li>\n<p><strong>Pull Requests<\/strong>: \u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8 <code>GET \/repos\/\uff5bowner\uff5d\/\uff5brepo\uff5d\/pulls<\/code> \u306f\u3001\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u306b\u95a2\u3059\u308b\u60c5\u5831\uff08\u73fe\u5728\u306e\u30b9\u30c6\u30fc\u30bf\u30b9\u3092\u542b\u3080\uff09\u3092\u8fd4\u3057\u307e\u3059\u3002<\/p>\n<\/li>\n<li>\n<p><strong>Repository Events<\/strong>: \u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8 <code>GET \/repos\/\uff5bowner\uff5d\/\uff5brepo\uff5d\/events<\/code> \u3092\u4f7f\u7528\u3059\u308b\u3068\u3001\u30ea\u30dd\u30b8\u30c8\u30ea\u5185\u306e\u3059\u3079\u3066\u306e\u91cd\u8981\u306a\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u542b\u3080\u5305\u62ec\u7684\u306a\u30a4\u30d9\u30f3\u30c8\u4e00\u89a7\u3092\u53d6\u5f97\u3067\u304d\u307e\u3059\u3002<\/p>\n<\/li>\n<\/ul>\n<p><strong>GridDB\u3078\u306e\u30c7\u30fc\u30bf\u8aad\u307f\u8fbc\u307f<\/strong><\/p>\n<p>GitHub\u304b\u3089\u5fc5\u8981\u306a\u30c7\u30fc\u30bf\u3092\u53ce\u96c6\u3057\u305f\u3089\u3001\u6b21\u306b\u3053\u306e\u60c5\u5831\u3092GridDB\u306b\u8aad\u307f\u8fbc\u3093\u3067\u4fdd\u5b58\u3057\u3001\u3055\u3089\u306b\u5206\u6790\u3059\u308b\u305f\u3081\u306e\u6e96\u5099\u3092\u884c\u3044\u307e\u3059\u3002\u4ee5\u4e0b\u306b\u3001\u3053\u306e\u30d7\u30ed\u30bb\u30b9\u306e\u6982\u8981\u3092\u8aac\u660e\u3057\u307e\u3059\uff1a<\/p>\n<p>\u4ee5\u4e0b\u306b\u3001\u3053\u306e\u30d7\u30ed\u30bb\u30b9\u306e\u6982\u8981\u3092\u8aac\u660e\u3057\u307e\u3059\uff1a<\/p>\n<ul>\n<li><strong>\u8a8d\u8a3c<\/strong>\uff1a GitHub\u306eAPI\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306e\u30a2\u30af\u30bb\u30b9 \u30c8\u30fc\u30af\u30f3\u3092\u4f7f\u7528\u3057\u3066\u8a8d\u8a3c\u3092\u884c\u3044\u307e\u3059\u3002\u3053\u306e\u30c8\u30fc\u30af\u30f3\u306f\u3001\u30ea\u30af\u30a8\u30b9\u30c8\u304c\u8a8d\u8a3c\u3055\u308c\u3001\u5fc5\u8981\u306a\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u3067\u304d\u308b\u3053\u3068\u3092\u4fdd\u8a3c\u3057\u307e\u3059\u3002\u3057\u305f\u304c\u3063\u3066\u3001API\u547c\u3073\u51fa\u3057\u306e\u30d8\u30c3\u30c0\u30fc\u3092\u6b21\u306e\u3088\u3046\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002<\/li>\n<\/ul>\n<div class=\"clipboard\">\n<pre><code class=\"language-java\">\u00a0 private HttpHeaders createHeaders() {\n\u00a0 \u00a0 HttpHeaders headers = new HttpHeaders();\n\u00a0 \u00a0 headers.set(\"Authorization\", \"Bearer \" + githubApiToken);\n\u00a0 \u00a0 return headers;\n }<\/code><\/pre>\n<\/div>\n<ul>\n<li><strong>\u30c7\u30fc\u30bf\u5909\u63db\u3068\u30de\u30c3\u30d4\u30f3\u30b0<\/strong>\uff1a \u30c7\u30fc\u30bf\u53d6\u5f97\u5f8c\u3001\u30c7\u30fc\u30bf\u306fGridDB\u3067\u5b9a\u7fa9\u3055\u308c\u305f\u30b9\u30ad\u30fc\u30de\u306b\u4e00\u81f4\u3059\u308b\u3088\u3046\u306b\u5909\u63db\u3055\u308c\u307e\u3059\u3002\u3053\u306e\u30b9\u30c6\u30c3\u30d7\u3067\u306f\u3001\u30c7\u30fc\u30bf\u306e\u30af\u30ea\u30fc\u30cb\u30f3\u30b0\u3001\u4e0d\u8981\u306a\u60c5\u5831\u306e\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u3001\u304a\u3088\u3073GridDB\u5185\u306e\u9069\u5207\u306a\u30d5\u30a3\u30fc\u30eb\u30c9\u3078\u306e\u30de\u30c3\u30d4\u30f3\u30b0\u304c\u884c\u308f\u308c\u307e\u3059\u3002\u4ee5\u4e0b\u306f\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u683c\u7d0d\u3055\u308c\u308b\u30c7\u30fc\u30bf\u306e\u5f62\u5f0f\u3092\u793a\u3059<code>VcsActivityDTO<\/code>\u3067\u3059\u3002<\/li>\n<\/ul>\n<div class=\"clipboard\">\n<pre><code class=\"language-java\">package mycode.dto;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Data;\nimport lombok.NoArgsConstructor;\nimport java.util.Date;\n\nimport com.toshiba.mwcloud.gs.RowKey;\n\n@Data\n@NoArgsConstructor\n@AllArgsConstructor\npublic class VcsActivityDTO {\n @RowKey\n\u00a0 public Date timestamp; \/\/ Time of the activity\n\u00a0 private String eventType; \/\/ Event type: commit, pull request, merge, branch\n\u00a0 private String developerId; \/\/ Developer who performed the activity\n\u00a0 private String repositoryId; \/\/ Repository ID or name\n\u00a0 private String branch; \/\/ Branch associated with the activity\n\u00a0 private String status; \/\/ Status (e.g., success, open, merged, conflict)\n}<\/code><\/pre>\n<\/div>\n<ul>\n<li><strong>\u30c7\u30fc\u30bf\u53d6\u308a\u8fbc\u307f<\/strong>: \u6700\u5f8c\u306b\u3001\u5909\u63db\u3055\u308c\u305f\u30c7\u30fc\u30bf\u306fGridDB\u306b\u8aad\u307f\u8fbc\u307e\u308c\u3001\u958b\u767a\u8005\u306e\u6d3b\u52d5\u306b\u95a2\u3059\u308b\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u76e3\u8996\u3068\u5206\u6790\u306b\u5229\u7528\u53ef\u80fd\u3067\u3059\u3002\u30c7\u30fc\u30bf\u306f\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u6b21\u306e\u3088\u3046\u306b\u633f\u5165\u3055\u308c\u307e\u3059\uff1a<\/li>\n<\/ul>\n<div class=\"clipboard\">\n<pre><code class=\"language-java\">\u00a0 \u00a0TimeSeries&lt;vcsactivitydto> ts = store.putTimeSeries(\"vcsData\", VcsActivityDTO.class);\n\u00a0 \u00a0 for (VcsActivityDTO activity : result) {\n\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0 \u00a0 ts.append(activity);\n }&lt;\/vcsactivitydto><\/code><\/pre>\n<\/div>\n<p>\u4ee5\u4e0b\u306f\u3001\u4e0a\u8a18\u3067\u8aac\u660e\u3057\u305f\u3059\u3079\u3066\u306e\u30b9\u30c6\u30c3\u30d7\u3092\u5b9f\u88c5\u3057\u305f <code>MetricsCollectionService.java<\/code> \u306e\u5b8c\u5168\u306a\u30b3\u30fc\u30c9\u3067\u3059\u3002<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-java\">package mycode.service;\n\nimport java.util.ArrayList;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.http.HttpEntity;\nimport org.springframework.http.HttpHeaders;\nimport org.springframework.http.HttpMethod;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.scheduling.annotation.Scheduled;\nimport org.springframework.stereotype.Service;\nimport org.springframework.web.client.RestTemplate;\nimport org.springframework.web.util.UriComponentsBuilder;\n\nimport com.fasterxml.jackson.core.JsonProcessingException;\nimport com.fasterxml.jackson.databind.JsonMappingException;\nimport com.toshiba.mwcloud.gs.*;\nimport mycode.dto.VcsActivityDTO;\nimport java.text.ParseException;\nimport java.text.SimpleDateFormat;\nimport java.util.List;\nimport java.util.Map;\n\n@Service\npublic class MetricsCollectionService {\n @Autowired\n\u00a0 GridStore store;\n\n @Autowired\n\u00a0 RestTemplate restTemplate;\n\n @Value(\"${github.api.token}\")\n\u00a0 private String githubApiToken;\n\n @Value(\"${github.api.base-url}\")\n\u00a0 private String githubBaseUrl;\n\n @Scheduled(fixedRate = 2222260) \/\/ Collect metrics every minute\n\u00a0 public void collectMetrics() throws GSException, JsonMappingException, JsonProcessingException, ParseException {\n\u00a0 \u00a0 String repoOwner = \"microsoft\"; \n\u00a0 \u00a0 String repoName = \"vscode\"; \n\n\u00a0 \u00a0 List&lt;vcsactivitydto> commits = getCommits(repoOwner, repoName);\n\u00a0 \u00a0List&lt;\/vcsactivitydto>&lt;vcsactivitydto> pullRequests = getPullRequests(repoOwner, repoName);\n\u00a0 \u00a0 List&lt;\/vcsactivitydto>&lt;vcsactivitydto> branchEvents = getBranchEvents(repoOwner, repoName);\n\n\u00a0 \u00a0System.out.println(\"Collected Commits: \" + commits.size());\n\u00a0 \u00a0System.out.println(\"Collected Pull Requests: \" + pullRequests.size());\n\u00a0 \u00a0 System.out.println(\"Collected Pull Requests: \" + branchEvents.size());\n\u00a0 \u00a0 List&lt;\/vcsactivitydto>&lt;vcsactivitydto> result = new ArrayList&lt;>();\n\u00a0 \u00a0 result.addAll(commits);\n\u00a0 \u00a0 result.addAll(pullRequests);\n\u00a0 \u00a0 result.addAll(branchEvents);\n\u00a0 \u00a0 TimeSeries&lt;\/vcsactivitydto>&lt;vcsactivitydto> ts = store.putTimeSeries(\"vcsData\", VcsActivityDTO.class);\n\u00a0 \u00a0 for (VcsActivityDTO activity : result) {\n\u00a0 \u00a0 \u00a0 \u00a0 ts.append(activity);\n }\n }\n\n\u00a0 private HttpHeaders createHeaders() {\n\u00a0 \u00a0 HttpHeaders headers = new HttpHeaders();\n\u00a0 \u00a0 headers.set(\"Authorization\", \"Bearer \" + githubApiToken);\n\u00a0 \u00a0 return headers;\n }\n\n\u00a0 \/\/ Method to retrieve commits from a specific repository\n\u00a0 public List&lt;\/vcsactivitydto>&lt;vcsactivitydto> getCommits(String repoOwner, String repoName) throws ParseException {\n\u00a0 \u00a0 String url = UriComponentsBuilder.fromHttpUrl(githubBaseUrl)\n .path(\"\/repos\/{owner}\/{repo}\/commits\")\n .buildAndExpand(repoOwner, repoName)\n .toUriString();\n\n\u00a0 \u00a0 HttpHeaders headers = createHeaders();\n\u00a0 \u00a0 HttpEntity&lt;string> entity = new HttpEntity&lt;>(headers);\n\n\u00a0 \u00a0 ResponseEntity&lt;list> response = restTemplate.exchange(url, HttpMethod.GET, entity, List.class);\n\u00a0 \u00a0 List&lt;vcsactivitydto> commitActivities = new ArrayList&lt;>();\n\n\u00a0 \u00a0 List&lt;Map&lt;String, Object>> commits = (List&lt;Map&lt;String, Object>>) response.getBody();\n\u00a0 \u00a0 if (commits != null) {\n\u00a0 \u00a0 \u00a0 for (Map&lt;String, Object> commit : commits) {\n\u00a0 \u00a0 \u00a0 \u00a0 commitActivities.add(mapCommitToVcsActivityDTO(commit));\n }\n }\n\n\u00a0 \u00a0 return commitActivities;\n }\n\n\u00a0 public List&lt;\/vcsactivitydto>&lt;vcsactivitydto> getPullRequests(String repoOwner, String repoName) throws ParseException {\n\u00a0 \u00a0 String url = UriComponentsBuilder.fromHttpUrl(githubBaseUrl)\n .path(\"\/repos\/{owner}\/{repo}\/pulls\")\n .queryParam(\"state\", \"all\") \/\/ Retrieves both open and closed pull requests\n .buildAndExpand(repoOwner, repoName)\n .toUriString();\n\n\u00a0 \u00a0 HttpHeaders headers = createHeaders();\n\u00a0 \u00a0 HttpEntity&lt;string> entity = new HttpEntity&lt;>(headers);\n\n\u00a0 \u00a0 ResponseEntity&lt;list> response = restTemplate.exchange(url, HttpMethod.GET, entity, List.class);\n\u00a0 \u00a0 List&lt;vcsactivitydto> prActivities = new ArrayList&lt;>();\n\n\u00a0 \u00a0 List&lt;Map&lt;String, Object>> pullRequests = (List&lt;Map&lt;String, Object>>) response.getBody();\n\u00a0 \u00a0 if (pullRequests != null) {\n\u00a0 \u00a0 \u00a0 for (Map&lt;String, Object> pr : pullRequests) {\n\u00a0 \u00a0 \u00a0 \u00a0 prActivities.add(mapPullRequestToVcsActivityDTO(pr));\n }\n }\n\n\u00a0 \u00a0 return prActivities;\n }\n\n\u00a0 private VcsActivityDTO mapCommitToVcsActivityDTO(Map&lt;String, Object> commitData) throws ParseException {\n\u00a0 \u00a0 Map&lt;String, Object> commitInfo = (Map&lt;String, Object>) commitData.get(\"commit\");\n\u00a0 \u00a0 Map&lt;String, Object> authorInfo = (Map&lt;String, Object>) commitInfo.get(\"author\");\n\n\u00a0 \u00a0 String eventType = \"Commit\";\n\u00a0 \u00a0 String developerId = (String) authorInfo.get(\"name\");\n\u00a0 \u00a0 String repositoryId = (String) commitInfo.get(\"url\"); \n\u00a0 \u00a0 String branch = \"main\"; \n\u00a0 \u00a0 String status = \"Success\";\n\u00a0 \u00a0 String timestamp = (String) authorInfo.get(\"date\");\n\n\u00a0 \u00a0 return new VcsActivityDTO(new SimpleDateFormat(\"yyyy-MM-dd'T'HH:mm:ss'Z'\").parse(timestamp), eventType, developerId, repositoryId, branch, status);\n }\n\n\u00a0 private VcsActivityDTO mapPullRequestToVcsActivityDTO(Map&lt;String, Object> prData) throws ParseException {\n\u00a0 \u00a0 String eventType = \"Pull Request\";\n\u00a0 \u00a0 Map&lt;String, Object> userInfo = (Map&lt;String, Object>) prData.get(\"user\");\n\u00a0 \u00a0 String developerId = (String) userInfo.get(\"login\");\n\u00a0 \u00a0 String repositoryId = (String) userInfo.get(\"repos_url\");; \n\u00a0 \u00a0 String branch = (String) ((Map&lt;String, Object>)prData.get(\"base\")).get(\"ref\"); \n\u00a0 \u00a0 String status = (String) prData.get(\"state\"); \n\u00a0 \u00a0 String timestamp = (String) prData.get(\"created_at\");\n\u00a0 \u00a0 return new VcsActivityDTO(new SimpleDateFormat(\"yyyy-MM-dd'T'HH:mm:ss'Z'\").parse(timestamp), eventType, developerId, repositoryId, branch, status);\n }\n\n\u00a0 public List&lt;\/vcsactivitydto>&lt;vcsactivitydto> getBranchEvents(String repoOwner, String repoName) throws ParseException{\n\u00a0 \u00a0 String url = UriComponentsBuilder.fromHttpUrl(githubBaseUrl)\n .path(\"\/repos\/{owner}\/{repo}\/events\")\n .buildAndExpand(repoOwner, repoName)\n .toUriString();\n\n\u00a0 \u00a0 HttpHeaders headers = createHeaders();\n\u00a0 \u00a0 HttpEntity&lt;string> entity = new HttpEntity&lt;>(headers);\n\n\u00a0 \u00a0 ResponseEntity&lt;list> response = restTemplate.exchange(url, HttpMethod.GET, entity, List.class);\n\u00a0 \u00a0 List&lt;vcsactivitydto> branchActivities = new ArrayList&lt;>();\n\n\u00a0 \u00a0 List&lt;Map&lt;String, Object>> events = response.getBody();\n\u00a0 \u00a0 if (events != null) {\n\u00a0 \u00a0 \u00a0 for (Map&lt;String, Object> eventData : events) {\n\u00a0 \u00a0 \u00a0 \u00a0 String eventType = (String) eventData.get(\"type\");\n\u00a0 \u00a0 \u00a0 \u00a0 if (\"CreateEvent\".equals(eventType) || \"DeleteEvent\".equals(eventType)) {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Map&lt;String, Object> payload = (Map&lt;String, Object>) eventData.get(\"payload\");\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 String refType = (String) payload.get(\"ref_type\");\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if (\"branch\".equals(refType)) {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 String branchName = (String) payload.get(\"ref\");\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 String developerId = (String) ((Map&lt;String, Object>)eventData.get(\"actor\")).get(\"login\"); \u00a0\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 String timestamp = (String) eventData.get(\"created_at\");\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \/\/ Map to VcsActivityDTO\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 VcsActivityDTO activity = new VcsActivityDTO(new SimpleDateFormat(\"yyyy-MM-dd'T'HH:mm:ss'Z'\").parse(timestamp),\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 eventType.equals(\"CreateEvent\") ? \"Branch Creation\" : \"Branch Deletion\",\n developerId,\n repoName,\n branchName,\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \"Success\"\n );\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 branchActivities.add(activity);\n }\n }\n }\n }\n\u00a0 \u00a0 return branchActivities;\n }\n\n}&lt;\/vcsactivitydto>&lt;\/list>&lt;\/string>&lt;\/vcsactivitydto>&lt;\/list>&lt;\/string>&lt;\/vcsactivitydto>&lt;\/list>&lt;\/string>&lt;\/vcsactivitydto><\/code><\/pre>\n<\/div>\n<p>\u4e0a\u8a18\u306e\u30b9\u30c6\u30c3\u30d7\u306b\u5f93\u3046\u3053\u3068\u3067\u3001GitHub\u304b\u3089\u958b\u767a\u8005\u306e\u6d3b\u52d5\u306b\u95a2\u3059\u308b\u30c7\u30fc\u30bf\u3092\u52b9\u679c\u7684\u306b\u62bd\u51fa\u3067\u304d\u3001GridDB\u306b\u8aad\u307f\u8fbc\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n<h2><strong>GridDB\u3067\u306e\u30c7\u30fc\u30bf\u30af\u30a8\u30ea\u3068Thymeleaf\u3092\u4f7f\u7528\u3057\u305f\u53ef\u8996\u5316<\/strong><\/h2>\n<p>GridDB\u306b\u30c7\u30fc\u30bf\u304c\u683c\u7d0d\u3055\u308c\u5229\u7528\u53ef\u80fd\u306b\u306a\u3063\u305f\u3089\u3001\u6b21\u306b\u3053\u306e\u30c7\u30fc\u30bf\u3092\u30a2\u30af\u30b7\u30e7\u30f3\u53ef\u80fd\u306a\u6d1e\u5bdf\u3092\u63d0\u4f9b\u3059\u308b\u5f62\u3067\u53ef\u8996\u5316\u3057\u307e\u3059\u3002<\/p>\n<p>\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001Spring Boot\u3001<code>Thymeleaf<\/code>\u3001<code>Chart.js<\/code>\u3092\u4f7f\u7528\u3057\u3066\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u3092\u69cb\u7bc9\u3057\u3001\u30b3\u30df\u30c3\u30c8\u3068\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u30c8\u30ec\u30f3\u30c9\u3092\u6642\u9593\u8ef8\u306b\u6cbf\u3063\u3066\u8868\u793a\u3059\u308b\u30c1\u30e3\u30fc\u30c8\u3092\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3059\u308b\u65b9\u6cd5\u3092\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n<p>\u4ee5\u4e0b\u306e\u624b\u9806\u3067\u3053\u308c\u3092\u5b9f\u73fe\u3057\u307e\u3059\uff1a<\/p>\n<ul>\n<li><strong>\u30c1\u30e3\u30fc\u30c8\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u306e\u69cb\u7bc9<\/strong><\/li>\n<\/ul>\n<p><code>ChartController<\/code>\u306f\u3001GridDB\u306e\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u30c7\u30fc\u30bf\u3068\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u306b\u8868\u793a\u3055\u308c\u308b\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u306e\u53ef\u8996\u5316\u306e\u9593\u3067\u4ef2\u4ecb\u5f79\u3092\u679c\u305f\u3057\u307e\u3059\u3002\u305d\u306e\u5f79\u5272\u306b\u306f\u3001HTTP\u30ea\u30af\u30a8\u30b9\u30c8\u306e\u51e6\u7406\u3001\u30b5\u30fc\u30d3\u30b9\u5c64\u3068\u306e\u9023\u643a\u306b\u3088\u308b\u30c7\u30fc\u30bf\u306e\u53d6\u5f97\u3001\u304a\u3088\u3073\u305d\u306e\u30c7\u30fc\u30bf\u3092Thymeleaf\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u306b\u6e21\u3057\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3092\u884c\u3046\u3053\u3068\u304c\u542b\u307e\u308c\u307e\u3059\u3002<\/p>\n<p>\u4ee5\u4e0b\u306b<code>ChartController<\/code>\u306e\u5b9f\u88c5\u4f8b\u3092\u793a\u3057\u307e\u3059\uff1a<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-java\">package mycode.controller;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Controller;\nimport org.springframework.ui.Model;\nimport org.springframework.web.bind.annotation.GetMapping;\n\nimport com.fasterxml.jackson.databind.ObjectMapper;\n\nimport mycode.service.ChartService;\nimport mycode.dto.VcsActivityDTO;\n\nimport java.text.SimpleDateFormat;\nimport java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\n\n@Controller\npublic class ChartController {\n\n @Autowired\n\u00a0 ChartService chartService;\n\n @Autowired\n\u00a0 private ObjectMapper objectMapper;\n\n @GetMapping(\"\/charts\")\n\u00a0 public String showCharts(Model model) {\n\u00a0 \u00a0 try {\n\u00a0 \u00a0 \u00a0 List&lt;vcsactivitydto> events = chartService.getVcsEvents();\n\u00a0 \u00a0 \u00a0 model.addAttribute(\"events\", events);\n\n\u00a0 \u00a0 \u00a0 \/\/ Prepare data for charts\n\u00a0 \u00a0 \u00a0 Map&lt;String, Integer> commitData = prepareCommitData(events);\n\u00a0 \u00a0 \u00a0 Map&lt;String, Integer> prData = preparePullRequestData(events);\n\n\u00a0 \u00a0 \u00a0 \/\/ Convert Maps to JSON Strings for use in JavaScript in the Thymeleaf template\n\u00a0 \u00a0 \u00a0 String commitDataJson = objectMapper.writeValueAsString(commitData);\n\u00a0 \u00a0 \u00a0 String prDataJson = objectMapper.writeValueAsString(prData);\n\n\u00a0 \u00a0 \u00a0 model.addAttribute(\"commitDataJson\", commitDataJson);\n\u00a0 \u00a0 \u00a0 model.addAttribute(\"prDataJson\", prDataJson);\n\n } catch (Exception e) {\n\u00a0 \u00a0 \u00a0 e.printStackTrace();\n }\n\u00a0 \u00a0 return \"charts\";\n }\n\n\u00a0 private Map&lt;String, Integer> prepareCommitData(List&lt;\/vcsactivitydto>&lt;vcsactivitydto> events) {\n\u00a0 \u00a0 Map&lt;String, Integer> commitMap = new HashMap&lt;>();\n\u00a0 \u00a0 SimpleDateFormat dateFormat = new SimpleDateFormat(\"yyyy-MM-dd\"); \n\n\u00a0 \u00a0 for (VcsActivityDTO event : events) {\n\u00a0 \u00a0 \u00a0 if (\"Commit\".equals(event.getEventType())) {\n\u00a0 \u00a0 \u00a0 \u00a0 String timestamp = dateFormat.format(event.getTimestamp());\n\u00a0 \u00a0 \u00a0 \u00a0 commitMap.put(timestamp, commitMap.getOrDefault(timestamp, 0) + 1);\n }\n }\n\u00a0 \u00a0 return commitMap;\n }\n\n\u00a0 private Map&lt;String, Integer> preparePullRequestData(List&lt;\/vcsactivitydto>&lt;vcsactivitydto> events) {\n\u00a0 \u00a0 Map&lt;String, Integer> prMap = new HashMap&lt;>();\n\u00a0 \u00a0 SimpleDateFormat dateFormat = new SimpleDateFormat(\"yyyy-MM-dd\"); \/\/ Date format\n\n\u00a0 \u00a0 for (VcsActivityDTO event : events) {\n\u00a0 \u00a0 \u00a0 if (\"Pull Request\".equals(event.getEventType())) {\n\u00a0 \u00a0 \u00a0 \u00a0 String timestamp = dateFormat.format(event.getTimestamp()); \n\u00a0 \u00a0 \u00a0 \u00a0 prMap.put(timestamp, prMap.getOrDefault(timestamp, 0) + 1);\n }\n }\n\u00a0 \u00a0 return prMap;\n }\n}&lt;\/vcsactivitydto><\/code><\/pre>\n<\/div>\n<ul>\n<li><strong>\u30c1\u30e3\u30fc\u30c8 \u30b5\u30fc\u30d3\u30b9\u306e\u5b9f\u65bd<\/strong><\/li>\n<\/ul>\n<p><code>ChartService<\/code>\u306f\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u5c64\u3068\u3057\u3066\u6a5f\u80fd\u3057\u3001GridDB\u3078\u306e\u30af\u30a8\u30ea\u5b9f\u884c\u3068\u7d50\u679c\u306e\u51e6\u7406\u306b\u5fc5\u8981\u306a\u64cd\u4f5c\u3092\u30ab\u30d7\u30bb\u30eb\u5316\u3057\u307e\u3059\u3002<\/p>\n<p><code>ChartService<\/code>\u30af\u30e9\u30b9\u306f\u3001<code>\u300cvcsData\u300d<\/code>\u3068\u3044\u3046\u540d\u524d\u306eGridStore\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30b3\u30f3\u30c6\u30ca\u304b\u3089VCS\uff08\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\uff09\u30a4\u30d9\u30f3\u30c8\u3092\u53d6\u5f97\u3057\u307e\u3059\u3002\u30b5\u30fc\u30d3\u30b9\u306f\u7d50\u679c\u306e\u5404\u884c\u3092\u51e6\u7406\u3057\u3001<code>Timestamp<\/code>\u3001<code>EventType<\/code>\u3001<code>DeveloperId<\/code>\u3001<code>RepositoryId<\/code>\u3001<code>Branch<\/code>\u3001<code>Status<\/code> \u306a\u3069\u306e\u30d5\u30a3\u30fc\u30eb\u30c9\u3092 <code>VcsActivityDTO<\/code> \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306b\u30de\u30c3\u30d4\u30f3\u30b0\u3057\u307e\u3059\u3002\u6700\u5f8c\u306b\u3001\u3053\u308c\u3089\u306e DTO \u306e\u30ea\u30b9\u30c8\u3092\u8fd4\u5374\u3057\u3001VCS \u30a2\u30af\u30c6\u30a3\u30d3\u30c6\u30a3 \u30a4\u30d9\u30f3\u30c8\u3092\u8868\u3057\u307e\u3059\u3002<\/p>\n<p>\u4ee5\u4e0b\u306b <code>ChartService<\/code> \u306e\u5b9f\u88c5\u4f8b\u3092\u793a\u3057\u307e\u3059\uff1a<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-java\">package mycode.service;\n\nimport java.text.SimpleDateFormat;\nimport java.util.ArrayList;\nimport java.util.Date;\nimport java.util.HashMap;\nimport java.util.Map;\nimport java.util.List;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\n\nimport com.toshiba.mwcloud.gs.Container;\nimport com.toshiba.mwcloud.gs.GridStore;\nimport com.toshiba.mwcloud.gs.Query;\nimport com.toshiba.mwcloud.gs.Row;\nimport com.toshiba.mwcloud.gs.RowSet;\n\nimport mycode.dto.VcsActivityDTO;\n\n@Service\npublic class ChartService {\n\n @Autowired\n\u00a0 GridStore store;\n\n\u00a0 public List&lt;vcsactivitydto> getVcsEvents() throws Exception {\n\n\u00a0 \u00a0 Container<?, Row> container = store.getContainer(\"vcsData\");\n\u00a0 \u00a0 if (container == null) {\n\u00a0 \u00a0 \u00a0 throw new Exception(\"Container not found.\");\n }\n\u00a0 \u00a0 List&lt;\/vcsactivitydto>&lt;vcsactivitydto> eventList = new ArrayList&lt;>();\n\n\n\u00a0 \u00a0 SimpleDateFormat dateFormat = new SimpleDateFormat(\"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'\");\n\u00a0 \u00a0 Date now = new Date();\n\n\u00a0 \u00a0 String nowString = dateFormat.format(now);\n\u00a0 \u00a0 String startTime = \"1971-12-23T18:18:52.000Z\";\n\n\u00a0 \u00a0 String queryString = \"select * where Timestamp >= TIMESTAMP('\" + startTime\n + \"') and Timestamp &lt;= TIMESTAMP('\" + nowString + \"')\";\n\u00a0 \u00a0 Query&lt;row> query = container.query(queryString);\n\u00a0 \u00a0 RowSet&lt;\/row>&lt;row> rs = query.fetch();\n\n\u00a0 \u00a0 while (rs.hasNext()) {\n\u00a0 \u00a0 \u00a0 Row row = rs.next();\n\u00a0 \u00a0 \u00a0 VcsActivityDTO event = new VcsActivityDTO();\n\u00a0 \u00a0 \u00a0 event.setTimestamp(row.getTimestamp(0));\n\u00a0 \u00a0 \u00a0 event.setEventType(row.getString(2));\n\u00a0 \u00a0 \u00a0 event.setDeveloperId(row.getString(3));\n\u00a0 \u00a0 \u00a0 event.setRepositoryId(row.getString(4));\n\u00a0 \u00a0 \u00a0 event.setBranch(row.getString(5));\n\u00a0 \u00a0 \u00a0 event.setStatus(row.getString(1));\n\u00a0 \u00a0 \u00a0 eventList.add(event);\n\n }\n\u00a0 \u00a0 return eventList;\n }\n\n}&lt;\/row>&lt;\/vcsactivitydto><\/code><\/pre>\n<\/div>\n<ul>\n<li><strong>Thymeleaf \u3092\u4f7f\u7528\u3057\u305f\u30c1\u30e3\u30fc\u30c8\u63cf\u753b<\/strong><\/li>\n<\/ul>\n<p>\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u3057\u51e6\u7406\u3057\u305f\u5f8c\u306f\u3001Thymeleaf\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4f7f\u7528\u3057\u3066\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u306b\u30c1\u30e3\u30fc\u30c8\u3092\u8868\u793a\u3059\u308b\u6700\u7d42\u30b9\u30c6\u30c3\u30d7\u3067\u3059\u3002Thymeleaf\u306f\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u30c7\u30fc\u30bf\u3092HTML\u30d3\u30e5\u30fc\u306b\u30b7\u30fc\u30e0\u30ec\u30b9\u306b\u7d71\u5408\u3067\u304d\u308b\u305f\u3081\u3001\u52d5\u7684\u304b\u3064\u30c7\u30fc\u30bf\u99c6\u52d5\u578b\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u6700\u9069\u306a\u9078\u629e\u80a2\u3067\u3059\u3002<\/p>\n<p>\u4ee5\u4e0b\u306f<code>charts.html<\/code>\u306e\u5b9f\u88c5\u4f8b\u3067\u3059\uff1a<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-html\">&lt;!DOCTYPE html&gt;\n&lt;html xmlns_th=\"http:\/\/www.thymeleaf.org\"&gt;\n\n&lt;head&gt;\n\u00a0 &lt;title&gt;VCS Activity Charts&lt;\/title&gt;\n\u00a0 &lt;script src=\"https:\/\/cdn.jsdelivr.net\/npm\/chart.js\"&gt;&lt;\/script&gt;\n\u00a0 &lt;style&gt;\n\u00a0 \u00a0 \/* Center the content and add padding *\/\n\u00a0 \u00a0 body {\n\u00a0 \u00a0 \u00a0 font-family: Arial, sans-serif;\n\u00a0 \u00a0 \u00a0 display: flex;\n\u00a0 \u00a0 \u00a0 justify-content: center;\n\u00a0 \u00a0 \u00a0 align-items: center;\n\u00a0 \u00a0 \u00a0 flex-direction: column;\n\u00a0 \u00a0 \u00a0 margin: 0;\n\u00a0 \u00a0 \u00a0 padding: 20px;\n\u00a0 \u00a0 \u00a0 background-color: #f5f5f5;\n }\n\n\u00a0 \u00a0 \/* Style containers for each chart *\/\n\u00a0 \u00a0 .chart-container {\n\u00a0 \u00a0 \u00a0 background-color: white;\n\u00a0 \u00a0 \u00a0 border-radius: 8px;\n\u00a0 \u00a0 \u00a0 box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n\u00a0 \u00a0 \u00a0 padding: 20px;\n\u00a0 \u00a0 \u00a0 margin: 20px 0;\n\u00a0 \u00a0 \u00a0 width: 100%;\n\u00a0 \u00a0 \u00a0 max-width: 600px;\n }\n\n\u00a0 \u00a0 \/* Canvas styling with a fixed height *\/\n\u00a0 \u00a0 canvas {\n\u00a0 \u00a0 \u00a0 width: 100% !important;\n\u00a0 \u00a0 \u00a0 height: 300px !important;\n }\n\n\u00a0 \u00a0 \/* Chart title styling *\/\n\u00a0 \u00a0 h2 {\n\u00a0 \u00a0 \u00a0 text-align: center;\n\u00a0 \u00a0 \u00a0 color: #333;\n\u00a0 \u00a0 \u00a0 font-size: 24px;\n\u00a0 \u00a0 \u00a0 margin-bottom: 20px;\n }\n\u00a0 &lt;\/style&gt;\n&lt;\/head&gt;\n\n&lt;body&gt;\n\n\u00a0 &lt;div class=\"chart-container\"&gt;\n\u00a0 \u00a0 &lt;h2&gt;Commit Activity&lt;\/h2&gt;\n\u00a0 \u00a0 &lt;canvas id=\"commitChart\"&gt;&lt;\/canvas&gt;\n\u00a0 &lt;\/div&gt;\n\n\u00a0 &lt;div class=\"chart-container\"&gt;\n\u00a0 \u00a0 &lt;h2&gt;Pull Request Activity&lt;\/h2&gt;\n\u00a0 \u00a0 &lt;canvas id=\"prChart\"&gt;&lt;\/canvas&gt;\n\u00a0 &lt;\/div&gt;\n\n\u00a0 &lt;!-- Inline JavaScript block to properly process Thymeleaf variables --&gt;\n\u00a0 &lt;script th_inline=\"javascript\"&gt;\n\u00a0 \u00a0 \/\/ Thymeleaf will automatically insert the JSON string correctly\n\u00a0 \u00a0 const commitData = [[${ commitDataJson }]];\n\u00a0 \u00a0 const prData = [[${ prDataJson }]];\n\n\u00a0 \u00a0 \/\/ Parse JSON data into JavaScript objects\n\u00a0 \u00a0 const parsedCommitData = JSON.parse(commitData);\n\u00a0 \u00a0 const parsedPrData = JSON.parse(prData);\n\n\u00a0 \u00a0 \/\/ Helper function to sort the data by date keys\n\u00a0 \u00a0 function sortByDate(data) {\n\u00a0 \u00a0 \u00a0 return Object.keys(data)\n .sort((a, b) =&gt; new Date(a) - new Date(b)) \u00a0\/\/ Sort the date strings in ascending order\n .reduce((obj, key) =&gt; {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 obj[key] = data[key]; \/\/ Rebuild the object in sorted order\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return obj;\n }, {});\n }\n\n\u00a0 \u00a0 \/\/ Sort the commit and PR data by date\n\u00a0 \u00a0 const sortedCommitData = sortByDate(parsedCommitData);\n\u00a0 \u00a0 const sortedPrData = sortByDate(parsedPrData);\n\n\u00a0 \u00a0 \/\/ Extract labels (dates) and values (counts) for Commit chart\n\u00a0 \u00a0 const commitLabels = Object.keys(sortedCommitData);\n\u00a0 \u00a0 const commitValues = Object.values(sortedCommitData);\n\n\u00a0 \u00a0 \/\/ Extract labels (dates) and values (counts) for Pull Request chart\n\u00a0 \u00a0 const prLabels = Object.keys(sortedPrData);\n\u00a0 \u00a0 const prValues = Object.values(sortedPrData);\n\n\u00a0 \u00a0 \/\/ Commit Activity Chart\n\u00a0 \u00a0 const commitCtx = document.getElementById('commitChart').getContext('2d');\n\u00a0 \u00a0 const commitChart = new Chart(commitCtx, {\n\u00a0 \u00a0 \u00a0 type: 'line',\n\u00a0 \u00a0 \u00a0 data: {\n\u00a0 \u00a0 \u00a0 \u00a0 labels: commitLabels,\n\u00a0 \u00a0 \u00a0 \u00a0 datasets: [{\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 label: 'Commits',\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 data: commitValues,\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 backgroundColor: 'rgba(75, 192, 192, 0.2)',\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 borderColor: 'rgba(75, 192, 192, 1)',\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 borderWidth: 2\n }]\n },\n\u00a0 \u00a0 \u00a0 options: {\n\u00a0 \u00a0 \u00a0 \u00a0 responsive: true,\n\u00a0 \u00a0 \u00a0 \u00a0 maintainAspectRatio: true,\n\u00a0 \u00a0 \u00a0 \u00a0 scales: {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 y: {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 beginAtZero: true\n }\n }\n }\n });\n\n\u00a0 \u00a0 \/\/ Pull Request Activity Chart\n\u00a0 \u00a0 const prCtx = document.getElementById('prChart').getContext('2d');\n\u00a0 \u00a0 const prChart = new Chart(prCtx, {\n\u00a0 \u00a0 \u00a0 type: 'line',\n\u00a0 \u00a0 \u00a0 data: {\n\u00a0 \u00a0 \u00a0 \u00a0 labels: prLabels,\n\u00a0 \u00a0 \u00a0 \u00a0 datasets: [{\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 label: 'Pull Requests',\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 data: prValues,\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 backgroundColor: 'rgba(153, 102, 255, 0.2)',\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 borderColor: 'rgba(153, 102, 255, 1)',\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 borderWidth: 2\n }]\n },\n\u00a0 \u00a0 \u00a0 options: {\n\u00a0 \u00a0 \u00a0 \u00a0 responsive: true,\n\u00a0 \u00a0 \u00a0 \u00a0 maintainAspectRatio: true,\n\u00a0 \u00a0 \u00a0 \u00a0 scales: {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 y: {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 beginAtZero: true\n }\n }\n }\n });\n\u00a0 &lt;\/script&gt;\n&lt;\/body&gt;\n\n&lt;\/html&gt;<\/code><\/pre>\n<\/div>\n<h3>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u5b9f\u884c<\/h3>\n<p>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u5b9f\u884c\u3059\u308b\u306b\u306f\u3001\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u3066\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u30d3\u30eb\u30c9\u3057\u3001\u5b9f\u884c\u3057\u307e\u3059\uff1a<\/p>\n<div class=\"clipboard\">\n<pre><code class=\"language-sh\">mvn clean install && mvn spring-boot:run \u00a0<\/code><\/pre>\n<\/div>\n<h3>\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u3078\u306e\u30a2\u30af\u30bb\u30b9<\/h3>\n<p>\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304c\u8d77\u52d5\u3057\u305f\u3089\u3001\u30a6\u30a7\u30d6\u30d6\u30e9\u30a6\u30b6\u3092\u958b\u304d\u3001<code>http:\/\/localhost:9090<\/code> \u306b\u30a2\u30af\u30bb\u30b9\u3057\u307e\u3059\u3002\u3053\u306eURL\u306b\u306f\u3001\u30b3\u30df\u30c3\u30c8\u6d3b\u52d5\u3068\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u6d3b\u52d5\u3092\u6642\u9593\u8ef8\u3067\u53ef\u8996\u5316\u3057\u305f\u30c1\u30e3\u30fc\u30c8\u3092\u8868\u793a\u3059\u308bThymeleaf\u30d9\u30fc\u30b9\u306e\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002<\/p>\n<p><a href=\"https:\/\/griddb.net\/wp-content\/uploads\/2025\/03\/chart.png\"><img fetchpriority=\"high\" decoding=\"async\" src=\"https:\/\/griddb.net\/wp-content\/uploads\/2025\/03\/chart.png\" alt=\"\" width=\"993\" height=\"929\" class=\"aligncenter size-full wp-image-31406\" srcset=\"\/wp-content\/uploads\/2025\/03\/chart.png 993w, \/wp-content\/uploads\/2025\/03\/chart-300x281.png 300w, \/wp-content\/uploads\/2025\/03\/chart-768x719.png 768w, \/wp-content\/uploads\/2025\/03\/chart-600x561.png 600w\" sizes=\"(max-width: 993px) 100vw, 993px\" \/><\/a><\/p>\n<p>\u3053\u306e\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u306e\u30c1\u30e3\u30fc\u30c8\u306f\u3001GitHub\u304b\u3089\u53d6\u5f97\u3057\u305f\u30c7\u30fc\u30bf\u3092\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e<code>ChartService<\/code>\u3067\u51e6\u7406\u3057\u3066\u52d5\u7684\u306b\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n<p><strong>GridDB\u3067\u306e\u30c7\u30fc\u30bf\u683c\u7d0d\uff1a<\/strong><\/p>\n<p>GridDB Shell\u30c4\u30fc\u30eb\u3092\u4f7f\u7528\u3059\u308b\u3068\u3001\u4ee5\u4e0b\u306e\u4f8b\u306e\u3088\u3046\u306b\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u304b\u3089\u76f4\u63a5\u30c7\u30fc\u30bf\u306b\u30a2\u30af\u30bb\u30b9\u3057\u3001\u30af\u30a8\u30ea\u3092\u5b9f\u884c\u3067\u304d\u307e\u3059\u3002<\/p>\n<p><a href=\"https:\/\/griddb.net\/wp-content\/uploads\/2025\/03\/GridDB.png\"><img decoding=\"async\" src=\"https:\/\/griddb.net\/wp-content\/uploads\/2025\/03\/GridDB.png\" alt=\"\" width=\"1339\" height=\"699\" class=\"aligncenter size-full wp-image-31407\" srcset=\"\/wp-content\/uploads\/2025\/03\/GridDB.png 1339w, \/wp-content\/uploads\/2025\/03\/GridDB-300x157.png 300w, \/wp-content\/uploads\/2025\/03\/GridDB-1024x535.png 1024w, \/wp-content\/uploads\/2025\/03\/GridDB-768x401.png 768w, \/wp-content\/uploads\/2025\/03\/GridDB-600x313.png 600w\" sizes=\"(max-width: 1339px) 100vw, 1339px\" \/><\/a><\/p>\n<h3><strong>\u7d50\u8ad6\uff1a<\/strong><\/h3>\n<p>VCS\u6d3b\u52d5\u306e\u8ffd\u8de1\u306f\u3001\u30c1\u30fc\u30e0\u306e\u30d7\u30ed\u30c0\u30af\u30c6\u30a3\u30d3\u30c6\u30a3\u3092\u7406\u89e3\u3057\u3001\u958b\u767a\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u6700\u9069\u5316\u3059\u308b\u305f\u3081\u306b\u4e0d\u53ef\u6b20\u3067\u3059\u3002GridDB\u306e\u30bf\u30a4\u30e0\u30b7\u30ea\u30fc\u30ba\u30c7\u30fc\u30bf\u51e6\u7406\u306e\u52b9\u7387\u6027\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30c1\u30fc\u30e0\u306f\u30b3\u30df\u30c3\u30c8\u3001\u30de\u30fc\u30b8\u3001\u30d7\u30eb\u30ea\u30af\u30a8\u30b9\u30c8\u306a\u3069\u306e\u91cd\u8981\u306a\u30a4\u30d9\u30f3\u30c8\u3092\u5bb9\u6613\u306b\u6355\u6349\u3067\u304d\u3001\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u306e\u6d1e\u5bdf\u3068\u8a73\u7d30\u306a\u6b74\u53f2\u7684\u5206\u6790\u306e\u4e21\u65b9\u3092\u53ef\u80fd\u306b\u3057\u307e\u3059\u3002<\/p>\n<p>GridDB\u306e\u30b9\u30b1\u30fc\u30e9\u30d3\u30ea\u30c6\u30a3\u3068\u9ad8\u901f\u306a\u30c7\u30fc\u30bf\u53d6\u5f97\u306b\u3088\u308a\u3001\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u30c1\u30fc\u30e0\u306f\u30c8\u30ec\u30f3\u30c9\u306e\u76e3\u8996\u3001\u30dc\u30c8\u30eb\u30cd\u30c3\u30af\u306e\u89e3\u6d88\u3001\u5354\u696d\u306e\u6539\u5584\u3092\u5b9f\u73fe\u3057\u3001\u6700\u7d42\u7684\u306b\u3088\u308a\u52b9\u7387\u7684\u3067\u751f\u7523\u6027\u306e\u9ad8\u3044\u958b\u767a\u30d7\u30ed\u30bb\u30b9\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u6982\u8981 \u73fe\u5728\u306e\u7af6\u4e89\u306e\u6fc0\u3057\u3044\u30d3\u30b8\u30cd\u30b9\u74b0\u5883\u306b\u304a\u3044\u3066\u3001\u9ad8\u54c1\u8cea\u306a\u88fd\u54c1\u3092\u8fc5\u901f\u306b\u63d0\u4f9b\u3059\u308b\u305f\u3081\u306b\u306f\u3001\u52b9\u7387\u7684\u306a\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u958b\u767a\u304c\u4e0d\u53ef\u6b20\u3067\u3059\u3002\u3053\u306e\u76ee\u6a19\u3092\u9054\u6210\u3059\u308b\u305f\u3081\u306e\u91cd\u8981\u306a\u8981\u7d20\u306e\u4e00\u3064\u304c\u3001\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\uff08VCS\uff09\u306b\u304a\u3051\u308b\u958b\u767a\u8005\u306e\u6d3b\u52d5\u3092 [&hellip;]<\/p>\n","protected":false},"author":41,"featured_media":49098,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1005],"tags":[],"class_list":["post-50931","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>\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u958b\u767a\u306e\u6700\u9069\u5316\uff1aGridDB \u3092\u7528\u3044\u305f\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u306e\u6d3b\u52d5\u76e3\u8996 | GridDB: Open Source Time Series Database for IoT<\/title>\n<meta name=\"description\" content=\"\u6982\u8981\" \/>\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\/optimizing-software-development-vcs-activity-monitoring-with-griddb\/\" \/>\n<meta property=\"og:locale\" content=\"ja_JP\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u958b\u767a\u306e\u6700\u9069\u5316\uff1aGridDB \u3092\u7528\u3044\u305f\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u306e\u6d3b\u52d5\u76e3\u8996 | GridDB: Open Source Time Series Database for IoT\" \/>\n<meta property=\"og:description\" content=\"\u6982\u8981\" \/>\n<meta property=\"og:url\" content=\"https:\/\/griddb.net\/ja\/\u672a\u5206\u985e\/optimizing-software-development-vcs-activity-monitoring-with-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=\"2025-03-20T07:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-14T15:57:05+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.griddb.net\/wp-content\/uploads\/2020\/03\/chart.png\" \/>\n\t<meta property=\"og:image:width\" content=\"739\" \/>\n\t<meta property=\"og:image:height\" content=\"457\" \/>\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=\"10\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\/optimizing-software-development-vcs-activity-monitoring-with-griddb\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/optimizing-software-development-vcs-activity-monitoring-with-griddb\/\"},\"author\":{\"name\":\"griddb-admin\",\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/person\/4fe914ca9576878e82f5e8dd3ba52233\"},\"headline\":\"\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u958b\u767a\u306e\u6700\u9069\u5316\uff1aGridDB \u3092\u7528\u3044\u305f\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u306e\u6d3b\u52d5\u76e3\u8996\",\"datePublished\":\"2025-03-20T07:00:00+00:00\",\"dateModified\":\"2025-11-14T15:57:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/optimizing-software-development-vcs-activity-monitoring-with-griddb\/\"},\"wordCount\":136,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#organization\"},\"image\":{\"@id\":\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/optimizing-software-development-vcs-activity-monitoring-with-griddb\/#primaryimage\"},\"thumbnailUrl\":\"\/wp-content\/uploads\/2020\/03\/chart.png\",\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/optimizing-software-development-vcs-activity-monitoring-with-griddb\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/optimizing-software-development-vcs-activity-monitoring-with-griddb\/\",\"url\":\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/optimizing-software-development-vcs-activity-monitoring-with-griddb\/\",\"name\":\"\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u958b\u767a\u306e\u6700\u9069\u5316\uff1aGridDB \u3092\u7528\u3044\u305f\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u306e\u6d3b\u52d5\u76e3\u8996 | GridDB: Open Source Time Series Database for IoT\",\"isPartOf\":{\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/optimizing-software-development-vcs-activity-monitoring-with-griddb\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/optimizing-software-development-vcs-activity-monitoring-with-griddb\/#primaryimage\"},\"thumbnailUrl\":\"\/wp-content\/uploads\/2020\/03\/chart.png\",\"datePublished\":\"2025-03-20T07:00:00+00:00\",\"dateModified\":\"2025-11-14T15:57:05+00:00\",\"description\":\"\u6982\u8981\",\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/optimizing-software-development-vcs-activity-monitoring-with-griddb\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/optimizing-software-development-vcs-activity-monitoring-with-griddb\/#primaryimage\",\"url\":\"\/wp-content\/uploads\/2020\/03\/chart.png\",\"contentUrl\":\"\/wp-content\/uploads\/2020\/03\/chart.png\",\"width\":739,\"height\":457,\"caption\":\"GridDB Performance using Google Cloud Platform\"},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#website\",\"url\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.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-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ja\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#organization\",\"name\":\"Fixstars\",\"url\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.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-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.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-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/person\/4fe914ca9576878e82f5e8dd3ba52233\",\"name\":\"griddb-admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.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:\/\/www.griddb.net\/ja\/author\/griddb-admin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u958b\u767a\u306e\u6700\u9069\u5316\uff1aGridDB \u3092\u7528\u3044\u305f\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u306e\u6d3b\u52d5\u76e3\u8996 | GridDB: Open Source Time Series Database for IoT","description":"\u6982\u8981","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\/optimizing-software-development-vcs-activity-monitoring-with-griddb\/","og_locale":"ja_JP","og_type":"article","og_title":"\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u958b\u767a\u306e\u6700\u9069\u5316\uff1aGridDB \u3092\u7528\u3044\u305f\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u306e\u6d3b\u52d5\u76e3\u8996 | GridDB: Open Source Time Series Database for IoT","og_description":"\u6982\u8981","og_url":"https:\/\/griddb.net\/ja\/\u672a\u5206\u985e\/optimizing-software-development-vcs-activity-monitoring-with-griddb\/","og_site_name":"GridDB: Open Source Time Series Database for IoT","article_publisher":"https:\/\/www.facebook.com\/griddbcommunity\/","article_published_time":"2025-03-20T07:00:00+00:00","article_modified_time":"2025-11-14T15:57:05+00:00","og_image":[{"width":739,"height":457,"url":"https:\/\/www.griddb.net\/wp-content\/uploads\/2020\/03\/chart.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":"10\u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/optimizing-software-development-vcs-activity-monitoring-with-griddb\/#article","isPartOf":{"@id":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/optimizing-software-development-vcs-activity-monitoring-with-griddb\/"},"author":{"name":"griddb-admin","@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/person\/4fe914ca9576878e82f5e8dd3ba52233"},"headline":"\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u958b\u767a\u306e\u6700\u9069\u5316\uff1aGridDB \u3092\u7528\u3044\u305f\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u306e\u6d3b\u52d5\u76e3\u8996","datePublished":"2025-03-20T07:00:00+00:00","dateModified":"2025-11-14T15:57:05+00:00","mainEntityOfPage":{"@id":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/optimizing-software-development-vcs-activity-monitoring-with-griddb\/"},"wordCount":136,"commentCount":0,"publisher":{"@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#organization"},"image":{"@id":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/optimizing-software-development-vcs-activity-monitoring-with-griddb\/#primaryimage"},"thumbnailUrl":"\/wp-content\/uploads\/2020\/03\/chart.png","inLanguage":"ja","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/optimizing-software-development-vcs-activity-monitoring-with-griddb\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/optimizing-software-development-vcs-activity-monitoring-with-griddb\/","url":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/optimizing-software-development-vcs-activity-monitoring-with-griddb\/","name":"\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u958b\u767a\u306e\u6700\u9069\u5316\uff1aGridDB \u3092\u7528\u3044\u305f\u30d0\u30fc\u30b8\u30e7\u30f3\u7ba1\u7406\u30b7\u30b9\u30c6\u30e0\u306e\u6d3b\u52d5\u76e3\u8996 | GridDB: Open Source Time Series Database for IoT","isPartOf":{"@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/optimizing-software-development-vcs-activity-monitoring-with-griddb\/#primaryimage"},"image":{"@id":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/optimizing-software-development-vcs-activity-monitoring-with-griddb\/#primaryimage"},"thumbnailUrl":"\/wp-content\/uploads\/2020\/03\/chart.png","datePublished":"2025-03-20T07:00:00+00:00","dateModified":"2025-11-14T15:57:05+00:00","description":"\u6982\u8981","inLanguage":"ja","potentialAction":[{"@type":"ReadAction","target":["https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/optimizing-software-development-vcs-activity-monitoring-with-griddb\/"]}]},{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/griddb.net\/ja\/%e6%9c%aa%e5%88%86%e9%a1%9e\/optimizing-software-development-vcs-activity-monitoring-with-griddb\/#primaryimage","url":"\/wp-content\/uploads\/2020\/03\/chart.png","contentUrl":"\/wp-content\/uploads\/2020\/03\/chart.png","width":739,"height":457,"caption":"GridDB Performance using Google Cloud Platform"},{"@type":"WebSite","@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#website","url":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.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-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ja"},{"@type":"Organization","@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#organization","name":"Fixstars","url":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/","logo":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.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-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.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-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.net\/en\/#\/schema\/person\/4fe914ca9576878e82f5e8dd3ba52233","name":"griddb-admin","image":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/griddb-linux-hte8hndjf8cka8ht.westus-01.azurewebsites.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:\/\/www.griddb.net\/ja\/author\/griddb-admin\/"}]}},"_links":{"self":[{"href":"https:\/\/www.griddb.net\/ja\/wp-json\/wp\/v2\/posts\/50931","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.griddb.net\/ja\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.griddb.net\/ja\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.griddb.net\/ja\/wp-json\/wp\/v2\/users\/41"}],"replies":[{"embeddable":true,"href":"https:\/\/www.griddb.net\/ja\/wp-json\/wp\/v2\/comments?post=50931"}],"version-history":[{"count":1,"href":"https:\/\/www.griddb.net\/ja\/wp-json\/wp\/v2\/posts\/50931\/revisions"}],"predecessor-version":[{"id":51747,"href":"https:\/\/www.griddb.net\/ja\/wp-json\/wp\/v2\/posts\/50931\/revisions\/51747"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.griddb.net\/ja\/wp-json\/wp\/v2\/media\/49098"}],"wp:attachment":[{"href":"https:\/\/www.griddb.net\/ja\/wp-json\/wp\/v2\/media?parent=50931"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.griddb.net\/ja\/wp-json\/wp\/v2\/categories?post=50931"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.griddb.net\/ja\/wp-json\/wp\/v2\/tags?post=50931"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}