Gemini 1-Click Export to Docs
Geminiのウェブアプリケーション(SPA)において、会話の特定のターンまたはキャンバスをGoogle Docsにエクスポートする操作を簡略化するユーザースクリプトです。
最新バージョン: v0.4.47
最終更新日: 2026-03-30
最終更新日: 2026-03-30
依存設定(前提スクリプト): このスクリプトの全機能を利用するには、以下の3つのスクリプトもインストールして有効にしてください。
Latest: 確認中... | Installed: 未インストール
Latest: 確認中... | Installed: 未インストール
Latest: 確認中... | Installed: 未インストール
目的
標準機能では複数回のクリック(メニュー展開など)が必要ですが、これを「1クリック」または「キーボードショートカット」で実行できる機能を追加します。
本ユーザースクリプトはTampermonkeyでの利用を想定し、ファイル名は gemini-export-to-docs.user.js とします。
経緯
以前作成したスクリプトの課題(DOM要素検出の不安定さ、イベントトリガーの信頼性)を解消するため、ゼロベースで再設計・実装を行う。
ユーザースクリプト情報
- Match URL:
https://gemini.google.com/*(スクリプト内部でURLを監視し、チャットページでのみ動的に有効化されます。現在、/app/および/gem/のパス形式に対応しています。)
技術仕様
1. セレクタ戦略
Geminiは動的なSPAであるため、以下の優先順位で要素を特定する。
- data-test-id属性: Googleがテスト用に付与している不変性の高い属性(例:
data-test-id="more-menu-button")。 - アイコンフォント: ボタンを特定できない場合、
mat-iconの名前(docsなど)を補助的に使用する。 - DOM構造: 親要素(
response-container)からの相対位置など。
2. 自動化ロジックフロー
ターンエクスポート
- トリガー: スクリプトが「︙」ボタン(
more-menu-button)をクリック。 - メニュー待機: メニューパネルが表示されるのを待機(
waitForElement)。 - エクスポート実行:
- PC版: メニュー内の「Export to Docs」ボタンを即座にクリック。
- モバイル版: 「Export to...」ボタンをクリック → サブメニュー待機 → 「Export to Docs」をクリック。
キャンバスエクスポート
- オープン: キャンバスが閉じていれば開く。
- 共有: キャンバス内の「共有(Share)」ボタンをクリック。
- エクスポート: 共有メニュー内の「Export to Docs」をクリック。
3. 機能要件
A. 1クリックボタン(UI注入)
- 配置:
- 各レスポンスの下部(フッター)にある「︙」メニューボタンの隣。
- 各レスポンスの上部(ヘッダー)にあるコントロールエリア。
- キャンバスの「Open」チップの隣。
- 状態同期: 同一レスポンスに対して複数のボタンがある場合、一つがクリックされると全てが「完了状態(緑色チェック)」に同期される。
B. キーボードショートカット (Ctrl + E)
- 機能: ページ内で 最初に見つかった 会話のレスポンス(通常は最初のターン)を対象にエクスポートを実行する。
- 動作条件: テキスト入力エリア(
input,textarea,contenteditable)にフォーカスがない場合のみ発火する。 - フィードバック: 通常のボタンクリックと同様、処理中はオーバーレイを表示し、完了後に成功ステータスへ更新する。
C. 1ターン専用オートエクスポート&削除
- 機能: 会話が1ターン(プロンプト1回、回答1回)のみの場合に、画面右下に専用のパネルを表示します。
- 自動削除連動: 「Export & Delete」ボタンをクリックすると、Google
Docsへのエクスポートが実行され、その後指定した秒数が経過すると、
gemini-one-click-deleteと連携して会話を自動的に削除します。 - 待機時間の調整: 削除までの待機時間(秒)はパネル上で自由に変更可能(デフォルト3秒、ブラウザに保存)です。
- 画像一括コピー機能: パネルに「📋 Copy Images」ボタンを追加。クリックすると
gemini-turn-counterスクリプトと連携し、会話内の全画像をクリップボードにコピーします。(※要gemini-turn-counterv0.4.27 以降) - フローティング・ドラッグ移動: パネル上部のヘッダー(⠿)をドラッグすることで、画面内の好きな位置に移動できます。位置は自動的に保存され、次回ロード時にも維持されます。
- 自動消滅: 会話が2ターン以上に増えた場合や、他のページに移動した場合は、自動的にこのパネルは消去されます。
4. SPA(シングルページアプリケーション)対応とパフォーマンス
- GeminiはSPAであるため、ページ遷移を検知してスクリプトの機能を動的に制御します。
- 有効化: チャットページ (
/app/...または/gem/...) に遷移した際に、エクスポートボタンやショートカット機能が自動的に有効になります。 - 無効化(クリーンアップ): チャットページから他のページ(ホームページなど)に移動すると、追加したボタンや機能はすべて削除され、リソースを解放します。
- これにより、スクリプトが必要な場面でのみ動作し、サイト全体のパフォーマンスへの影響を最小限に抑えます。
5. セキュリティと安定性(Reliability)
- Trusted Types対応:
innerHTMLの使用を禁止し、document.createElementNS等でDOMを構築する。 - Trusted Click:
MouseEventのviewプロパティをnullに設定することで、ブラウザのセキュリティ制約によるTypeErrorを回避する。 - Wait処理: 非同期DOM更新に対応するため、単純な
querySelectorではなく、タイムアウト付きのリトライ待機ロジックを実装する。
UI仕様
- ボタンデザイン:
- 初期状態: 薄い緑色の背景 (
#e6f4ea) にDocsアイコン。 - 処理中: 全画面オーバーレイとスピナーを表示。
- 完了状態: 濃い緑色 (
#1e8e3e) に変化し、アイコンがチェックマークになる。
- 初期状態: 薄い緑色の背景 (
更新履歴
- v0.4.57: 最小化表示のスタイルとクラス名を共通化(gemini-common.css/jsを活用)
- v0.4.56: フローティングUIが画面外にはみ出した場合に画面内に強制移動する機能を共通ライブラリ(gemini-common.js)に追加。
- v0.4.55: バージョン表記のバッジをマウスオーバーで拡大表示するように変更。
- v0.4.54: 共通ライブラリのバグ修正により、UIが移動できない問題を修正
- v0.4.51: 汎用ユーティリティ関数(sleepやwaitForElementなど)をgemini-common.jsにオフロードし、コードを共通化しました。
- v0.4.43: エクスポートボタンのHTML構造を
template.htmlにオフロードし、インラインスタイルをCSSクラスに移行するリファクタリングを実施しました。 - v0.4.42: 最小化表示(Inactive)時に「Export to Docs」の文字表示を削除し、バージョン番号の前にアイコン(📄)を追加しました。
- v0.4.41: gemini.google.com 全体で動作するように変更
- v0.4.40: ターンに挿入される各エクスポートボタンの背景色もライトピンクに統一し、エクスポート完了後のステータスカラーをピンク系に変更しました。
- v0.4.38: アクティブ状態のパネル背景色をライトピンクの透過背景に変更し、削除時のステータスポップアップを削除、Auto(URL)の表記をAuto-Exportに変更しました。
- v0.4.37: 最小化表示(Inactive)時に「(Inactive)」というテキストを削除し、代わりに極小サイズの文字でスクリプト名(Export to Docs)を表示するようにUIを改善しました。
- v0.4.36: 最小化表示(Inactive)時のパネル背景色をライトピンクの透過背景に変更し、視認性を高めました。
- v0.4.35: 1ターン専用パネルが非表示になるのではなく、最小化(Inactive)された状態で画面に残り、スクリプトの動作状況を常に把握できるようにUIパターンを改善しました。
- v0.4.33: SVGアイコンやUIパネルのDOM構造を `template.html` にオフロードし、JavaScriptのファイルサイズと不要なセレクタを削減するリファクタリングを実施しました。
- v0.4.24: 1ターンの専用UIパネルに、
gemini-turn-counterと連携して一発で全画像をコピーできる「📋 Copy Images」ボタンを追加しました。 - v0.4.18: URLの比較を行う際に大文字・小文字を区別しないように修正し、
Https://のように入力された場合でも正しく自動実行がトリガーされるように改善しました。 - v0.4.17: インストール検知のホスト制限をより厳格化し、コード内のインデントや不要な空白を整理して保守性を向上させました。
- v0.4.16: YouTubeのライブ配信URL(
youtube.com/live/)からの動画ID抽出に対応しました。 - v0.4.15: 内部的な修正として、不要になったインストール検知用のロジック(GitHub Codespaces環境等向けの判定)を削除し、コードを整理しました。
- v0.4.14: URL抽出およびYouTubeのURL判定における正規表現に大文字・小文字を区別しないフラグ(
/i)を追加し、スマートフォンの入力などでHttps://のように大文字が混ざった手動入力URLでも正しく抽出と自動実行の判定が行われるように修正しました。 - v0.4.13: 「Auto(URL)」の一致判定において、YouTubeのURL(
youtu.be短縮URLやyoutube.com/watchなど)については形式の違いを無視し、動画IDさえ一致すれば自動実行が発動するように改良を行いました。 - v0.4.12: GeminiのSPA(単一ページアプリケーション)遷移に対応するため、サイドバー等から別の会話へ移動した際にもURL自動判定のフラグをリセットし、描画完了を待機する時間を2秒に延長する修正を行いました。
- v0.4.11: 「Auto(URL)」の条件に合致し自動実行が決定した際、即座にエクスポートが走るのではなく、設定した秒数ぶん「Cancel Auto (Ns)」とボタンが黄色くカウントダウン表示され、その間にクリックすれば自動実行をキャンセルできるよう猶予期間を設ける機能を追加しました。
- v0.4.10: モデルの回答からURLを抽出する際、単なるテキストとしてのURLだけでなく、リンク(アンカー要素の
href属性)として埋め込まれたURLも抽出するように改善。 - v0.4.9: 1ターンの専用UIのドラッグハンドル部分に、現在インストールされているスクリプトのバージョン番号を表示するように改善。および検出されたURLをコンソールログに出力するデバッグ機能を追加。
- v0.4.8: 「Auto(URL)」の条件を緩和し、モデルの回答内に他のURLが含まれていても、ユーザーが送信した1つのURLと同一のURLが回答内に含まれていれば自動実行されるようにしました。
- v0.4.7: Gemini側のセキュリティポリシー(TrustedHTML)変更により、スクリプトがブロックされてパネルが表示されなくなるエラーを修正(
innerHTMLの使用を除去)。 - v0.4.6: ユーザーのプロンプトとAIの回答に「全く同じURLが1つだけ」含まれている場合、自動的に「Export & Delete」を開始する「Auto(URL)」機能を追加。
- v0.4.5: 1ターンの会話専用パネルを、横長のコンパクトなボタンバー(ピル型)に変更し、自動削除のオンオフを切り替えるチェックボックスを追加。
- v0.4.4: 1-Turn Auto Export パネルをフローティング化(ドラッグ移動可能)し、位置を保存・永続化する機能を追加。
- v0.4.3: 1-Turn Auto Export パネル上にスクリプトのバージョンを表示するように改善。
- v0.4.2: 会話削除後や別のチャットへの移動時に「Deleting...」のままUIがスタックする問題に対応するため、SPA遷移時の完全リセット処理を追加。
- v0.4.1: 初回ロード時のスキャンをポーリング方式(最大5秒待機)に変更し、描画が遅い環境でも確実にUIが注入されるよう改善。
- v0.4.0: Geminiの最新UI(タグ名ベースのセレクタ)に対応し、ボタンやパネルが表示されない問題を根本修正。
- v0.3.9: AI回答の検出ロジックを改善し、一部の環境でボタンやパネルが表示されない問題を修正。
- v0.3.8: 1ターン判定用のセレクタ変更に伴う退行バグ(各ターンのエクスポートボタンが消える問題)を修正。
- v0.3.6: MutationObserverの負荷を軽減(デバウンス処理の改善)し、初回ロード時の検出漏れを修正。
- v0.3.3: 1ターンの会話専用の「Export & Delete」フローティングUIを追加。削除待機時間を調整可能に。