🐒

できるだけ横着して研究発表にいい感じに質問してくれるツールを作ってみる

に公開

https://youtu.be/BNLeGy_-xas?t=100

し、しんど…。

要約

  • Meet専用のChrome拡張。インフラゼロ、バックエンドなし、3ファイルで完結
  • 字幕だけ拾ってOpenAIに投げ、いい感じの質問を1行で返す。
  • 設定はAPIキー入力のみ。あとは放置で勝手に聞いてくれる。
  • 公開するのも横着したいのでソースは想像で補ってください。

背景

「研究発表で質問する」は集中力を持っていかれる。真面目な議事録や要約ツールは世にあるので、もっと雑に「場を動かすだけの質問役」を作りたかった。インフラを立てず、Meetだけに特化し、最低限の実装でどこまでやれるかを試した。

横着ポイント(構成篇)

  • Meetだけ対応: 他サービスは無視。DOMもaria-labelでゴリ押し。
  • 拡張だけで完結: サーバー・DB・キューなし。chrome.storageにAPIキーを置くだけ。
  • ファイルはほぼ3つ: content.jspopup.html/jsmanifest.json のみ。
  • 設定項目ほぼゼロ: 諸設定はいい感じの値をハードコード。UIはAPIキー入力とボタン1個。

横着ポイント(中身もシンプル)

  • 字幕オンリー: 画面キャプチャ・音声処理なし。MeetのCC出力(div[role="region"][aria-label*="字幕"])を取るだけ。
  • 全文再取得: DOM監視+差分処理などもってのほか。数秒おきに全文置き換え。
  • 質問は常に1問: 80文字以内。特になければAIに「PASS」と言わせてスキップ。
  • 一定サイクルで質問: 指定時間ごとに質問生成。タイミングとか考えない。
  • 送信も力技: textarea に突っ込んで input イベント、送信ボタン or Enter。

仕組みざっくり

字幕DOM監視 → 全文テキスト化 → 質問履歴と合わせてプロンプト生成 → OpenAIに投げる → Chat欄に送信
  • モデルは gpt-5-mini-2025-08-07 を指定(content.jsのBOT_CONFIG.MODEL)。好みで変更可
  • SYSTEM_PROMPT に「発表の流れを意識しつつ、80字以内で1問。被ったらPASS」という縛りをベタ書き
  • 質問履歴を配列で持って重複防止。AUTO実行後はバッファを空にして次に備える

プロンプトの一部

- 生成が難しい/不要/重複の場合は「PASS」とだけ出力
- 手動実行時はPASS禁止
- 挨拶や前置きは禁止

使い方

Chromeで chrome://extensions → デベロッパーモードON → 「パッケージ化されていない拡張機能を読み込む」

ちょっとだけ中身

  • content.js: DOM監視・プロンプト生成・投稿まで全部ここ。400行くらい。
  • popup.html/js: APIキー保存だけの最小UI
  • manifest.json: MV3。storage 権限と Meet のホスト許可のみ
  • これで終わり。追加のビルド、CLI、サーバー設定なし
  • Geminiと壁打ちして構成決めて、あとはcodexに書いてもらった。

やらないこと & ハマりどころ

  • 要約・議事録はやらない: 質問だけ。議事録は別ツールへ
  • 他プラットフォーム非対応: Meet専用。Slack/Zoomは見なかったことにする
  • 字幕DOMが揮発する: MutationObserverでコンテナ出現を待ち、見失ったら再監視
  • 送信ボタンが押せない: aria-labeliタグのsend両方を探す。ダメならEnterで送信
  • テキストが少ないと微妙な質問が出る: AUTO時は50文字以下ならスキップ

さいごに

質問はほどほどがいい。

手前味噌

Ryosuke Kohita. 2025. Exploring Database Normalization Effects on SQL Generation. In Proceedings of the 34th ACM International Conference on Information and Knowledge Management (CIKM '25). Association for Computing Machinery, New York, NY, USA, 5788–5796. https://doi.org/10.1145/3746252.3761583

Discussion