Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
コーディングエージェントに 独自Extension書かせてみた
Search
ikeda-masashi
December 17, 2025
Technology
0
29
コーディングエージェントに 独自Extension書かせてみた
Jagu'e'r データ利活用分科会 Looker User Meetup Part 5
ikeda-masashi
December 17, 2025
Tweet
Share
More Decks by ikeda-masashi
See All by ikeda-masashi
Redshiftを中心としたAWSでのデータ基盤
mashiike
0
280
運用の役立たないダッシュボードの作り方。
mashiike
3
1.2k
Amazon Aurora MySQL と Amazon Redshift の Zero-ETL Integration について使い所を考えてみた!
mashiike
0
960
Warningアラートを放置しない!アラート駆動でログやメトリックを自動収集する仕組みによる恩恵
mashiike
6
4.4k
Prepalert ~Mackerelアラートにログや集計値を貼り付けてくれるトイル削減ツール~
mashiike
0
2k
人狼ゲームで考えるデータ基盤 〜データとはいったい・・・〜
mashiike
0
410
『エンタープライズ』という言葉の重さ 〜Data Vault 2.0をやめた2022年冬〜
mashiike
2
5.6k
Redshift ServerlessとProvisioned Cluster のちょっとした違い
mashiike
0
6.8k
「北欧、暮らしの道具店」のデータ基盤の変遷
mashiike
1
3.6k
Other Decks in Technology
See All in Technology
Python 3.14 Overview
lycorptech_jp
PRO
1
120
EM歴1年10ヶ月のぼくがぶち当たった苦悩とこれからへ向けて
maaaato
0
280
コンテキスト情報を活用し個社最適化されたAI Agentを実現する4つのポイント
kworkdev
PRO
1
1.5k
AI 駆動開発勉強会 フロントエンド支部 #1 w/あずもば
1ftseabass
PRO
0
400
mairuでつくるクレデンシャルレス開発環境 / Credential-less development environment using Mailru
mirakui
5
540
Snowflakeでデータ基盤を もう一度作り直すなら / rebuilding-data-platform-with-snowflake
pei0804
6
1.6k
AWS CLIの新しい認証情報設定方法aws loginコマンドの実態
wkm2
6
750
Lambdaの常識はどう変わる?!re:Invent 2025 before after
iwatatomoya
1
620
ウェルネス SaaS × AI、1,000万ユーザーを支える 業界特化 AI プロダクト開発への道のり
hacomono
PRO
0
120
コミューンのデータ分析AIエージェント「Community Sage」の紹介
fufufukakaka
0
510
業務のトイルをバスターせよ 〜AI時代の生存戦略〜
staka121
PRO
2
210
品質のための共通認識
kakehashi
PRO
3
270
Featured
See All Featured
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.1k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.2k
Code Review Best Practice
trishagee
74
19k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.6k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Designing for Performance
lara
610
69k
Building Flexible Design Systems
yeseniaperezcruz
330
39k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
1k
Unsuck your backbone
ammeep
671
58k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Facilitating Awesome Meetings
lara
57
6.7k
Transcript
コーディングエージェントに 独⾃Extension書かせてみた 〜僕にも出来るLooker Extension開発〜 2025/12/17 Looker User Meetup ⾯⽩法⼈カヤック 池⽥将⼠
先に、会社紹介 鎌倉の地にて、主にWeb技術を 用いて 人の印象に深く残るような面白コ ンテンツを作る会社 ゲームからWebサービス、ミュージアムetc… 様々なことに挑戦
弊社の特徴
弊社の特徴
弊社の特徴 サービス‧事業のライフサイクルが短い サービス‧事業の数が多い サービス‧事業の幅が広い データ整備、混ぜるな危険
@mashiike 2016年12月にカヤックにJoin - サーバーサイドエンジニア - データエンジニア 2019年 2022年 2025年 ⾃⼰紹介
@mashiike - サーバーサイドエンジニア - データエンジニア 面白法人カヤックと『北欧、暮らしの道具店』を運営する株式 会社クラシコム様との協業プロジェクト開始 ここでLookerを初めて触る https://www.kayac.com/news/2022/09/interview_kurashicom 2019年
2022年 2025年 実は、Looker歴 6年くらい 協業先でずっと触っていた。 今年になって やっと所属会社でLooker導入 ⾃⼰紹介 https://hokuohkurashi.com/ 株式会社クラシコム様 といっしょにお仕事する中で Lookerの良さを体感
@mashiike - サーバーサイドエンジニア - データエンジニア 面白法人カヤックと『北欧、暮らしの道具店』を運営する株式 会社クラシコム様との協業プロジェクト開始 ここでLookerを初めて触る https://www.kayac.com/news/2022/09/interview_kurashicom 2019年
2022年 引き続き、株式会社クラシコム様でLookerを触わって良さ を体感する。 この頃から、カヤック本体で『Lookerいいぞぉー布教活動 を始める』 カヤックの特性上の問題で予算感が合わなくて 導入できない問題 2025年 実は、Looker歴 6年くらい 協業先でずっと触っていた。 今年になって やっと所属会社でLooker導入 ⾃⼰紹介 https://www.kayac.com/ 事業多すぎ!!! やってること バラバラ過ぎ! 事業部の予算がry
@mashiike - サーバーサイドエンジニア - データエンジニア 面白法人カヤックと『北欧、暮らしの道具店』を運営する株式 会社クラシコム様との協業プロジェクト開始 ここでLookerを初めて触る https://www.kayac.com/news/2022/09/interview_kurashicom 2019年
2022年 引き続き、株式会社クラシコム様でLookerを触わって良さ を体感する。 この頃から、カヤック本体で『Lookerいいぞぉー布教活動 を始める』 カヤックの特性上の問題で予算感が合わなくて 導入できない問題 2025年 ゲーム事業の方にアプローチして、『Looker入れてみよう か!』となる。 (今ココ) カヤックの本体でやっと Lookerが入る 所属会社に Lookerに入ったので本会への参加券 Get! 実は、Looker歴 6年くらい 協業先でずっと触っていた。 今年になって やっと所属会社でLooker導入 ⾃⼰紹介 https://www.kayac.com/ir/news 2025年12月期 第3四半期 決算説明会資料 より参照 ハイカジ調子いいね! ハイカジになら Looker入れても・・・
@mashiike 2016年12月にカヤックにJoin - サーバーサイドエンジニア - データエンジニア 面白法人カヤックと『北欧、暮らしの道具店』を運営する株式 会社クラシコム様との協業プロジェクト開始 ここでLookerを初めて触る https://www.kayac.com/news/2022/09/interview_kurashicom
2019年 2022年 引き続き、株式会社クラシコム様でLookerを触わって良さ を体感する。 この頃から、カヤック本体で『Lookerいいぞぉー布教活動 を始める』 カヤックの特性上の問題で予算感が合わなくて 導入できない問題 2025年 ゲーム事業の方にアプローチして、『Looker入れてみよう か!』となる。 (今ココ) カヤックの本体でやっと Lookerが入る 所属会社に Lookerに入ったので本会への参加券 Get! 実は、Looker歴 6年くらい 協業先でずっと触っていた。 今年になって やっと所属会社で Looker導入 ⾃⼰紹介
さて、そんな僕ですが‧‧‧ 所属会社で今年に Lookerが⼊ったので Extension開発にチャレンジ!
Looker Extension開発の敷居の⾼さ LookMLはわかるけど、 TypeScript+React.jsはわからない! 高い壁がある
そうだ! Coding Agentに書いてもらおう コレで簡単に作れる!!!
そう思っていた時期が 僕にもありました…
最⼤の落とし⽳は‧‧‧ の上で動くということ
Coding Agent( ) 普通のWeb AppのReact.jsは スイスイ書けるが‧‧‧
Extension としては その書き⽅、動かない!が多い
例えば‧‧‧ import React from 'react' import { ExtensionProvider40 } from
'@looker/extension-sdk-react' export const App: React.FC = () => ( <ExtensionProvider40> <a href="https://www.google.com" target="_blank" rel="noopener noreferrer"> Googleへ </a> </ExtensionProvider40> ) こんな単純なコードで、 単純なリンクが置いてあるだけのExtensionでも‧‧‧
例えば‧‧‧ 開けなぁああああい!!! ※見る人がみると一発で原因がわかるらしいです。
例えば‧‧‧ Errorメッセージ⾒ればわかりそうですが聞いてみます。
例えば‧‧‧ Gemini君は、Buttonに変えましょう!!!と提案します。
例えば‧‧‧ buildして再度表⽰しようとすると‧‧‧ 表⽰できなあぁぁぁあああい!
例えば‧‧‧ そして、会話すること 12回⽬…
例えば‧‧‧ import React, { useContext } from 'react' import {
ExtensionProvider40, ExtensionContext40 } from '@looker/extension-sdk-react' import { ComponentsProvider, Button } from '@looker/components' const AppContext: React.FC = () => { const { extensionSDK } = useContext(ExtensionContext40) return ( <ComponentsProvider> <Button onClick={() => { extensionSDK.openBrowserWindow('https://www.google.com', '_blank') }} > Googleへ </Button> </ComponentsProvider> ) }; export const App: React.FC = () => { return ( <ExtensionProvider40> <AppContext /> </ExtensionProvider40> ) }
例えば‧‧‧ 開けた!!! 🎉
例えば‧‧‧リンクが⼤変 なんで?? 苦戦しすぎじゃないっすか?
Looker Extensionはiframeの中 https://docs.cloud.google.com/looker/docs/extension-framework-react-and-js-code-examples?hl=ja
GEMINI.mdにはこう書きます。 # Looker Extension 開発 このアプリケーションはLooker Extension Frameworkを使って書かれるアプリケーションです。 Looker Extensionはサンドボックス化されたiframeの中で動くアプリケーションであるため、普通の
Web アプリケーションのReact.jsとは趣が異なります。 普通のWebアプリケーションの常識を疑い、参考リンクをよく調べてから、コーディングに臨んで ください。 ## 参考リンク - https://docs.cloud.google.com/looker/docs/intro-to-extension-framework?hl=ja 拡張機能の概要 - https://docs.cloud.google.com/looker/docs/extension-framework-react-and-js-code-examples?hl=ja コード例
これで、多少はマシになります。
だが、しかし、そもそも 彼ら( )は ドキュメントを調べるのが 上⼿ではない…。
そこで‧‧‧
「NotebookLM + DeepResearch」の併⽤ 餅は餅屋! 調べ物はDeepResearch
None
例: React Router 例えば、StandaloneのExtensionでページを作ろうとして、リンク押してもうまく動かん! import React, { useContext, useEffect, useState
} from 'react' import { BrowserRouter, Routes, Route, Link } from 'react-router-dom' /* ... */ export const AppContent: React.FC = () => { const { extensionSDK } = useContext(ExtensionContext40) /* ... */ return ( <ComponentsProvider theme={theme}> <BrowserRouter> <!-- ... --> <Box flex={1} p="u3" overflow="auto"> <Routes> <Route exact path="/" component={DashboardCapturePage} /> <Route exact path="/canvases" component={CanvasListPage} /> <Route exact path="/canvases/:canvasId" component={CanvasPage} /> <Route component={NotFoundPage} /> </Routes> </Box> </Box> </BrowserRouter> </ComponentsProvider> ) } こんなコードを書きがちだけど…
例: React Router DeepResearchで調べてみると、なんか⾊々と書かれているなぁ… 公式リンクがあるから眺めてみるとBrowserRouter使うなって書いてる!!!!!? https://docs.cloud.google.com/looker/docs/extension-framework-react-an d-js-code-examples?hl=ja#routing_and_deep_linking
例: React Router DeepResearchの結果をCodingAgentに与えると… こういうふうに書き換える import React, { useContext, useEffect,
useState } from 'react' import { BrowserRouter, Routes, Route, Link } from 'react-router-dom' /* ... */ export const AppContent: React.FC = () => { const { extensionSDK } = useContext(ExtensionContext40) /* ... */ return ( <ComponentsProvider theme={theme}> <BrowserRouter> <!-- ... --> <Box flex={1} p="u3" overflow="auto"> <Routes> <Route exact path="/" component={DashboardCapturePage} /> <Route exact path="/canvases" component={CanvasListPage} /> <Route exact path="/canvases/:canvasId" component={CanvasPage} /> <Route component={NotFoundPage} /> </Routes> </Box> </Box> </BrowserRouter> </ComponentsProvider> ) } CodingAgentもWeb検索ツール使うけど、大量の情報から正しい情報を探し出すのは やはりDeepResearchのほうが強かった。 import React, { useContext, useEffect, useState } from 'react' import { Switch, Route, Link } from 'react-router-dom' /* ... */ export const AppContent: React.FC = () => { const { extensionSDK } = useContext(ExtensionContext40) /* ... */ return ( <ComponentsProvider theme={theme}> <!-- ... --> <Box flex={1} p="u3" overflow="auto"> <Switch> <Route exact path="/" component={DashboardCapturePage} /> <Route exact path="/canvases" component={CanvasListPage} /> <Route exact path="/canvases/:canvasId" component={CanvasPage} /> <Route component={NotFoundPage} /> </Switch> </Box> </Box> </ComponentsProvider> ) }
こうして、 コーディングエージェントに 書かせたものが こちらになります。。。
デモ
デモ ダッシュボードのキャプチャーを撮って その上からお絵かきできるExtension
まとめ コーディングエージェントにLooker Extensionを書い てもらうには⼯夫が必要 DeepResearchとNotebookLMを⽤いてドキュメント を調べて、それをコーディングエージェントに伝える とうまくいきやすい Looker Extensionはサンドボックス化されたiframe内 で動くんだぞ!と意識させるとうまくいきやすい