Google Sheets API 2大落とし穴(append列ズレ/QUERY ORDER BY silent fail)
フィルタ有効シートへのvalues.append()が列ズレする罠と、QUERY()のORDER BYが型混在列で全行silent失敗する罠、それぞれの回避策
約2,600トークンの節約 (API料金換算で約4円分)。 要件定義・技術調査・試行錯誤ぶんのトークンがまるごと不要になります。※ 出品者申告とレビューに基づく推定値。モデル・タスク内容により変動します。
この巻物について
「Google Sheets API 2大落とし穴(append列ズレ/QUERY ORDER BY silent fail)」は、Google WorkspaceカテゴリのAI指示書(MDファイル)です。フィルタ有効シートへのvalues.append()が列ズレする罠と、QUERY()のORDER BYが型混在列で全行silent失敗する罠、それぞれの回避策この巻物をAIに読み込ませると、ゼロから設計・調査する場合に比べて 約2,600トークン(API料金換算で約4円)・87%のトークンを節約できます。
- カテゴリ
- Google Workspace
- 対応AI
- claude-code、cursor、codex-cli
- ライセンス
- 商用利用可 (再販不可)
- 価格
- 無料
- ゼロから開発時
- 約3,000トークン
- この巻物使用時
- 約400トークン
- 節約量
- 約2,600トークン (約4円)
- 更新日
- 2026-08-27
使い方 (AIに渡す3つの方法)
いちばん簡単なのはワンライナー。Claude Code のターミナルに貼るだけです。
claude "https://makimono-md.vercel.app/api/v1/files/google-sheets-api-2-append-query-order-by-silent-fail/raw を読み込んで、この指示書どおりに実装して"
中身
Google Sheets API 落とし穴2つ(values.append列ズレ / QUERY ORDER BY silent fail)
Google Sheets API (v4, Python/Node/Apps Script共通の概念) でスプレッドシートに読み書きする自動化を作るときに、 無言で壊れる2つの罠と回避策。どちらもエラーは出ず、read-back検証をして初めて発覚する。
罠1: 対象シートに「フィルタ(Basic Filter)」が有効だと values.append() で列がズレる
症状: spreadsheets.values.append(range: '<Sheet>!A:I', ...) で複数列のデータ(例: [ID, カテゴリ, タイトル, ...] の9要素配列)を追記したのに、
read-backすると新規行はA列〜H列が空で、最後の列(I列)にだけ最初の要素(ID等)が入っている。
原因(推定): values.append() はrangeで指定した範囲内で既存の「テーブル」を検出し、その最終行の直後に挿入する。
対象シートに Basic Filter(絞り込みフィルタ)が有効な状態だと、この「テーブル検出」ロジックが影響を受け、
新規行の列マッピングが崩れることがある(フィルタなしの別シート・別タブでは同じコードで問題なく動く=再現条件を局所的に切り分けて確認済み)。
回避策: フィルタが有効なシートへの追記には values.append() を使わず、
values.get()で現在のデータ範囲を取得し、行数(=次の空き行番号)を計算するvalues.update(range: '<Sheet>!A{row}:I{row}', ...)のように明示的な行番号を指定したupdateで書き込む
res = service.spreadsheets().values().get(spreadsheetId=sid, range='Sheet1!A:I').execute()
next_row = len(res.get('values', [])) + 1
service.spreadsheets().values().update(
spreadsheetId=sid, range=f'Sheet1!A{next_row}:I{next_row}',
valueInputOption='USER_ENTERED', body={'values': [row]}
).execute()
検証を必ず入れる: 書き込み後に同じ範囲を values.get() で読み戻し、A列(先頭列)に期待した値が入っているかをassertする。
append()は例外を投げずに成功ステータスを返すため、戻り値だけでは列ズレに気づけない。
罠2: QUERY() の ORDER BY が、列の値の型が混在していると全行を silent fail させる
症状: =QUERY(範囲, "select A,B,C where カテゴリ列 <> 'X' order by 日付列 asc", 1) のようなクエリが、
order by を付けているとヘッダー行だけ表示され、データ行が0件になる(エラー表示すら出ない)。
同じ select ... where ... 部分だけを order by 無しで実行すると、データはちゃんと返る。
原因: order by の対象列に、日付型のセルと、空文字列・文字列(日付でない値)が混在していると、
QUERY言語の内部ソート処理が型の不一致で失敗し、結果セット全体を黙って空にする。
(where句のフィルタ自体は正しく機能しているのに、order byを追加した瞬間だけ0行になる、という切り分けで発見)
回避策:
- 対象列の型を統一できないなら、その
order by句を諦めて外す(表示順は呼び出し側や別ロジックでソートする) - どうしても順序が欲しいなら、
order by対象列を別途IF/日付変換で正規化してから使う - デバッグ手順:
order byを外した最小クエリでデータが返ることを先に確認 →order byを1列ずつ足して、どの列で0件になるか切り分ける
教訓(両方に共通)
Sheets API / QUERY関数は「エラーを返さず、意図しない結果を黙って返す」失敗モードが多い。 書き込み系操作は必ずread-back検証、QUERY系の数式は必ず段階的な最小クエリでの動作確認をセットにする。
よくある質問
+「Google Sheets API 2大落とし穴(append列ズレ/QUERY ORDER BY silent fail)」とは何ですか?
フィルタ有効シートへのvalues.append()が列ズレする罠と、QUERY()のORDER BYが型混在列で全行silent失敗する罠、それぞれの回避策
+どれくらいトークン(費用)を節約できますか?
ゼロから開発すると約3,000トークンかかりますが、この巻物を使えば約400トークンで済みます。差し引き約2,600トークン(API料金換算で約4円)・87%の節約です。
+どうやって使いますか?
無料です。MDファイルを Claude Code などのAIに読み込ませるだけ。ワンライナーをターミナルに貼れば実装が始まります。要件定義や技術調査を省いて実装だけにトークンを使えます。
+どのAIツールに対応していますか?
claude-code、cursor、codex-cli に対応しています。
+商用利用できますか?
ライセンスは「商用利用可 (再販不可)」です。
🤝 自分でAIを動かすのは、まだ不安…という方へ
この巻物の内容を、AIを使うプロに丸ごと任せることもできます。姉妹サービスAI代行堂なら「LINEで頼むだけで、仕事が完成」。
関連する巻物
GAS完全自動化テンプレ — Driveコマンドキュー方式
Google Apps Script の「毎回エディタで▶実行」を根絶。Drive 経由のコマンドキューで、初回1クリック以降は AI がすべての GAS 関数をリモート実行できるようになるテンプレート指示書。
人間の手入力台帳を壊さずに自動更新する — GAS Web App upsert 設計
各PC/各拠点の点検結果を、人間が手運用しているスプレッドシート台帳へ自動反映する。手入力列とコメントを絶対に壊さない突合設計、タブ/列の解決、並行POST対策、配布シークレットの落とし穴まで。
数式まみれの業務スプレッドシートを、Webアプリから壊さずに編集させる型
ArrayFormula と per-row 数式が混在する台帳を、セル単位 allowlist・dry-run 既定・適用前バックアップ・触っていないセルの数式不変検査で安全に書き換える設計手順。列ごとの数式復元と、テストが緑のまま壊れる典型例つき。
この巻物、誰かのトークンも救えます
𝕏 で節約レシートをシェア