◉GEMINI LABEN
●ARGON — gemini-4-argon が 10/13 に GA。複雑なコーディング・エージェント・数学・科学向けです●DEEP RES — deep-research-pro-preview-12-2025 は 10/23 に停止、残り6日。移行先は deep-research-preview-04-2026●NANO — gemini-nano-banana-2.1 が GA(10/06)。gemini-3.1-flash-image は非推奨で停止日は未発表です●MCP — ツール結果が 8.5万トークンに膨らんだ事例を、ADK で 310 トークンに包んで抑えた報告が出ています●FLASH — gemini-3.7-flash と 3.5-flash は新しい Flash モデルに自動で回されます(10/08)●NEW — クラッシュ報告を毎回ゼロから読ませない — 既知バグ早見表を先に grep し…●ARGON — gemini-4-argon が 10/13 に GA。複雑なコーディング・エージェント・数学・科学向けです●DEEP RES — deep-research-pro-preview-12-2025 は 10/23 に停止、残り6日。移行先は deep-research-preview-04-2026●NANO — gemini-nano-banana-2.1 が GA(10/06)。gemini-3.1-flash-image は非推奨で停止日は未発表です●MCP — ツール結果が 8.5万トークンに膨らんだ事例を、ADK で 310 トークンに包んで抑えた報告が出ています●FLASH — gemini-3.7-flash と 3.5-flash は新しい Flash モデルに自動で回されます(10/08)●NEW — クラッシュ報告を毎回ゼロから読ませない — 既知バグ早見表を先に grep し…
記事一覧/Workspace 連携
◧ Workspace 連携/2026-07-15上級

表を渡したはずが、行と列の対応が消えていた — Docs の構造を保ったまま Gemini に渡す抽出層

Apps Script の getBody().getText() は Docs の表を段落の並びに潰します。42行×5列の運用台帳での取り違え実測と、要素ツリーを歩いて構造を残す抽出層の実装、その受け入れテストまでを記録しました。

Apps Script13Google Docs3Gemini API248構造化抽出Workspace 自動化

✦ プレミアム記事

数字は全部合っているのに、答えが噛み合わない。そういう不気味な壊れ方をしたことがあります。

個人開発で運営している4つのサイトの記事本数や期限、それに App Store へ出す更新の提出予定を、私は Google Docs の台帳にまとめています。それを Apps Script から Gemini に渡し、「今月の期限のうち、まだ着手していないものを挙げてください」と尋ねる。返ってきた答えに並ぶ日付も件数も、たしかに台帳のどこかには存在する値でした。ただ、どのサイトの行の話なのかが入れ替わっていた。

原因は Gemini 側ではありませんでした。渡す前の一行にありました。

値は合っているのに、どの行の話か分からなくなる

最初に書いていたのは、こういうコードです。

function askAboutLedger() {
  const text = DocumentApp.openById(DOC_ID).getBody().getText();
  const prompt =
    '次の運用台帳から、7月中に期限を迎える項目をサイト名つきで JSON 配列にしてください。\n\n' + text;
  return callGemini(prompt);
}

getText() は本文をひとつの文字列で返してくれます。手軽で、たいていの用途では十分に見えます。実際、段落だけで構成された議事録や仕様の下書きなら、これで困りません。

困るのは、表が混じったときです。台帳の中身を Logger.log() で覗いてみて、ようやく合点がいきました。

サイト
7月公開
残タスク
期限
担当
Claude Lab
12
3
2026-07-20
本人
Gemini Lab
14
1
2026-08-17
本人

セルの値が改行区切りで縦一列に並んでいます。表という入れ物は消え、中身だけが床にこぼれた状態です。ここから「Gemini Lab の期限」を正しく拾えというのは、5個ずつ数えて位置を復元しろと言っているのと変わりません。列数が固定なら数え上げで復元できることもありますが、空セルがひとつ入った瞬間に、それ以降の対応が全部ずれます。

Gemini は嘘をついていたのではなく、こぼれた値をそれらしく並べ直していたわけです。

getText() が捨てているもの

何が失われるのかを整理しておきます。Apps Script の DocumentApp は本文を要素のツリーとして持っていて、getText() はそのツリーを深さ優先で辿りながらテキストだけを連結します。つまり、テキスト以外の情報はすべて落ちます。

Docs 上の情報getText() 後抽出への影響
表のセル境界・行列位置改行区切りの平文行と列の対応が消える(最も深刻)
見出しレベル(H1〜H6)ただの段落セクションの範囲が分からない
リストの入れ子・番号行の並びのみ親子関係が消える
リンク先 URL表示テキストのみ参照先が辿れない
脚注本文に現れない補足が丸ごと欠落する
コメント(吹き出し)本文に現れないDocumentApp からは元々読めない

最後の行は少し性質が違います。コメントは DocumentApp の管轄外で、Drive API の comments.list を叩かないと取得できません。「本文に書いてあるはずの但し書きが Gemini に届いていない」と悩んだとき、その但し書きがコメントとして残されている可能性は疑ってよいところです。

私自身、脚注に書いた例外条件が抽出結果に一度も反映されず、しばらくプロンプトの書き方を疑って時間を溶かしました。プロンプトの問題ではなく、そもそも届いていなかったのです。

✦

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
✦42行×5列の運用台帳で、行と列の取り違えが30回答中11回から0回まで下がった入力表現の比較実測
✦Docs の要素ツリーを走査して見出し・表・リストを保つ抽出層の完全な Apps Script コード
✦Docs 側が改稿されても壊れないよう、構造不変量4種を突き合わせる受け入れテストの組み方
Stripe による安全な決済 · いつでもキャンセル可能
✦

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Gemini Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • ✦コピー&ペーストで使える実装コード付き
  • ✦毎日新しい上級ガイドを追加
  • ✦¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

◧ Workspace 連携2026-10-15
Gemini の回答を日付つきの PDF で残す — Docs に書き出して、Apps Script で固定する
Gemini の「Share & export」に PDF はありません。Docs に書き出し、Apps Script で日付つき PDF にして同じフォルダへ固定する手順と、getAs の命名で起きる落とし穴をまとめました。
◧ Workspace 連携2026-10-03
Sheets から呼ぶ Gemini の月額を、年末の値上げ日をまたいで Apps Script で割り出す
スプレッドシートから Gemini API を呼んでいる方へ。呼び出しごとのトークン数を台帳タブに残し、2026年12月31日で終わる導入価格と2027年1月1日からの標準価格の二段で月額を見積もる Apps Script を、動かした出力つきで書き残します。
◧ Workspace 連携2026-09-01
Gemini の新機能が Workspace に出てこないとき、待ちと不具合を切り分ける順序
告知された Gemini の新機能が自分の Workspace に現れないとき、それが段階展開の途中なのか設定の問題なのかを、リリーストラックと展開ペースから機械的に判定する手順と Apps Script の台帳をまとめました。