「毎週の会議前に、議事録テンプレートを手で作っている」
「請求書や見積書を、スプレッドシートから手作業で PDF 化している」
「フォーム申請が来るたびに、承認者へメールを手で送っている」
…こういう作業、まだ手でやってませんか?
僕はやってました。むしろ「効率化のための仕事」が業務時間の半分を占める、みたいな本末転倒な状態でした。
そんな状態を救ってくれたのが Claude Code / Codex × Google Apps Script(GAS) × Clasp の組み合わせです。日本語で指示するだけで GAS のコードが書き上がり、ボタン一発で Google 側に反映される。コピペ業務から脱出する一番手っ取り早い道だったので、今回はそのセットアップ手順と、実務で使えるレシピを7個まとめて紹介します。
「でもセットアップ面倒なんでしょ?」と思うかもしれません。いやいや、Claude Code や Codex に ZIP ファイルごと渡して「セットアップして」 と頼めばOKです。解凍も、bash bootstrap.sh の実行も、確認プロンプトの案内も AI が代わりに進めてくれます。途中で Claude Code に入れるか、Codex に入れるか、両方に入れるか を選べるので、自分が普段使っているAIコーディング環境に合わせられます。
この記事は AIコーディング環境から GAS を書いて Google にデプロイする環境作り、Claude Code / Codex にそのまま渡せる依頼文 7 本、先回りで潰すハマりどころ の 3 本立て。書いてる人は AI 講座を副業でやりつつ本業エンジニアで、GAS は社内の地味な業務効率化で年に数本書く、くらいの距離感です。
なぜ AI × GAS なのか
GAS(Google Apps Script)は、Google がタダで使わせてくれる 「スプレッドシートや Gmail を動かす自動化スクリプトを書ける場所」 です。Excel でいう VBA の Google 版、と言うとイメージしやすい。実行はすべて Google のサーバー上で勝手にやってくれるので、自分の PC を起動しておく必要すらありません。業務効率化の入り口として、無料枠でできることがかなり多い枠組みです。
ただし通常の GAS 開発はブラウザ上の「スクリプトエディタ」が前提で、Claude Code や Codex から直接触れません。これだと AI 補助が効かないし、Git 管理もしづらい。
Clasp なしでやろうとして折れた話
最初は「AI に GAS のコードを書かせて、ブラウザのスクリプトエディタに貼るだけならいけるでしょ」と思って、Clasp を入れずに始めました。結果、これが コピペ地獄 でした。
毎回の流れがこれです。
- ブラウザでスプレッドシートを開く
- 「拡張機能 → Apps Script」で別タブを開く
- どのプロジェクトのエディタかを毎回探す(複数案件あると地味につらい)
- 既存コードを全選択して消す
- AI の出力をコピーして貼る
- 保存ボタンを押す
- 上のプルダウンから「実行する関数」を選ぶ
- 実行ボタンを押す
「ブラウザのエディタで実行してください」と言われても、どこを開けばいいのか・どこから実行すればいいのか という UI 操作を覚える手間が普通に発生します。コードを 1 行直すたびに毎回これ。AI にコードを書かせている意味の半分くらいが、ブラウザを開いてはコピペを貼る作業に溶けていきます。正直、無駄でしかなかった。
さらにつらいのが、コピペを繰り返しているうちに ブラウザエディタ側と AI が手元で認識しているコードがズレる 現象。ちょっとデバッグでブラウザ側を直接いじったり、AI に貼り忘れた変更があったりすると、ローカルと Google 側の中身が食い違ったまま実行されることになる。エラーが出ても「AI が見てるコードと実際に動いてるコードが違う」状態なので、何を直しても原因にたどり着けない。エラー原因の半分以上が、コードの不具合ではなく 同期ズレそのもの だった、ということが何度かありました。
ログまわりも同じ苦労です。「Logger.log の中身を見てください」と言われても、
- どのメニューに「実行ログ」があるんだっけ
- 出てる文字列をどうやって AI に渡すんだっけ
- → 結局 またコピペ
という、これまた UI を探す → コピペする、の往復が発生します。AI に解析させたいだけなのに、ログを手で運ばないといけない。
Clasp を入れたら世界が変わった
そこで使うのが Clasp(クラスプ)。Google 公式のコマンドラインツールで、ざっくり言うと 「手元のパソコンと Google 側のコードを行き来させる連絡係」 です。手元の Code.js を編集して clasp push と打てば Google 側に飛んでいき、逆に Google 側で誰かが直したら clasp pull で手元に降りてきます。ブラウザでスクリプトエディタを開かなくていい というだけで、開発体験が別物になります。Claude Code や Codex と組み合わせると、
という開発ループが手元で完結します。
差分が git diff で見えるし、CLAUDE.md に開発ルールを書き溜められるのも嬉しいところ。
そして地味に効くのが、さっき挙げた「同期ズレ」と「ログ運び」が両方消えること。
-
同期ズレ: ローカルの
Code.jsが常に唯一の正になります。AI が見ているコードと Google 側のコードが食い違うことがないので、エラーが出たら コードそのもの をデバッグすればよくて、「ズレてるかも?」の確認に時間を取られません -
ログ:
console.log()で出したログは、clasp tail-logs --watchでターミナルに流せます。AI に「このログ見てエラー直して」と頼めば、画面のテキストをそのまま読んで原因を当てに来てくれる。ブラウザを開いて「実行ログ」のメニューを探してコピペする儀式はかなり減ります
コードを完全に理解できなくても、「指示して動かす」ができれば GAS 使いの仲間入りです。
セットアップ:bootstrap.sh で 10 分
配布した clasp-skill-bundle.zip を使うと、Node.js 確認 → Clasp インストール → Google ログイン → API 有効化 → スキル配置 までを対話形式で進めてくれます。
ZIPはこちらに置いてあります。
手でコマンドを読むのが面倒なら、ZIP ファイルを Claude Code や Codex に渡して、こう頼めば大丈夫です。
このZIPを展開して、READMEを読んで、GAS開発環境をセットアップして。
途中で確認が必要なところは質問して。
AI が ZIP の展開から bootstrap.sh の実行まで進め、確認プロンプトごとに案内してくれます。自分で手を動かす場合のコマンドは次の3行ですが、ここも AI に任せて大丈夫です。
unzip clasp-skill-bundle.zip
cd clasp-skill-bundle
bash bootstrap.sh
スクリプトの中身はおおむねこういう流れです(各ステップで確認プロンプトが出ます)。
| Step | 何をしている? | 補足 |
|---|---|---|
| 1 | パソコンに Node.js(GAS用ツールを動かすための土台ソフト)が入っているかチェック | v22 未満ならアップグレードを案内 |
| 2 | Clasp を PC 全体で使えるようにインストール | これがコードを Google に運ぶ郵便屋さん |
| 3 | Clasp を 自分の Google アカウント と連携 | ブラウザが自動で開きます |
| 4 | Google 側で Apps Script API(外部ツールからの操作を許可する設定)を ON | このページのトグルを ON にするだけ |
| 5 |
google-apps-script スキルの配置先を選択 |
Claude Code / Codex / 両方から選べる |
スキルが配置されると、チャットで「スプレッドシートに自動集計マクロを書いて」と話しかけるだけで、選んだAIツールが GAS の書き方・clasp コマンド・よくある落とし穴を踏まえて答えてくれます。
💡 業務 PC の場合:
brewやnpm -gでグローバルインストールするので、管理者権限が必要なケースがあります。社内ルール上ローカルへの開発ツール導入が止められている場合は、先に IT 部門に相談しておくと事故りません。
配布 zip に入っているもの
clasp-skill-bundle.zip の中身はこんな構成です。bootstrap.sh が自動セットアップ役、skills がAIツールの知識ベース、docs が人間向けの教材 という三役で構成しています。
clasp-skill-bundle/
├── bootstrap.sh ← Node→clasp→login→API有効化→配置先選択→スキル配置を自動化
├── README.md ← パッケージ概要・トラブルシュート
├── docs/
│ └── handson.md ← この記事の同梱版(オフライン参照用)
└── skills/
└── google-apps-script/ ← Claude Code / Codex が常駐参照するスキル
├── SKILL.md ← GAS書き方の心得・落とし穴
└── references/
├── clasp.md ← Clasp 詳細・GCP紐付け・CI/CD・Web App
├── patterns.md ← メニュー/サイドバー/トリガー/PDF等の型
├── recipes.md ← 議事録/承認/帳票/PDF/通知等
└── quotas.md ← 実行制限・メール上限・デバッグ手順
「AI に丸投げ」でどこまで動くか、整理するとこんな感じです。
| やりたいこと | AI に頼めば自走? |
|---|---|
| 環境セットアップ(Node・Clasp・ログイン・API ON) | ✅ bash bootstrap.sh を案内してくれる |
| 「○○を自動化して」と日本語依頼 | ✅ スキル発火でコード生成+clasp push まで案内 |
| クォータやデバッグ手順を知りたい | ✅ quotas.md を参照して回答 |
| Web App としてデプロイ | ✅ clasp.md 経由で手順提示 |
| CI/CD(GitHub Actions)化 | ✅ clasp.md のテンプレートをベースに案内 |
つまり、普通の業務効率化(メニュー追加・行整理・PDF送付・時間トリガー)の範囲なら、だいたい丸投げで完結します。
ちなみに スプレッドシートを新規作成する、Drive のファイルを探す、Gmail や Calendar をその場で操作する だけなら、GASを書かずに Google Workspace CLI gws を使う選択肢もあります。gws 側にもセットアップZIPを用意しているので、用途で分けるならこんな感じです。
| やりたいこと | 向いている道具 |
|---|---|
| その場で Sheets / Drive / Gmail / Calendar を操作したい | gws-skill-bundle |
| 定期実行・フォーム送信時・シート編集時に自動で動かしたい | clasp-skill-bundle |
| Google Workspace 上に小さな業務システムを作りたい | clasp-skill-bundle |
詳しくは Google公式CLI「gws」をClaude Codeに連携してGoogle Workspaceを自動操作する にまとめています。
セットアップが終わったら、選んだAIツールを再起動してプロジェクトフォルダで立ち上げます。Claude Code を使う場合は、たとえばこうです。
mkdir ~/Desktop/gas-playground
cd ~/Desktop/gas-playground
claude
最初に CLAUDE.md を作ってルールを覚えさせておくと、以降のやり取りが安定します。
このプロジェクトは Google Apps Script を Clasp で開発しています。
コードは Code.js に書いてください。
SpreadsheetApp などの GAS のグローバル関数を使います。
関数にはコメントで何をしているかを一行ずつ書いてください。
この内容を CLAUDE.md に保存してください。
ここから先、Claude Code は毎回この前提で動いてくれます。Codex を使う場合も、同じ内容をプロジェクトの指示ファイルや最初の依頼文に置いておくと安定します。
GAS でできること:実務レシピ 7 選
ここからはコードを長々と貼るのではなく、Claude Code / Codex にそのまま渡せる依頼文 として紹介します。GAS は業務ごとにシート名・列名・フォルダ ID・宛先が変わるので、固定コードより「こう頼めばよい」の型を持っておくほうが実務では強いです。
使い方はシンプルです。まず空の GAS プロジェクトを作り、Code.js と .clasp.json があるフォルダで Claude Code / Codex を開きます。あとは以下の依頼文を貼って、FOLDER_ID や SPREADSHEET_ID などの仮置き値だけ自分の環境に差し替えます。
レシピ1:毎週水曜9時に会議用 Docs を自動生成する
週次会議のたびに「議題 / 決定事項 / TODO / 次回確認」を手で作っているなら、まずこれです。Calendar の予定を探し、Google Docs の議事録テンプレを作り、Drive に保存して参加者に共有するところまで自動化します。
Google Apps Script で、毎週水曜9時に会議用のGoogle Docsを自動生成する仕組みを作ってください。
要件:
- コードは Code.js に書く
- 関数名は createWeeklyMeetingDoc と createWeeklyMeetingTrigger
- カレンダーから「週次MTG」という予定を探す
- ドキュメント名は「週次MTG議事録_yyyy-MM-dd」
- 保存先DriveフォルダIDは MEETING_DOCS_FOLDER_ID という定数にする
- 本文には「参加者」「議題」「決定事項」「TODO」「次回確認」を入れる
- カレンダー予定の参加者に、生成したDocsの閲覧権限を付与する
- createWeeklyMeetingTrigger を1回実行すると、毎週水曜9時に createWeeklyMeetingDoc が動くようにする
- console.log で作成したDocsのURLを出す
- clasp push 後に何を実行すればいいかも教えて
必要なものは、保存先の Drive フォルダ ID と、検索する予定名だけです。まずは予定名をきっちり合わせるだけで動きます。
レシピ2:会議後の議事録テンプレを Drive に保存して参加者へ共有する
会議前の空テンプレではなく、会議後に「決定事項とTODOを整えた議事録」を残したい場合のレシピです。Sheets にメモを雑に書いておき、AI に整形させた本文を Docs 化する流れにすると、議事録の置き場所が散らばりません。
Google Apps Script で、スプレッドシートの会議メモから議事録Docsを作成してDriveに保存し、参加者へ共有する関数を作ってください。
前提:
- シート名は MeetingNotes
- 列は A: 日付, B: 会議名, C: 参加者メール, D: メモ, E: Docs URL
- 参加者メールはカンマ区切り
要件:
- 関数名は generateMinutesFromSelectedRow
- 選択中の行を読み取り、Google Docsを新規作成する
- Docs本文は「概要」「決定事項」「TODO」「未決事項」「次回確認」に分ける
- 作成したDocsを MINUTES_FOLDER_ID のDriveフォルダへ移動する
- 参加者メール全員に閲覧権限を付与する
- E列にDocs URLを書き戻す
- スプレッドシートに「議事録ツール」メニューを追加し、「選択行から議事録作成」から実行できるようにする
- エラー時は SpreadsheetApp.getUi().alert で分かりやすく表示する
このレシピは「AI が議事録本文そのものを要約する」というより、GAS で保存・共有・URL記録を自動化する のがポイントです。要約文は Claude Code / Codex に別途作らせてもいいし、手で整えたメモをテンプレに流し込むだけでも十分便利です。
レシピ3:フォーム申請を受けて承認依頼メールを送る
稟議、備品申請、アカウント発行、休暇申請など、「フォームで受けて誰かが承認する」業務に向いています。小さな社内ワークフローを買わずに作れるのが GAS のおいしいところ。
Googleフォームの回答スプレッドシートを使って、申請が来たら承認者へメールを送るGASを書いてください。
前提:
- 回答シート名は Form Responses 1
- 列は A: タイムスタンプ, B: 申請者メール, C: 申請種別, D: 内容, E: 金額, F: ステータス, G: 承認者コメント
- 承認者メールは APPROVER_EMAIL 定数にする
要件:
- 関数名は onFormSubmitApproval
- フォーム送信時のインストール型トリガーで動く
- 新規回答の F列に「申請中」を入れる
- 承認者に申請内容をHTMLメールで送る
- メール本文には対象行番号とスプレッドシートURLを含める
- 送信失敗時は F列に「通知失敗: エラー内容」を書く
- setupApprovalTrigger 関数でフォーム送信トリガーを作れるようにする
- 同じトリガーを重複作成しないようにする
最初はメール内の「承認 / 却下」ボタンまで作り込まなくてOKです。まずは承認者がシートを開いてステータスを変えるだけでも、申請の見落としはかなり減ります。
レシピ4:請求書・見積書 PDF を Sheets から自動生成する
行データから Google Docs テンプレートを複製し、プレースホルダを置換して PDF 化します。営業、経理、個人事業、業務委託まわりで効きやすい定番レシピです。
Google Apps Script で、スプレッドシートの選択行から見積書PDFを自動生成する仕組みを作ってください。
前提:
- シート名は Quotes
- 列は A: 見積番号, B: 顧客名, C: 件名, D: 金額, E: 発行日, F: メールアドレス, G: PDF URL
- Google Docs のテンプレートIDは TEMPLATE_DOC_ID 定数にする
- PDF保存先フォルダIDは PDF_FOLDER_ID 定数にする
- テンプレート内には {{quote_no}}, {{customer}}, {{title}}, {{amount}}, {{issue_date}} のプレースホルダがある
要件:
- 関数名は generateQuotePdfFromSelectedRow
- 選択行を読み取り、テンプレートDocsを複製する
- プレースホルダを置換する
- PDFに変換して PDF_FOLDER_ID に保存する
- 一時的に作ったDocsは削除せず、あとで確認できるよう同じフォルダに残す
- G列にPDF URLを書き戻す
- スプレッドシートに「帳票ツール」メニューを追加する
- 必須項目が空なら処理を止め、足りない列名をアラート表示する
PDF をメール送信まで自動化する場合は、最初から送らずに Gmail 下書きを作る 形にすると安心です。いきなり外部送信するより、業務導入しやすくなります。
レシピ5:Gmail 添付ファイルを Drive に自動保存する
請求書、契約書、履歴書、発注書など、メール添付で届くファイルを探して保存する作業をなくします。検索条件を Gmail の検索演算子で指定できるので、意外と柔軟です。
Google Apps Script で、Gmailの添付ファイルをDriveに自動保存する関数を作ってください。
要件:
- 関数名は saveInvoiceAttachmentsToDrive
- Gmail検索クエリは GMAIL_QUERY 定数にする。初期値は 'has:attachment subject:(請求書 OR invoice) newer_than:7d'
- 保存先DriveフォルダIDは ATTACHMENT_FOLDER_ID 定数にする
- 保存済み判定のため、PropertiesService に Gmail メッセージID + 添付ファイル名を記録する
- 同じ添付ファイルを二重保存しない
- 保存したファイル名は yyyyMMdd_送信者_元ファイル名 にする
- 処理結果を console.log に出す
- createAttachmentSaveTrigger 関数で毎朝8時に実行する時間トリガーを作る
- 初回実行時に必要な権限と確認手順も説明する
検索クエリを変えれば「履歴書」「契約書」「発注書」などにも転用できます。Gmail と Drive の権限を使うので、初回承認は少し強めに出ます。
レシピ6:期限が近い行だけを毎朝メール通知する
契約更新、提出期限、見積回答期限、タスクの締切など、スプレッドシートで管理している期限を毎朝チェックします。人間が毎日表を見に行くより、表から人間に来てもらう発想です。
Google Apps Script で、期限が近い行だけを毎朝メール通知するGASを書いてください。
前提:
- シート名は Deadlines
- 列は A: 件名, B: 担当者メール, C: 期限日, D: ステータス, E: 最終通知日
- ステータスが「完了」の行は除外する
要件:
- 関数名は sendDeadlineReminder
- 今日から3日以内、または期限切れの行だけを対象にする
- 担当者ごとに対象行をまとめて1通のHTMLメールで送る
- メールには件名、期限日、残り日数、スプレッドシートURLを入れる
- E列に通知日を書き込む
- 同じ日に同じ行を何度も通知しない
- createDeadlineReminderTrigger 関数で毎朝8時に実行する時間トリガーを作る
- タイムゾーンは Asia/Tokyo にする
これは地味ですが、かなり実務向きです。列構成だけ変えれば、契約管理、採用進捗、請求対応、研修提出物などにそのまま使えます。
レシピ7:週次 KPI レポートを PDF 化して関係者に送る
毎週の数字報告を、Sheets 集計 → PDF 化 → Gmail 下書き作成までつなげます。売上、問い合わせ数、商談数、採用応募数、SNS数値など、何でも週次レポートにできます。
Google Apps Script で、週次KPIレポートをPDF化して関係者に共有する仕組みを作ってください。
前提:
- スプレッドシートには RawData シートと WeeklyReport シートがある
- RawData は A: 日付, B: 指標名, C: 数値
- WeeklyReport はPDF化するレポート用シート
- 送信先メールは REPORT_RECIPIENTS 定数にカンマ区切りで入れる
要件:
- 関数名は generateWeeklyKpiReport
- 直近7日分の RawData を集計して WeeklyReport に書き込む
- WeeklyReport をPDFとしてDriveに保存する
- PDF保存先フォルダIDは REPORT_FOLDER_ID 定数にする
- GmailApp.createDraft を使って、PDF添付の下書きを作る。自動送信はしない
- 下書き件名は「週次KPIレポート yyyy-MM-dd」
- createWeeklyKpiReportTrigger 関数で毎週月曜9時に実行する時間トリガーを作る
- PDF URL と Gmail 下書き作成結果を console.log に出す
ここではあえて自動送信ではなく下書き作成にしています。数字の報告は一度人間が見たいことが多いので、「下書きまで作っておく」がちょうどいい落としどころです。
どのレシピでも、AI に追加でこう頼むと一気に自分の業務に寄ります。
今のコードを、うちのシート構成に合わせて直して。
シート名: ...
列: ...
保存先フォルダID: ...
通知先: ...
実行タイミング: ...
GAS の勘所は「何を自動化するか」よりも、どのデータを読み、どこに書き戻し、いつ実行するか です。ここを日本語で具体化できれば、コードの細部は Claude Code / Codex に任せやすくなります。
ハマりどころ 3 つ
自分が触ってきた範囲で、ハマるポイントはだいたい同じだったのでまとめておきます。
1. 初回 OAuth 承認の「安全ではないページ」
自分で書いた GAS を初めて実行するとき、「このアプリは確認されていません」「(プロジェクト名)に移動」「許可」の三段ダイアログを通る必要があります。Google が未審査のスクリプトに表示する標準の警告で、自分で書いたコードを自分のアカウントで動かす分には特に問題ありません。初回、または MailApp / DriveApp / UrlFetchApp など新しい権限が必要なサービスを追加したときに承認が出ます。
2. onOpen を変えたのに反映されない
Code.js を編集して clasp push したあと、スプレッドシートを リロードしない とメニューが更新されません。onOpen は「ファイルを開いた瞬間」にしか走らないためです。push 直後に F5 / Cmd+R を癖にしておくと事故が減ります。
3. アンダースコア終わりの関数名
doWork_() のように 末尾アンダースコア付き で書いた関数はサイレントに失敗します(GAS の文法で「プライベート扱い」になり、メニュー・トリガー・HTML ダイアログから呼べない)。同じ理由で const fn = () => {} のアロー関数代入 も GAS から見えないので、トリガーやメニューに繋ぐ関数は必ず function fn() {} で書く。動かないときはまず関数名を疑ってください。
まとめ
「毎月の手作業を 30 分減らす」みたいな地味な効率化が一番効くので、まずは自分の業務で一番面倒くさい繰り返し作業を 1 個、GAS に置き換えてみるところから始めるのが現実的だと思います。レシピ 1 〜 7 のどれかは、たぶんあなたの業務にもハマるはず。
clasp-skill-bundle.zip を社内に配って「これ叩いて、普段使っているAIツールで『○○を自動化して』と頼んでみて」と渡せば、非エンジニアの同僚も同じセットアップで合流できます。これでコピペ業務、ひとつ卒業できそうです。
関連記事
-
Claude Codeのskills機能でブログ執筆を自動化してみた — 今回使った
google-apps-scriptスキルの仕組み(Skill とは何か) -
属人化した暗黙知を形式知化するAIエージェントSkillsという仕組み —
clasp-skill-bundle.zipで配布したような「チームへのスキル共有」の話 - 【2026年3月リリース】Google公式CLI「gws」をClaude Codeに連携してGoogle Workspaceを自動操作する — GAS を介さず Gmail / Drive / Calendar を直接操作したい場合の選択肢


