AI駆動開発··10min read

GoogleスプレッドシートをAIで自動化する手順【GASを使わず定期実行まで】

GoogleスプレッドシートClaude Code業務自動化非エンジニア
GoogleスプレッドシートをAIで自動化する手順【GASを使わず定期実行まで】

共有スプレッドシートで未対応の案件を集計中、誰かが入力を変えてやり直す。AIに関数を聞けても、確認と転記が毎日残ります。僕が開発・運営するVibelyも、ShiftBの社内ツールから始まり、教材管理や進捗管理を社内で使ってから外部へ提供したサービスです。

この記事では、Claude Codeに集計プログラムを書いてもらい、Googleスプレッドシートから読み取り、別ファイルへ結果を出し、定期実行する手順を説明します。GASを使わない構成ですが、プログラムや接続設定が不要になるわけではありません。

この記事を書いた人:立川修平(ぶべ)

  • ShiftB校長。非エンジニアがAIで作る側になるための学習をサポート
  • 社内ツールから始めたオンラインスクール向けSaaS「Vibely」を開発・運営
  • AI駆動開発と、身近な課題からアプリを作る方法を発信

手順1:共有シートで自動化する作業を絞る

GASの代わりにAIを使う、という言葉を分けて考える

GAS(Google Apps Script)は、Googleのサービスをプログラムで操作する実行環境です。Claude Codeは、そのプログラムを書く作業を手伝う道具。AIにGASを書いてもらう方法もあります。社内にGASの管理方法があるなら、無理に置き換える必要はありません。

今回はPythonという言語で集計処理を作り、Sheets APIという読み書きの窓口につなぎます。金額はプログラムが計算します。AIは作成・修正に使い、集計時には呼び出しません。

人が入力する場所と、自動処理が更新する場所を決める

題材は、架空の共有案件表から未対応の見込額を部署別に集計する業務です。入力ファイルは人が編集し、自動処理は読み取るだけ。結果は別の出力ファイルに書きます。

Excelファイルの取りまとめが中心なら、Excel作業のAI自動化手順を参照してください。本記事は共有権限と共同編集に重点を置きます。集計を常に最新と呼ばず、「いつ取得した値の結果か」を残します。

入力は閲覧のみ、集計結果は別ファイルへ。取得時刻を残し、同時実行と重複を防ぐ

手順2:入力と出力を分けて接続権限を設定する

テスト用ファイルと、処理専用のアカウントを用意する

架空データで始めます。社内の接続許可を確認し、Google Cloudで作業用プロジェクトを選び、Google Sheets APIを有効にします。続いて「IAMと管理」の「サービスアカウント」から、プログラム専用のアカウントを作成します。

作成されたメールアドレスを、入力ファイルの「共有」に閲覧者として追加し、別に作った出力ファイルには編集者として追加します。Googleの認証情報の作成手順でも、特定のファイルへのアクセスは個別共有で設定できると案内されています。組織全体の代理権限は不要です。

同じファイル内でタブだけ分ける方法は採りません。Sheets APIのアクセス範囲の仕様はファイル単位で、特定のタブだけに限定できないためです。読み書き用の操作範囲(スコープ)を設定しても、入力ファイル側の共有権限は閲覧者のままにします。共有できない場合は、リンクを一般公開して回避せず、管理者に接続方法を確認します。

接続用の鍵を、コードやAIへの依頼文に混ぜない

接続には認証情報が必要です。組織で鍵を使わない認証が用意されているなら、その方式を利用します。ここでは、社内で発行・保管を許可されたJSON鍵を使います。サービスアカウントの「キー」から作成し、ダウンロードしたファイルを作業フォルダの外へ保管します。Googleは鍵の管理指針で、不要な鍵の作成やソースコードへの混入を避けるよう求めています。

Claude Codeには鍵の内容を貼らず、プログラムが起動時に認証情報を読む設計だけを依頼します。ファイルIDはURLの「/d/」と「/edit」の間にある識別子です。入力と出力が同じIDなら停止させます。入力タブを「案件」、出力タブを「集計」にします。

Claude Codeのデータの扱いは契約や設定によって異なります。手元で使う道具でも、渡した内容が外部へ送られないとは限りません。題材、接続先、触ってよい範囲を整理するところで止まるなら、AIシフトコースの相談会で、今の業務からどこを作り始めるかを相談できます。

AI時代のアプリ開発コース

ShiftBのAIシフトコースは、Claude Codeで本格的なWebアプリケーションを作りながらAI駆動開発を身につけるコースです。ただ作って終わりではなく、コードを読め、セキュリティに責任を持って提案でき、要件定義などの上流工程まで担えるところまで現役エンジニアがサポートします。

AIシフトコースを見る →

手順3:Claude Codeに集計プログラムを作ってもらう

「いい感じに集計して」を、入力と出力の条件へ変える

Claude Codeの準備がまだなら、インストールからの使い方を先に確認します。作業用フォルダを開き、まず実装前の計画を頼みます。悪い依頼は「共有シートを毎朝いい感じに整理して」。並べ替え・削除・上書きの範囲が不明です。

架空の案件表を部署別に集計するPythonプログラムを作りたいです。
まず実装せず、準備・読み書き先・検証方法を説明してください。
入力は指定ファイルの「案件」タブA:D。先頭行は案件ID、部署、見込額、状態。
IDは空欄不可・重複不可。部署は営業か企画。金額は円の0以上の整数。
状態は未対応か完了。未対応だけを部署別に合計し、0円も件数に含める。
完全な空行は無視。それ以外の空欄、未知の値、列名の不一致は行番号付きで停止。
入力を変更せず、別ファイルの「集計」タブA1:C8だけを更新する。
出力は部署別合計、総額、読込・採用・除外件数、取得時刻。
金額は数値とし、文字の金額は補正しない。
接続前に架空データで試す。

部署を増やすなら出力の行数も含めて仕様を直します。「不明な部署はその他へ」とAIが補ったら要確認。入力ミスを黙って集計に含めないことが狙いです。

集計部分を分け、書き込み前に結果を見られるようにする

確認した仕様でsync_sheets.py、requirements.txt、テスト、README.mdを作ってください。
google-api-python-clientとgoogle-authを使い、導入手順と使用版を記録。
認証は環境変数SHEETS_CREDENTIALS_JSONから読み、内容を表示しない。
入力と出力のファイルIDも環境変数から読み、同一なら停止。
取得した値を検証・集計し、途中で読み直して混ぜない。
取得はUNFORMATTED_VALUE、出力はRAW。AI APIは呼ばない。
--dry-runでは計算結果だけを表示し、書き込みはしない。
通常実行は検証成功時だけ、空欄で埋めた8行3列をA1:C8へ一括更新する。
appendや、先に出力を空にする操作は使わない。入力への書き込み機能は作らない。
API失敗時は成功扱いにせず終了。秘密値・入力の全件をログに出さない。

UNFORMATTED_VALUEは、表示用の「12,000円」ではなく、計算された値を取得する指定です(読み取りAPI)。数式の結果も対象になるため、入力側の数式が意図どおりかは別に確認します。RAWは、文字を数式などとして解釈させず書く指定です(書き込みの公式例)。

毎回末尾へ追加すると結果が重複します。同じ範囲を置き換え、該当案件のない部署も0円と出し、余ったセルは空欄にします。Pythonの仮想環境に部品を入れ、接続なしのテストから始めます。認証情報を手元で環境変数へ読み込む手順もREADMEに記載させます。

手順4:合計・再実行・共同編集を確かめる

架空データで、金額と件数を別々に照合する

以下は練習用の5件です。金額は数値で入力します。数値は架空例の期待値です。

案件ID部署見込額(円)状態
A01営業12,000未対応
A02企画8,000未対応
A03営業3,000完了
A04企画0未対応
A05営業5,000未対応

正解は営業17,000円、企画8,000円、総額25,000円。読込5件、採用4件、除外1件です。A04を空欄と誤判定すると、金額は合っても件数がずれます。まずpython sync_sheets.py --dry-runで照合し、一致したら通常実行で出力を確認します。再実行しても金額や行数は増えず、取得時刻だけが変わることを確認します。

共同編集は止められない前提で、更新時点を明示する

入力のコピーでA05を完了に変えると、営業12,000円、総額20,000円、採用3件、除外2件になります。ID重複、金額の空欄、列名変更も試し、エラー時に前回の出力が保たれるか確認します。失敗時は前回の数字が残ります。取得時刻と実行結果を併せて見ます。

読み取りが終わった直後に同僚が編集しても、その変更は今回の集計には入りません。ファイルを分けるだけで取引全体が固定されるわけではなく、締めの数字が必要なら入力締切と確定作業を別に設けます。出力側は自動処理専用にし、人の注記は別タブへ置きます。人とプログラムが同じセルを編集する運用は避けます。

権限、例外、古い結果の見分け方まで説明できると、同僚へ渡しやすくなります。エラー時の判断が難しい人は、AIシフトコースでプログラムの読み方や検証の基礎を学び、仕事で使う範囲を広げられます。

AI時代のアプリ開発コース

ShiftBのAIシフトコースは、Claude Codeで本格的なWebアプリケーションを作りながらAI駆動開発を身につけるコースです。ただ作って終わりではなく、コードを読め、セキュリティに責任を持って提案でき、要件定義などの上流工程まで担えるところまで現役エンジニアがサポートします。

AIシフトコースを見る →

手順5:GitHub Actionsで定期実行する

手動実行が通ってから、クラウドの時刻指定を有効にする

PCを閉じている間にも動かす例として、GitHub Actionsを使います。GitHubはコードの保管場所、Actionsはそこで処理を動かす機能です。会社で利用できる非公開リポジトリ(コードの保管領域)に、プログラムと説明書を登録します。鍵、実データ、出力ログは含めません。利用枠・料金も確認します。

認証情報はリポジトリのSettingsからSecrets and variables、Actionsへ進み、SHEETS_CREDENTIALS_JSONというSecretに登録します。入力・出力IDはそれぞれINPUT_SPREADSHEET_IDとOUTPUT_SPREADSHEET_IDとして設定します。Secretsの公式手順に従い、実行時の環境変数へ渡します。秘密を扱う実行手順を書き換えられる人も限定してください。

このプログラムをGitHub Actionsで動かすsheets.ymlを作ってください。
配置先は.github/workflows/。最初はworkflow_dispatchで手動実行だけ。
Pythonの準備、requirements.txtの導入、テスト、集計の順に実行。
認証情報とファイルIDは登録済みSecretsから環境変数へ渡す。
出力先ごとに固定のconcurrency groupを使い、cancel-in-progressはfalse。
同じ出力先を更新する手動・定期実行で同じgroupにする。
公式Actionsの使用版を確認し、参照をコミットSHAに固定。
手動確認後に、平日08:17、timezone: Asia/Tokyoのscheduleを追加。
失敗の通知設定、停止方法、鍵の交換手順もREADMEへ書いてください。

08:17は練習用の設定例です。GitHubの定期実行仕様では、時刻帯を省略するとUTCになり、設定ファイルはデフォルトブランチに必要です。混雑時には遅延や実行の欠落もあり得るため、指定分ぴったりの実行保証として使いません。Actions画面から手動実行し、成功表示とシートの取得時刻・合計が一致してから予定を有効にします。

二重起動と失敗を、担当者が見つけられる形にする

concurrencyは同じグループの同時実行を制限する設定です。PCからの実行や人のセル編集は止めません。定期運用へ移したら、更新は同じActionsに集約します。各実行が始まってから入力を取り直します。

Sheets APIには利用上限があり、超えると429エラーになります。公式の制限と再試行の説明を基に、待ち時間を延ばしながら回数を限って再試行するよう依頼します。書き込みの成否が不明なら、先に出力を照合します。再試行に使う値は同じ実行の計算結果に固定し、別の読取結果と混ぜません。

最後に、誰が失敗通知を見るか、更新が止まった日にどう手動確認するかを決めます。Actionsの停止方法だけでなく、ファイル共有の解除や不要な鍵の無効化も説明書へ残します。架空データで合計と再実行を確認できたら、自分の部署の例外をひとつずつ加えてください。

この記事をAIと深掘りする

要約・疑問の解消に。記事のタイトル・URL・参照元を入れた質問文が自動で入力されます。

AUTHOR

立川修平(ぶべ)

ShiftB 校長 / bubekichi inc. 代表

ShiftBを運営する株式会社bubekichiの代表。経理系SaaSの企業でエンジニアを経験後、独立・起業。複数スタートアップでリードエンジニアを務めながら、SNS発信がきっかけで2024年にShiftBを立ち上げる。現在は自社サービスも複数展開中。

RELATED ARTICLES

関連記事

COURSE

AI時代のアプリ開発コース

ShiftBのAIシフトコースは、Claude Codeで本格的なWebアプリケーションを作りながら学ぶコースです。コードを読め、セキュリティに責任を持って提案でき、要件定義などの上流工程まで担える状態を目指します。まずは無料相談会でご相談ください。