{"id":5576,"date":"2024-10-07T17:48:51","date_gmt":"2024-10-07T08:48:51","guid":{"rendered":"https:\/\/blog.since2020.jp\/?p=5576"},"modified":"2024-11-25T18:54:49","modified_gmt":"2024-11-25T09:54:49","slug":"looker-dashboard-summarization","status":"publish","type":"post","link":"https:\/\/since2020.jp\/media\/looker-dashboard-summarization\/","title":{"rendered":"LookerDashboardSummarization\u3092\u69cb\u7bc9\u3059\u308b\u65b9\u6cd5"},"content":{"rendered":"\n<p>Looker \u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u30b5\u30de\u30ea\u5316\u62e1\u5f35\u6a5f\u80fd\u306f\u3001Vertex AI \u3067\u30db\u30b9\u30c8\u3055\u308c\u308b\u5927\u898f\u6a21\u8a00\u8a9e\u30e2\u30c7\u30eb (LLM) \u3092\u6d3b\u7528\u3057\u3001Looker \u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u306e\u30c7\u30fc\u30bf\u3092\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u3067\u8981\u7d04\u3059\u308b\u62e1\u5f35\u6a5f\u80fd\u3067\u3059\u3002\u3053\u306e\u6a5f\u80fd\u306f WebSocket \u3092\u5229\u7528\u3057\u3066\u3001\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u306e\u30b5\u30de\u30ea\u751f\u6210\u3092\u5b9f\u73fe\u3057\u307e\u3059\u3002<\/p>\n\n\n<h2>\u306f\u3058\u3081\u306b<\/h2>\n<p><span style=\"font-family: arial, helvetica, sans-serif\"><span data-token-index=\"0\" class=\"notion-enable-hover\">Looker \u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u30b5\u30de\u30ea\u5316\u62e1\u5f35\u6a5f\u80fd<\/span>\u306f\u3001Vertex AI \u3067\u30db\u30b9\u30c8\u3055\u308c\u308b\u5927\u898f\u6a21\u8a00\u8a9e\u30e2\u30c7\u30eb (LLM) \u3092\u6d3b\u7528\u3057\u3001Looker \u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u306e\u30c7\u30fc\u30bf\u3092\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u3067\u8981\u7d04\u3059\u308b\u62e1\u5f35\u6a5f\u80fd\u3067\u3059\u3002\u3053\u306e\u6a5f\u80fd\u306f WebSocket \u3092\u5229\u7528\u3057\u3066\u3001\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u306e\u30b5\u30de\u30ea\u751f\u6210\u3092\u5b9f\u73fe\u3055\u308c\u307e\u3059\u3002<\/span><!-- notionvc: 5551410d-19d8-49ea-ae84-95ecabfeb6cb --><\/p>\n\n<h2>\u6a5f\u80fd\u6982\u8981<\/h2>\n<p><span style=\"font-family: arial, helvetica, sans-serif\">\u3053\u306e\u62e1\u5f35\u6a5f\u80fd\u306f\u3001\u4ee5\u4e0b\u306e3\u3064\u306e\u4e3b\u8981\u306a\u6a5f\u80fd\u306b\u5206\u304b\u308c\u307e\u3059\u3002<\/span><\/p>\r\n<p><span style=\"font-family: arial, helvetica, sans-serif\"><strong>1.\u30b5\u30de\u30ea\u751f\u6210<\/strong><\/span><\/p>\r\n<p><span style=\"font-family: arial, helvetica, sans-serif\">\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u306e\u30c7\u30fc\u30bf\u3092\u57fa\u306b\u7c21\u6f54\u306a\u30b5\u30de\u30ea\u3092\u751f\u6210\u3057\u307e\u3059\u3002<\/span><\/p>\r\n<p><span style=\"font-family: arial, helvetica, sans-serif\"><strong>2.\u51e6\u65b9 (Prescription)<\/strong><\/span><\/p>\r\n<p><span style=\"font-family: arial, helvetica, sans-serif\">\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u30c7\u30fc\u30bf\u306b\u57fa\u3065\u304d\u3001\u904b\u7528\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u63d0\u6848\u3057\u3001\u7570\u5e38\u5024\u3092\u6307\u6458\u3057\u307e\u3059\u3002<\/span><\/p>\r\n<p><span style=\"font-family: arial, helvetica, sans-serif\"><strong>3.\u884c\u52d5 (Action)<\/strong><\/span><\/p>\r\n<p><span style=\"font-family: arial, helvetica, sans-serif\">Looker \u306e API \u3092\u6d3b\u7528\u3057\u3001\u30a4\u30f3\u30b5\u30a4\u30c8\u3092\u7d44\u7e54\u306e\u30d3\u30b8\u30cd\u30b9\u30c4\u30fc\u30eb\u3078\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3057\u307e\u3059\u3002<\/span><\/p>\r\n<p><span style=\"font-family: arial, helvetica, sans-serif\">\u3055\u3089\u306b\u3001\u4ee5\u4e0b\u306e\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u6a5f\u80fd\u3082\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u3002<\/span><\/p>\r\n<ul>\r\n\t<li><span style=\"font-family: arial, helvetica, sans-serif\"><strong>Google Chat \u30a8\u30af\u30b9\u30dd\u30fc\u30c8<\/strong>\uff08Oauth \u7d71\u5408\uff09<\/span><\/li>\r\n\t<li><span style=\"font-family: arial, helvetica, sans-serif\"><strong>Slack \u30a8\u30af\u30b9\u30dd\u30fc\u30c8<\/strong>\uff08Oauth \u7d71\u5408\u3001\u30ea\u30c3\u30c1\u30c6\u30ad\u30b9\u30c8\u5bfe\u5fdc\uff09<\/span><\/li>\r\n<\/ul>\r\n<p><!-- notionvc: 39b3efd8-1dde-49e1-89ba-1b3f46d076bc --><\/p>\n\n<h2>\u4f7f\u7528\u6280\u8853<\/h2>\n<ul>\r\n\t<li><span style=\"font-family: arial, helvetica, sans-serif\"><strong>\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9<\/strong>: React, TypeScript, Webpack, Looker Extension SDK, Looker Query API<\/span><\/li>\r\n\t<li><span style=\"font-family: arial, helvetica, sans-serif\"><strong>\u30d0\u30c3\u30af\u30a8\u30f3\u30c9<\/strong>: Google Cloud Platform, Vertex AI, Cloud Run, WebSockets, Export API (Slack, Google Chat)<\/span><\/li>\r\n<\/ul>\r\n<p><!-- notionvc: 42e24e1a-00d1-4960-a5f2-696ae430dba8 --><\/p>\n\n<h2>1. Generative AI &amp; WebSocket \u30b5\u30fc\u30d0\u30fc\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7<\/h2>\n<p><span style=\"font-family: arial, helvetica, sans-serif\">\u3053\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001Generative AI \u3068 WebSocket \u3092\u4f7f\u7528\u3057\u305f\u30b5\u30fc\u30d0\u30fc\u3092 Cloud Run \u3067\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3059\u308b\u624b\u9806\u3092\u8aac\u660e\u3057\u307e\u3059\u3002<\/span><\/p>\r\n<b><span style=\"font-family: arial, helvetica, sans-serif\">\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u74b0\u5883\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7<\/span><\/b>\r\n<p><span style=\"font-family: arial, helvetica, sans-serif\">1.\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u30af\u30ed\u30fc\u30f3\u3057\u307e\u3059\u3002<\/span><\/p>\r\n<div class=\"hcb_wrap\">\r\n<pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code>git clone https:\/\/github.com\/looker-open-source\/dashboard-summarization.git<\/code><\/pre>\r\n<\/div>\r\n<p><span style=\"font-family: arial, helvetica, sans-serif\">2.\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3078\u79fb\u52d5\u3057\u307e\u3059\u3002<!-- notionvc: 64fbb6b4-2626-413d-8d19-d8ca8b916a5d --><\/span><\/p>\r\n<div class=\"hcb_wrap\">\r\n<pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><span style=\"font-family: arial, helvetica, sans-serif\"><code>cd dashboard-summarization\/websocket-service\/src<\/code><\/span><\/pre>\r\n<\/div>\r\n<p><br \/>\r\n<span style=\"font-family: arial, helvetica, sans-serif\"><!-- notionvc: b3ef32ac-2989-4eea-bd46-d0d751abcede --><\/span><\/p>\r\n<p><span style=\"font-family: arial, helvetica, sans-serif\">3.\u4f9d\u5b58\u95a2\u4fc2\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002<!-- notionvc: 45c15e58-67b6-4489-8598-62d11bd192b5 --><\/span><\/p>\r\n<div class=\"hcb_wrap\">\r\n<pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><span style=\"font-family: arial, helvetica, sans-serif\"><code>npm install<\/code><\/span><\/pre>\r\n<\/div>\r\n<p><br \/>\r\n<span style=\"font-family: arial, helvetica, sans-serif\"><!-- notionvc: 66661ec5-ccea-48a8-a11c-858682c71c27 --><\/span><\/p>\r\n<p><span style=\"font-family: arial, helvetica, sans-serif\">4.Node.js \u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u304c\u53e4\u3044\u5834\u5408\u3001<code>npm install<\/code> \u304c\u5931\u6557\u3059\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059\u3002\u5fc5\u8981\u306b\u5fdc\u3058\u3066 Node.js \u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u66f4\u65b0\u3059\u308b\u304b\u3001\u30d0\u30fc\u30b8\u30e7\u30f3\u30de\u30cd\u30fc\u30b8\u30e3\u3092\u4f7f\u7528\u3057\u3066\u9069\u5207\u306a\u30d0\u30fc\u30b8\u30e7\u30f3\u306b\u5909\u66f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/span><\/p>\r\n<p><span style=\"font-family: arial, helvetica, sans-serif\">5.<code>looker-example.ini<\/code> \u3092 <code>looker.ini<\/code> \u306b\u30ea\u30cd\u30fc\u30e0\u3057\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306b Looker API \u306e\u30af\u30ec\u30c7\u30f3\u30b7\u30e3\u30eb\u60c5\u5831\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002<\/span><\/p>\r\n<div class=\"hcb_wrap\">\r\n<pre class=\"prism line-numbers lang-json\" data-lang=\"JSON\"><span style=\"font-family: arial, helvetica, sans-serif\"><code>[mycompany]\r\nbase_url=\r\nclient_id=\r\nclient_secret=\r\nverify_ssl=true<\/code><\/span><\/pre>\r\n<\/div>\r\n<p><span style=\"font-family: arial, helvetica, sans-serif\">6.\u958b\u767a\u30b5\u30fc\u30d0\u30fc\u3092\u8d77\u52d5\u3057\u307e\u3059\u3002<!-- notionvc: 2fcd74e9-124c-4821-86b7-08fe80868fdd --><\/span><\/p>\r\n<div class=\"hcb_wrap\">\r\n<pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><span style=\"font-family: arial, helvetica, sans-serif\"><code>npm run start<\/code><\/span><\/pre>\r\n<\/div>\r\n<p><span style=\"font-family: arial, helvetica, sans-serif\">\u958b\u767a\u30b5\u30fc\u30d0\u30fc\u304c curl <span data-token-index=\"1\" class=\"notion-enable-hover\">http:\/\/localhost:5000<\/span> \u3067\u8d77\u52d5\u3059\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002<\/span><!-- notionvc: fb1ed4ee-068f-441c-89d0-976e80d685e6 --><\/p>\r\n<p><img decoding=\"async\" src=\"https:\/\/since2020.jp\/media\/wp-content\/uploads\/2024\/09\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2024-09-30-10.35.30.png\" alt=\"\" width=\"1066\" height=\"74\" class=\"alignnone size-full wp-image-5577\" srcset=\"https:\/\/since2020.jp\/media\/wp-content\/uploads\/2024\/09\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2024-09-30-10.35.30.png 1066w, https:\/\/since2020.jp\/media\/wp-content\/uploads\/2024\/09\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2024-09-30-10.35.30-300x21.png 300w, https:\/\/since2020.jp\/media\/wp-content\/uploads\/2024\/09\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2024-09-30-10.35.30-1024x71.png 1024w, https:\/\/since2020.jp\/media\/wp-content\/uploads\/2024\/09\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2024-09-30-10.35.30-768x53.png 768w\" sizes=\"(max-width: 1066px) 100vw, 1066px\" \/><\/p>\r\n<p>&nbsp;<\/p>\r\n<p><!-- notionvc: 604667f3-9fb4-4e61-832c-8eefc745855d --><\/p>\n\n<h2>2. \u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u306e\u30c7\u30d7\u30ed\u30a4<\/h2>\n<p><span style=\"font-family: arial, helvetica, sans-serif\">\u6b21\u306b\u3001\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u624b\u9806\u3092\u8aac\u660e\u3057\u307e\u3059\u3002\u3053\u308c\u306b\u306f Docker \u30d5\u30a1\u30a4\u30eb\u306e\u30d3\u30eb\u30c9\u3068\u3001Artifact Registry \u3078\u306e\u63d0\u51fa\u304c\u542b\u307e\u308c\u307e\u3059\u3002<\/span><\/p>\r\n<b><span style=\"font-family: arial, helvetica, sans-serif\">\u30c7\u30d7\u30ed\u30a4\u624b\u9806<\/span><\/b>\r\n<p><span style=\"font-family: arial, helvetica, sans-serif\">1.\u307e\u305a\u3001Artifact Registry \u306b\u30ea\u30dd\u30b8\u30c8\u30ea\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\u30c7\u30d7\u30ed\u30a4\u30ea\u30fc\u30b8\u30e7\u30f3\u3092\u6307\u5b9a\u3057\u3066\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002<\/span><\/p>\r\n<div class=\"hcb_wrap\">\r\n<pre class=\"prism line-numbers lang-json\" data-lang=\"JSON\"><code>gcloud artifacts repositories create dashboard-summarization-docker-repo --repository-format=docker --location=REGION<\/code><\/pre>\r\n<\/div>\r\n<p><span style=\"font-family: arial, helvetica, sans-serif\">2.\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u79fb\u52d5\u3057\u307e\u3059\u3002<!-- notionvc: 176cf81a-6f62-4c6f-b3b6-66208424fb5e --><\/span><\/p>\r\n<div class=\"hcb_wrap\">\r\n<pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code>cd dashboard-summarization\/websocket-service\/src<\/code><\/pre>\r\n<\/div>\r\n<p><span style=\"font-family: arial, helvetica, sans-serif\"><span data-token-index=\"0\" class=\"notion-enable-hover\">3.looker-example.ini<\/span> \u3092 <span data-token-index=\"2\" class=\"notion-enable-hover\">looker.ini<\/span> \u306b\u30ea\u30cd\u30fc\u30e0\u3057\u3001Looker API \u306e\u30af\u30ec\u30c7\u30f3\u30b7\u30e3\u30eb\u60c5\u5831\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002<!-- notionvc: 61098d60-c919-44b1-ae48-d5374e7becfa --><\/span><\/p>\r\n<div class=\"hcb_wrap\">\r\n<pre class=\"prism line-numbers lang-json\" data-lang=\"JSON\"><code>[mycompany]\r\nbase_url=\r\nclient_id=\r\nclient_secret=\r\nverify_ssl=true<\/code><\/pre>\r\n<\/div>\r\n<p><span style=\"font-family: arial, helvetica, sans-serif\"><span data-token-index=\"0\" class=\"notion-enable-hover\">4.cloudbuild.yaml<\/span> \u30d5\u30a1\u30a4\u30eb\u3092\u66f4\u65b0\u3057\u307e\u3059\u3002<!-- notionvc: 285a234c-8288-489b-846b-333471e81c8d --><\/span><\/p>\r\n<div class=\"hcb_wrap\">\r\n<pre class=\"prism line-numbers lang-json\" data-lang=\"JSON\"><code>steps:\r\n# Docker Build\r\n- name: 'gcr.io\/cloud-builders\/docker'\r\nargs: ['build', '-t',\r\n'-docker.pkg.dev\/\/dashboard-summarization-docker-repo\/websocketserviceimage',\r\n'.']\r\n\r\n# Docker Push\r\n- name: 'gcr.io\/cloud-builders\/docker'\r\nargs: ['push',\r\n'-docker.pkg.dev\/\/dashboard-summarization-docker-repo\/websocketserviceimage']\r\n\r\n# = Your deployment region\r\n# = Your GCP project ID<\/code><\/pre>\r\n<\/div>\r\n<p><span style=\"font-family: arial, helvetica, sans-serif\">5.Docker \u30d5\u30a1\u30a4\u30eb\u3092\u30d3\u30eb\u30c9\u3057\u3001Artifact Registry \u306b\u63d0\u51fa\u3057\u307e\u3059\u3002<span data-token-index=\"1\" class=\"notion-enable-hover\">REGION<\/span> \u5909\u6570\u3092\u30c7\u30d7\u30ed\u30a4\u30ea\u30fc\u30b8\u30e7\u30f3\u306b\u7f6e\u304d\u63db\u3048\u3066\u4ee5\u4e0b\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002<!-- notionvc: e4a77424-f801-4fbb-9e2e-3a5ca0c684dd --><\/span><\/p>\r\n<div class=\"hcb_wrap\">\r\n<pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code>gcloud auth login &amp;&amp; gcloud auth application-default login &amp;&amp; gcloud builds submit --region= --config cloudbuild.yaml\r\n\r\n#=Your deployment region<\/code><\/pre>\r\n<\/div>\r\n<p><span style=\"font-family: arial, helvetica, sans-serif\">6.\u3053\u306e\u6642\u70b9\u3067\u8fd4\u3055\u308c\u308b Docker \u30a4\u30e1\u30fc\u30b8 URL \u3092\u4fdd\u5b58\u3057\u307e\u3059\u3002\u307e\u305f\u306f\u3001Artifact Registry \u304b\u3089 Docker \u30a4\u30e1\u30fc\u30b8 URL \u3092\u53d6\u5f97\u3057\u307e\u3059\u3002<!-- notionvc: 203dd020-9cff-4c44-a8f1-63747db564da --><\/span><\/p>\r\n<p># \u4ee5\u4e0b\u306e\u3088\u3046\u306a\u5f62\u5f0f\u3067\u8fd4\u3055\u308c\u308b<\/p>\r\n<div class=\"hcb_wrap\">\r\n<pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code>-docker.pkg.dev\/\/dashboard-summarization-docker-repo\/websocketserviceimage:latest<\/code><\/pre>\r\n<\/div>\r\n<p><span style=\"font-family: arial, helvetica, sans-serif\">7.Terraform \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u79fb\u52d5\u3057\u307e\u3059\u3002<!-- notionvc: f0282ade-2819-495d-9edf-5cc134bcee44 --><\/span><\/p>\r\n<div class=\"hcb_wrap\">\r\n<pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code>cd .. &amp;&amp; cd terraform<\/code><\/pre>\r\n<\/div>\r\n<p><span style=\"font-family: arial, helvetica, sans-serif\"><span data-token-index=\"0\" class=\"notion-enable-hover\">8.variables.tf<\/span> \u30d5\u30a1\u30a4\u30eb\u5185\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3001\u30ea\u30fc\u30b8\u30e7\u30f3\u3001Docker URL\u3001\u30b5\u30fc\u30d3\u30b9\u540d\u3092\u66f4\u65b0\u3057\u307e\u3059\u3002<!-- notionvc: 4eb18282-49ae-4082-b051-02e363ff2f34 --><\/span><\/p>\r\n<div class=\"hcb_wrap\">\r\n<pre class=\"prism line-numbers lang-json\" data-lang=\"JSON\"><code># project_id=\r\n# deployment_region=\r\n# docker_image=\r\n\r\n\r\nvariable \"project_id\" {\r\ntype = string\r\ndefault = \"\" # \u3042\u306a\u305f\u306eGCP\u30d7\u30ed\u30b8\u30a7\u30af\u30c8ID\r\n}\r\n\r\nvariable \"deployment_region\" {\r\ntype = string\r\ndefault = \"asia-northeast1\" # \u3042\u306a\u305f\u306e\u30c7\u30d7\u30ed\u30a4\u5730\u57df\uff08\u4f8b: \u6771\u4eac\u30ea\u30fc\u30b8\u30e7\u30f3\uff09\r\n}\r\n\r\nvariable \"docker_image\" {\r\ntype = string\r\ndefault = \"asia-northeast1-docker.pkg.dev\/\/dashboard-summarization-docker-repo\/websocketserviceimage:latest\"\r\n# \u5148\u307b\u3069\u306eDocker\u30a4\u30e1\u30fc\u30b8URL\r\n}\r\n\r\nvariable \"cloud_run_service_name\" {\r\ntype = string\r\ndefault = \"websocket-service\" # \u30b5\u30fc\u30d3\u30b9\u540d\r\n}<\/code><\/pre>\r\n<\/div>\r\n<p><span style=\"font-family: arial, helvetica, sans-serif\">9.\u30ea\u30bd\u30fc\u30b9\u3092\u30c7\u30d7\u30ed\u30a4\u3057\u307e\u3059\u3002\u74b0\u5883\u306b Application Default Credentials \u3092\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3057\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002<!-- notionvc: ad3d10a6-3996-4fc3-9eb4-7b88fca130f4 --><\/span><\/p>\r\n<div class=\"hcb_wrap\">\r\n<pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code>terraform init\r\nterraform plan\r\nterraform apply<\/code><\/pre>\r\n<\/div>\r\n<p><span style=\"font-family: arial, helvetica, sans-serif\">20.\u30c7\u30d7\u30ed\u30a4\u3055\u308c\u305f Cloud Run URL \u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8\u3092\u4fdd\u5b58\u3057\u307e\u3059\u3002<\/span><\/p>\r\n<b><span style=\"font-family: arial, helvetica, sans-serif\">\u30aa\u30d7\u30b7\u30e7\u30f3: BigQuery \u3078\u306e\u30ed\u30b0\u8a18\u9332\u8a2d\u5b9a<\/span><\/b>\r\n<p><span style=\"font-family: arial, helvetica, sans-serif\">Vertex AI \u3078\u306e\u5404\u30ea\u30af\u30a8\u30b9\u30c8\u306f\u8acb\u6c42\u53ef\u80fd\u306a\u6587\u5b57\u6570\u3067\u8a18\u9332\u3055\u308c\u3001\u30b3\u30b9\u30c8\u306e\u76e3\u8996\u3084\u898b\u7a4d\u3082\u308a\u306b\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002Google Cloud \u306e\u30ed\u30b0\u30b7\u30f3\u30af\u3092\u8a2d\u5b9a\u3057\u3001\u4ee5\u4e0b\u306e\u30d5\u30a3\u30eb<\/span>\u30bf\u30fc\u3092\u4f7f\u7528\u3057\u3066 BigQuery \u306b\u30ed\u30b0\u3092\u4fdd\u5b58\u3057\u307e\u3059\u3002<\/p>\r\n<div class=\"hcb_wrap\">\r\n<pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code>resource.type = \"cloud_run_revision\"\r\nresource.labels.service_name = \"websocket-service\"\r\nresource.labels.location = \"us-central1\"\r\nseverity&gt;=DEFAULT\r\njsonPayload.component=\"dashboard-summarization-logs\"<\/code><\/pre>\r\n<\/div>\r\n<p><!-- notionvc: 81ca7f61-a832-4982-a7f3-8cd17d6f7cdf --><\/p>\r\n<p><!-- notionvc: 320b6744-47a4-4bd5-8095-ad51a930b402 --><\/p>\r\n<p><!-- notionvc: 9cad5a7a-b834-4ad4-90a3-1031e3062691 --><\/p>\n\n<h2>3. Looker Extension Framework \u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7<\/h2>\n<b><span style=\"font-family: arial, helvetica, sans-serif\">\u30ed\u30fc\u30ab\u30eb\u958b\u767a\u74b0\u5883\u306e\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7<\/span><\/b>\r\n<p><span style=\"font-family: arial, helvetica, sans-serif\">1.\u30eb\u30fc\u30c8\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u79fb\u52d5\u3057\u307e\u3059\u3002<\/span><\/p>\r\n<div class=\"hcb_wrap\">\r\n<pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code>cd ..\/..<\/code><\/pre>\r\n<\/div>\r\n<p><span style=\"font-family: arial, helvetica, sans-serif\">2.\u30d5\u30a1\u30a4\u30eb\u3092\u30b3\u30d4\u30fc\u3057\u3066\u4fdd\u5b58\u3057\u3001\u9069\u5207\u306a\u74b0\u5883\u5909\u6570\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002<span data-token-index=\"3\" class=\"notion-enable-hover\">WEBSOCKET_SERVICE<\/span> \u306b\u306f Cloud Run \u306e\u30a8\u30f3\u30c9\u30dd\u30a4\u30f3\u30c8 URL \u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002<!-- notionvc: 6d1ebeed-2cae-41da-b84c-362a1c8314dd --><\/span><\/p>\r\n<div class=\"hcb_wrap\">\r\n<pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code>SLACK_CLIENT_ID=\r\nSLACK_CLIENT_SECRET=\r\nCHANNEL_ID=\r\nSPACE_ID=\r\nWEBSOCKET_SERVICE=<\/code><\/pre>\r\n<\/div>\r\n<p><span style=\"font-family: arial, helvetica, sans-serif\">3.\u4f9d\u5b58\u95a2\u4fc2\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002<!-- notionvc: d7c70f8d-bd6d-4da4-a630-9313c8629138 --><\/span><\/p>\r\n<div class=\"hcb_wrap\">\r\n<pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code>npm install --legacy-peer-deps<\/code><\/pre>\r\n<\/div>\r\n<p><span style=\"font-family: arial, helvetica, sans-serif\">4.\u958b\u767a\u30b5\u30fc\u30d0\u30fc\u3092\u8d77\u52d5\u3057\u307e\u3059\u3002<!-- notionvc: e57c96e1-a9dc-4682-afc0-e2c19e6c6e58 --><\/span><\/p>\r\n<div class=\"hcb_wrap\">\r\n<pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code>npm run build<\/code><\/pre>\r\n<\/div>\r\n<p><span style=\"font-family: arial, helvetica, sans-serif\"><code>bundle.js<\/code> \u304c\u4f5c\u6210\u3055\u308c\u307e\u3059\u3002<\/span><\/p>\r\n<p><span style=\"font-family: arial, helvetica, sans-serif\">5.Looker \u306b\u30ed\u30b0\u30a4\u30f3\u3057\u3001\u65b0\u3057\u3044 LookML \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002<code>Develop =&gt; Manage LookML Projects =&gt; New LookML Project<\/code> \u3092\u9078\u629e\u3057\u3001<code>Blank Project<\/code> \u3092\u9078\u3073\u307e\u3059\u3002<\/span><\/p>\r\n<p><span style=\"font-family: arial, helvetica, sans-serif\">6.<span style=\"color: #0000ff\"><strong><a href=\"https:\/\/github.com\/looker-open-source\/dashboard-summarization\/blob\/main\/manifest.lkml\" style=\"color: #0000ff\"><code>manifest.lkml<\/code><\/a><\/strong><\/span> \u30d5\u30a1\u30a4\u30eb\u3092 Looker \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u30c9\u30e9\u30c3\u30b0\uff06\u30c9\u30ed\u30c3\u30d7\u3057\u307e\u3059\u3002\u5fc5\u8981\u306b\u5fdc\u3058\u3066 ID \u3084\u30e9\u30d9\u30eb\u3092\u5909\u66f4\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/span><\/p>\r\n<p><img decoding=\"async\" src=\"https:\/\/since2020.jp\/media\/wp-content\/uploads\/2024\/10\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2024-10-07-17.50.52.png\" alt=\"\" width=\"2174\" height=\"596\" class=\"alignnone size-full wp-image-5649\" srcset=\"https:\/\/since2020.jp\/media\/wp-content\/uploads\/2024\/10\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2024-10-07-17.50.52.png 2174w, https:\/\/since2020.jp\/media\/wp-content\/uploads\/2024\/10\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2024-10-07-17.50.52-300x82.png 300w, https:\/\/since2020.jp\/media\/wp-content\/uploads\/2024\/10\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2024-10-07-17.50.52-1024x281.png 1024w, https:\/\/since2020.jp\/media\/wp-content\/uploads\/2024\/10\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2024-10-07-17.50.52-768x211.png 768w, https:\/\/since2020.jp\/media\/wp-content\/uploads\/2024\/10\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2024-10-07-17.50.52-1536x421.png 1536w, https:\/\/since2020.jp\/media\/wp-content\/uploads\/2024\/10\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2024-10-07-17.50.52-2048x561.png 2048w\" sizes=\"(max-width: 2174px) 100vw, 2174px\" \/><\/p>\r\n<p><!-- notionvc: 6940b13f-2b60-4bc3-a8cb-1414f8576e4d --><\/p>\r\n<p><!-- notionvc: 8a5ce313-0f1a-4f68-bfd4-666b4242589c --><\/p>\n\n<h2>4. \u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u306e\u30c7\u30d7\u30ed\u30a4\u624b\u9806<\/h2>\n<p><span style=\"font-family: arial, helvetica, sans-serif\">\u30ed\u30fc\u30ab\u30eb\u30b5\u30fc\u30d0\u30fc\u3092\u8d77\u52d5\u3057\u3066\u30b3\u30fc\u30c9\u3092\u30ed\u30fc\u30c9\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u30c7\u30d7\u30ed\u30a4\u30e1\u30f3\u30c8\u306e\u969b\u3001\u6b21\u306e\u624b\u9806\u3067\u30d7\u30ed\u30c0\u30af\u30b7\u30e7\u30f3\u30d3\u30eb\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002<\/span><\/p>\r\n<p><span style=\"font-family: arial, helvetica, sans-serif\">1.\u30d7\u30ed\u30c0\u30af\u30b7\u30e7\u30f3\u30d3\u30eb\u30c9\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002<\/span><\/p>\r\n<div class=\"hcb_wrap\">\r\n<pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code>npm run build<\/code><\/pre>\r\n<\/div>\r\n<p><span style=\"font-family: arial, helvetica, sans-serif\">2.<code>dist<\/code> \u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u751f\u6210\u3055\u308c\u305f <code>bundle.js<\/code> \u30d5\u30a1\u30a4\u30eb\u3092 Looker \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u30c9\u30e9\u30c3\u30b0\uff06\u30c9\u30ed\u30c3\u30d7\u3057\u307e\u3059\u3002<code>manifest.lkml<\/code> \u30d5\u30a1\u30a4\u30eb\u3092\u66f4\u65b0\u3057\u3001<code>url<\/code> \u306e\u4ee3\u308f\u308a\u306b <code>file<\/code> \u3092\u6307\u5b9a\u3057\u307e\u3059\u3002<\/span><\/p>\r\n<p>&nbsp;<\/p>\r\n<p><span style=\"font-family: arial, helvetica, sans-serif\">3.\u30c7\u30d7\u30ed\u30a4\u5f8c\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u753b\u9762\u304b\u3089\u62e1\u5f35\u6a5f\u80fd\u3092\u9078\u629e\u3057\u3066\u3001\u5b9f\u969b\u306e\u30b5\u30de\u30e9\u30a4\u30ba\u3092\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002<\/span><\/p>\r\n<p><img decoding=\"async\" src=\"https:\/\/since2020.jp\/media\/wp-content\/uploads\/2024\/10\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2024-10-07-17.54.14.jpg\" alt=\"\" width=\"1542\" height=\"1450\" class=\"alignnone size-full wp-image-5650\" srcset=\"https:\/\/since2020.jp\/media\/wp-content\/uploads\/2024\/10\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2024-10-07-17.54.14.jpg 1542w, https:\/\/since2020.jp\/media\/wp-content\/uploads\/2024\/10\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2024-10-07-17.54.14-300x282.jpg 300w, https:\/\/since2020.jp\/media\/wp-content\/uploads\/2024\/10\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2024-10-07-17.54.14-1024x963.jpg 1024w, https:\/\/since2020.jp\/media\/wp-content\/uploads\/2024\/10\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2024-10-07-17.54.14-768x722.jpg 768w, https:\/\/since2020.jp\/media\/wp-content\/uploads\/2024\/10\/\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8-2024-10-07-17.54.14-1536x1444.jpg 1536w\" sizes=\"(max-width: 1542px) 100vw, 1542px\" \/><\/p>\r\n<p><!-- notionvc: 383e0f68-a411-43d6-93e0-1e0377a949d5 --><\/p>\r\n<p><!-- notionvc: 60b2c999-a6be-4576-aa77-b15946d2e84e --><\/p>\n\n<h2>\u307e\u3068\u3081<\/h2>\n<p><span style=\"font-family: arial, helvetica, sans-serif\">Looker \u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u30b5\u30de\u30ea\u5316\u62e1\u5f35\u6a5f\u80fd\u306f\u3001\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u306e\u30c7\u30fc\u30bf\u30b5\u30de\u30ea\u3092\u63d0\u4f9b\u3057\u3001\u30c7\u30fc\u30bf\u306b\u57fa\u3065\u304f\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u30d3\u30b8\u30cd\u30b9\u30c4\u30fc\u30eb\u306b\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3059\u308b\u5f37\u529b\u306a\u30c4\u30fc\u30eb\u3067\u3059\u3002\u3053\u306e\u8a18\u4e8b\u306b\u5f93\u3063\u3066\u3001\u74b0\u5883\u3092\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u3057\u3001\u30c7\u30d7\u30ed\u30a4\u624b\u9806\u3092\u5b9f\u884c\u3059\u308b\u3053\u3068\u3067\u3001\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u3067\u306e\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u30c7\u30fc\u30bf\u306e\u6d3b\u7528\u3092\u958b\u59cb\u3067\u304d\u307e\u3059\u3002<\/span><!-- notionvc: 485987e1-bfdb-4e52-814c-e258d73bde30 --><\/p>","protected":false},"excerpt":{"rendered":"<p>Looker \u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u30b5\u30de\u30ea\u5316\u62e1\u5f35\u6a5f\u80fd\u306f\u3001Vertex AI \u3067\u30db\u30b9\u30c8\u3055\u308c\u308b\u5927\u898f\u6a21\u8a00\u8a9e\u30e2\u30c7\u30eb (LLM) \u3092\u6d3b\u7528\u3057\u3001Looker \u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\u306e\u30c7\u30fc\u30bf\u3092\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u3067\u8981\u7d04\u3059\u308b\u62e1\u5f35\u6a5f\u80fd\u3067\u3059\u3002\u3053\u306e\u6a5f\u80fd\u306f WebSoc [&hellip;]<\/p>\n","protected":false},"author":87,"featured_media":5648,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"content-type":"","swell_btn_cv_data":"","footnotes":"","_wp_rev_ctl_limit":""},"categories":[1249],"tags":[],"class_list":["post-5576","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-knowledge"],"_links":{"self":[{"href":"https:\/\/since2020.jp\/media\/wp-json\/wp\/v2\/posts\/5576","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/since2020.jp\/media\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/since2020.jp\/media\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/since2020.jp\/media\/wp-json\/wp\/v2\/users\/87"}],"replies":[{"embeddable":true,"href":"https:\/\/since2020.jp\/media\/wp-json\/wp\/v2\/comments?post=5576"}],"version-history":[{"count":0,"href":"https:\/\/since2020.jp\/media\/wp-json\/wp\/v2\/posts\/5576\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/since2020.jp\/media\/wp-json\/wp\/v2\/media\/5648"}],"wp:attachment":[{"href":"https:\/\/since2020.jp\/media\/wp-json\/wp\/v2\/media?parent=5576"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/since2020.jp\/media\/wp-json\/wp\/v2\/categories?post=5576"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/since2020.jp\/media\/wp-json\/wp\/v2\/tags?post=5576"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}