GEMINI LABEN
FLASH35 — Gemini 3.5 Flashが一般提供に。gemini-flash-latestが指す実体となり、エージェント処理とコーディングで持続的な性能を発揮しますAGENTS — Gemini APIのManaged Agentsが公開プレビューに。Googleがホストする隔離Linuxサンドボックスで状態を保持する自律エージェントを構築できますANTIGRAV — 汎用マネージドエージェントantigravity-preview-05-2026が公開プレビュー。計画・推論・コード実行・ファイル操作・ウェブ閲覧をこなしますTTS — gemini-3.1-flash-tts-previewがstreamGenerateContent経由の音声生成ストリーミングに対応しましたNANO — Nano Banana 2 Liteが最速・最省コストのGemini画像モデルとして利用可能になりましたDEPRECATE — 旧世代の画像生成モデルは2026年8月17日に停止予定です。移行の段取りを早めに固めておきたいところですFLASH35 — Gemini 3.5 Flashが一般提供に。gemini-flash-latestが指す実体となり、エージェント処理とコーディングで持続的な性能を発揮しますAGENTS — Gemini APIのManaged Agentsが公開プレビューに。Googleがホストする隔離Linuxサンドボックスで状態を保持する自律エージェントを構築できますANTIGRAV — 汎用マネージドエージェントantigravity-preview-05-2026が公開プレビュー。計画・推論・コード実行・ファイル操作・ウェブ閲覧をこなしますTTS — gemini-3.1-flash-tts-previewがstreamGenerateContent経由の音声生成ストリーミングに対応しましたNANO — Nano Banana 2 Liteが最速・最省コストのGemini画像モデルとして利用可能になりましたDEPRECATE — 旧世代の画像生成モデルは2026年8月17日に停止予定です。移行の段取りを早めに固めておきたいところです
記事一覧/Workspace 連携
Workspace 連携/2026-07-15上級

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

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

Apps Script7Google Docs2Gemini API184構造化抽出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-04-09
Google Workspace × Gemini API 業務自動化の運用ノート — Apps Script 実装パターン12選と本番設計
Gemini API と Google Apps Script で Gmail・Docs・Sheets・Calendar を横断する業務自動化を組む実装パターン12選。4サイト運用とアプリ問い合わせ対応で踏んだ落とし穴を、429の握りつぶし・JSONフェンス・6分制限・モデル振り分けの実測付きで整理しました。
Workspace 連携2026-07-13
夜間バッチの完了を待つポーリングを畳む — Apps Script の doPost を Gemini の合図受けにする設計
Gemini の Batch や長時間オペレーションの完了を Apps Script の時間主導トリガーで5分おきに問い合わせると、UrlFetch の呼び出しと待ち時間が静かに積み上がります。Webhook を doPost で受け、合図として扱ってから権威確認と冪等適用に落とす設計を組み立てます。
Workspace 連携2026-07-08
Apps Script の Gemini 自動化が月末に必ず止まる — UrlFetch 日次上限を溶かさない予算ガバナー設計
Apps Script から Gemini を呼ぶ自動化は、6分上限やトリガー本数とは別に UrlFetch の日次呼び出し上限で静かに止まります。件数が増えた日だけ落ちる問題を、日次予算ガバナーとバックログ繰り越しで捌き切る設計と動くコードにまとめます。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →