マキモノ
Google Workspace無料✅ 公式検証済みv1.0.0 / 更新

Google Sheets API 2大落とし穴(append列ズレ/QUERY ORDER BY silent fail)

フィルタ有効シートへのvalues.append()が列ズレする罠と、QUERY()のORDER BYが型混在列で全行silent失敗する罠、それぞれの回避策

出品者: miho.furukawa0430@gmail.com2 DL📖 読込 約1,146トークン (約2円)💰 コスパ 2
トークン節約メーター87%節約
ゼロからAIに作らせた場合3,000トークン
このMDを読ませた場合400トークン

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 のターミナルに貼るだけです。

⬇ .md をダウンロード
claude "https://makimono-md.vercel.app/api/v1/files/google-sheets-api-2-append-query-order-by-silent-fail/raw を読み込んで、この指示書どおりに実装して"
claude-codecursorcodex-cliライセンス: 商用利用可 (再販不可)

中身

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() を使わず、

  1. values.get() で現在のデータ範囲を取得し、行数(=次の空き行番号)を計算する
  2. 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で頼むだけで、仕事が完成」。

AI代行堂を見る →

関連する巻物

この巻物、誰かのトークンも救えます

𝕏 で節約レシートをシェア