既存の業務スプレッドシートに「成果物シート」を自動追加する(Driveコネクタでは不可・Sheets API直叩き)
調査結果や候補リストを新規ファイルではなく案件の正本スプレッドシートの新タブとして足す手順。DriveコネクタにaddSheetが無い点、タブ名rangeのクォート、gid付きURL、read-back verify、Windows の file:/// import まで。
約7,200トークンの節約 (API料金換算で約11円分)。 要件定義・技術調査・試行錯誤ぶんのトークンがまるごと不要になります。※ 出品者申告とレビューに基づく推定値。モデル・タスク内容により変動します。
この巻物について
「既存の業務スプレッドシートに「成果物シート」を自動追加する(Driveコネクタでは不可・Sheets API直叩き)」は、業務自動化カテゴリのAI指示書(MDファイル)です。調査結果や候補リストを新規ファイルではなく案件の正本スプレッドシートの新タブとして足す手順。DriveコネクタにaddSheetが無い点、タブ名rangeのクォート、gid付きURL、read-back verify、Windows の file:/// import まで。この巻物をAIに読み込ませると、ゼロから設計・調査する場合に比べて 約7,200トークン(API料金換算で約11円)・80%のトークンを節約できます。
- カテゴリ
- 業務自動化
- 対応AI
- claude-code、cursor、codex-cli
- ライセンス
- 商用利用可 (再販不可)
- 価格
- 無料
- ゼロから開発時
- 約9,000トークン
- この巻物使用時
- 約1,800トークン
- 節約量
- 約7,200トークン (約11円)
- 更新日
- 2026-10-03
使い方 (AIに渡す3つの方法)
いちばん簡単なのはワンライナー。Claude Code のターミナルに貼るだけです。
claude "https://makimono-md.vercel.app/api/v1/files/drive-sheets-api/raw を読み込んで、この指示書どおりに実装して"
中身
既存の業務スプレッドシートに「成果物シート」を自動追加する(Drive コネクタでは不可・Sheets API 直叩き)
調べ物やリスト作成の成果を、新しいファイルではなく案件の正本スプレッドシートの中に新しいタブとして足すための手順。依頼者がそのタブに直接書き込んで運用を続けられる形にする。
なぜ新規ファイルを作らないのか
- 正本が1ファイルに集約され、関係者が同じ場所だけ見れば済む
- 案件ごとに成果物ファイルが増えないので、検索と共有権限の管理コストが案件数に比例して増えない
- 次に同種の案件が来たとき、その1ファイルを読むだけで過去の候補・単価・断られた理由まで再利用でき、外部調査のやり直しが不要になる
前提の落とし穴(ここで時間を失う)
- Drive の MCP コネクタ/汎用 Drive API ではシートタブを追加できない。 ファイルの作成・読み書きはできても
addSheetが無い。Sheets API を直接叩く必要がある。 - Drive コネクタの
create_file系は本文を base64 で要求することがある。 プレーンテキストを渡すとThe file content is not a valid base64 string.で落ちる。パラメータ名もnameではなくtitle等、実装ごとに違う。エラー文のフィールド名をそのまま読んで直す。 - 大きなスプレッドシートの読み取りは応答上限を超える。 100万字級になるとツールの戻り値がファイルに退避される。親の文脈を守るため、退避ファイルは別プロセス(スクリプト)かサブエージェントに解析させ、要点だけ受け取る。
- Windows の Node で絶対パスを
importするときはfile:///が必要。import x from 'C:/path/mod.mjs'はERR_UNSUPPORTED_ESM_URL_SCHEME(Received protocol 'c:')になる。file:///C:/path/mod.mjsと書く。
手順
1. 書き込みスコープのアクセストークンを得る
既存の Drive 連携があるなら、その認証モジュールにスプレッドシート用のスコープを要求する。
import { getDriveToken } from 'file:///<絶対パス>/drive-auth.mjs';
const token = await getDriveToken({ scope: 'https://www.googleapis.com/auth/spreadsheets' });
読み取り専用スコープのトークンを使い回すと addSheet で 403 になる。スコープは明示する。
2. タブを足して値を流し込む(冪等に)
const API = 'https://sheets.googleapis.com/v4/spreadsheets';
const auth = { Authorization: `Bearer ${token}`, 'Content-Type': 'application/json' };
const SHEET_ID = '<スプレッドシートID>';
const TITLE = '<タブ名>';
// 既存タブを調べ、同名があれば addSheet を飛ばす(再実行しても壊れない)
const meta = await fetch(`${API}/${SHEET_ID}?fields=sheets.properties`, { headers: auth });
const exists = (await meta.json()).sheets.some((s) => s.properties.title === TITLE);
if (!exists) {
await fetch(`${API}/${SHEET_ID}:batchUpdate`, {
method: 'POST', headers: auth,
body: JSON.stringify({ requests: [{ addSheet: { properties: {
title: TITLE,
gridProperties: { rowCount: 60, columnCount: 13, frozenRowCount: 1 },
} } }] }),
});
}
// rows は配列の配列。長さが揃っていなくてよい(短い行はそのまま左詰め)
await fetch(`${API}/${SHEET_ID}/values/${encodeURIComponent(`'${TITLE}'!A1`)}?valueInputOption=USER_ENTERED`, {
method: 'PUT', headers: auth, body: JSON.stringify({ values: rows }),
});
タブ名を range に入れるときはシングルクォートで囲んでから URL エンコードする(日本語・空白・記号を含むタブ名で必須)。
3. read-back verify する(省略しない)
書き込み API が 200 を返しても、range 指定ミスで別タブに入っていることがある。書いた場所を読み返してから完了と言う。
const back = await fetch(`${API}/${SHEET_ID}/values/${encodeURIComponent(`'${TITLE}'!A1:B3`)}`, { headers: auth });
console.log('READBACK', JSON.stringify((await back.json()).values));
4. タブへ直接飛ぶ URL を渡す
const meta2 = await fetch(`${API}/${SHEET_ID}?fields=sheets.properties`, { headers: auth });
const gid = (await meta2.json()).sheets.find((s) => s.properties.title === TITLE).properties.sheetId;
// https://docs.google.com/spreadsheets/d/<ID>/edit#gid=<gid>
gid を付けないと先頭タブが開き、受け取った人が自分で探すことになる。gid まで含めて渡す。
中身の作り方(運用に効く部分)
- 記入用の空列を用意する。 候補リストなら「ステータス」「金額」「備考」を空欄で並べておく。読む人がその場で書き込めることが、別ファイルにしないことの価値そのもの。
- 不明は「不明」と書く。 推測で埋めない。後から埋める人が、未調査なのか調査済みで無いのかを区別できる。
- 末尾に前提条件を併記する。 日時・場所・規模・予算・先方担当など、そのタブ単体で判断できる情報を数行置く。元のファイルの別タブを探させない。
- 優先度を1列目に置いて並べ替え済みで渡す。 並べ替えを読む人にさせない。
実行環境での注意
- 使い捨てスクリプトは一時ディレクトリにファイルとして置き、
node <file>で実行する。長いコードをシェルの引数に埋め込むと、クォート崩れと安全機構の誤検知の両方を踏む。 - 同じスクリプトを2回実行しても安全になっているか(
addSheetのスキップ、PUTの上書き)を必ず確認してから走らせる。
効果
- 成果物ファイルの増殖と、そのたびの共有設定が消える
- 過去案件の再利用が「1ファイルを開く」だけになり、同種案件での外部調査をやり直さずに済む
- 受け取った人の操作が「リンクを開いて書き込む」だけになる
よくある質問
+「既存の業務スプレッドシートに「成果物シート」を自動追加する(Driveコネクタでは不可・Sheets API直叩き)」とは何ですか?
調査結果や候補リストを新規ファイルではなく案件の正本スプレッドシートの新タブとして足す手順。DriveコネクタにaddSheetが無い点、タブ名rangeのクォート、gid付きURL、read-back verify、Windows の file:/// import まで。
+どれくらいトークン(費用)を節約できますか?
ゼロから開発すると約9,000トークンかかりますが、この巻物を使えば約1,800トークンで済みます。差し引き約7,200トークン(API料金換算で約11円)・80%の節約です。
+どうやって使いますか?
無料です。MDファイルを Claude Code などのAIに読み込ませるだけ。ワンライナーをターミナルに貼れば実装が始まります。要件定義や技術調査を省いて実装だけにトークンを使えます。
+どのAIツールに対応していますか?
claude-code、cursor、codex-cli に対応しています。
+商用利用できますか?
ライセンスは「商用利用可 (再販不可)」です。
🤝 自分でAIを動かすのは、まだ不安…という方へ
この巻物の内容を、AIを使うプロに丸ごと任せることもできます。姉妹サービスAI代行堂なら「LINEで頼むだけで、仕事が完成」。
関連する巻物
Google Meet 自動参加&動画配信Bot 開発指示書
指定した時刻に Google Meet へ自動参加し、動画を再生しながら画面共有する Bot を、Claude Code に一発で作らせる開発指示 MD。朝会の定例動画配信・ウェビナーの自動放送に。
受信メール添付を案件フォルダへ自動取込するパイプライン
メールを読むアプリとドライブに書くアプリが別、という現実的な構成で顧客メールの添付を案件フォルダへ無人保存する設計。権限追加を避ける理由、実行時間制限下の予算3本立て、二重の重複防止、base64url/行数上限/変換判定などの実装罠、案件と顧客のマッチング、名寄せは候補提示+人の承認にする型まで。
Gmail 自動仕分け&返信ドラフト生成MD
受信メールを AI が分類 (要返信/情報/営業/スパム) してラベル付けし、要返信メールには返信ドラフトまで自動生成する仕組みを作らせる指示書。DWD (ドメイン全体委任) 設定手順込み。
この巻物、誰かのトークンも救えます
𝕏 で節約レシートをシェア