Googleスプレッドシートをアプリに接続する方法
アプリをGoogleスプレッドシートに接続するには、Google CloudプロジェクトでGoogle Sheets APIを有効にし、サービスアカウントを作成し、そのサービスアカウントのメールアドレスにスプレッドシートを共有し、そのキーをサーバー側のシークレットとして保存します。サーバーは、spreadsheets.values.getで行を読み取り、spreadsheets.values.appendで行を追加します。ユーザーが自分のシートを接続する必要がある場合は、代わりにOAuthを使います。シートが完全に公開されている場合は、読み取りだけであれば単純なAPIキーで十分です。
このガイドでは、どの方法が適しているか、必要な呼び出し、上限と注意点、そしてAIアプリビルダーへのプロンプトを扱います。Googleの詳細は、2026年9月時点のGoogle開発者ドキュメントに基づきます。
そもそもシートを接続する理由
よくある理由は次のとおりです。
- チームの作業フローを維持する。 スタッフが価格表やスケジュールをスプレッドシートで編集し続け、アプリがそれを表示します。
- 人がすでに見ている場所でデータを集める。 新規登録、注文、フォームの回答が行として届きます。
- レポート作成。 アプリのデータを、スプレッドシートで仕事をしている人のためにエクスポートします。
- 次のステップへの足がかり。 スプレッドシートから始めて、本格的なデータベースへ移行します。スプレッドシートをアプリにする方法を参照してください。
Googleへの認証方法を選ぶ
Googleの認証情報のガイドでは、3種類が説明されています。
| 認証情報 | アクセスできる範囲 | 最適な用途 |
|---|---|---|
| APIキー | 公開されているデータのみ(「リンクを知っている全員」と共有されたファイルなど) | 公開シートの読み取り |
| サービスアカウント | アプリが所有するデータ、またはサービスアカウントのメールアドレスと共有された特定のファイル | アプリがご自身のシートを読み書きする |
| OAuthクライアントID | ユーザーが同意した、そのユーザー自身のファイル | 各ユーザーが自分のシートを接続できるようにする |
ほとんどのアプリでは、サービスアカウントが適しています。認証情報は1セットで、ご自身が所有し、明示的に共有したシートだけにアクセスできます。
サービスアカウントを使った手順
- Google Cloudプロジェクトを作成または選び、Google Sheets APIを有効にします。
- サービスアカウントとそのキーを作成します。キーはJSONファイルです。パスワードと同じように扱ってください。
- スプレッドシートを、サービスアカウントのメールアドレスと共有します。読み取り専用なら閲覧者、書き込むなら編集者として共有します。Googleのガイドでは、これは通常の共有画面から行うとされています。
- キーをサーバーのシークレットとして保存します。例:
GOOGLE_SERVICE_ACCOUNT_JSONと、スプレッドシートID(シートのURLにある長い文字列)をSHEET_IDとして保存します。 - 使用する言語のGoogleクライアントライブラリで、サーバーからAPIを呼び出します。
- 多くの訪問者が同じデータを見る場合は、読み取りをキャッシュして、上限に達しないようにします。
使う呼び出し
Googleの値の読み書きガイドより:
| メソッド | 働き |
|---|---|
spreadsheets.values.get | Leads!A1:Eのような1つの範囲を読み取る |
spreadsheets.values.batchGet | 1回のリクエストで複数の範囲を読み取る |
spreadsheets.values.update | 特定の範囲に書き込む |
spreadsheets.values.append | 表の既存データの後ろに行を追加する |
範囲はA1表記で指定します。Googleは、A1:B2のようにシート名を含まない範囲は最初のシートに適用されると注意しています。そのため、誰かがタブの順番を変えたときの予想外の動作を避けるため、タブ名を明示してください。
RAWとUSER_ENTERED
書き込みにはvalueInputOptionが必要です。
- RAWは、送信したとおりのものをテキストとして保存します。
=1+2はテキスト=1+2として保存されます。 - USER_ENTEREDは、入力がシートに直接打ち込まれたかのように扱います。日付は日付になり、
=1+2は数式になります。
アプリのユーザーが入力したテキストを書き込む場合は、RAWを使ってください。USER_ENTEREDでは、誰かが数式を送信すると、同僚がシートを開いたときにそれが実行されるおそれがあります。
上限とエラー
2026年9月時点で、Googleのシートの上限ページには次の値が記載されています。
| 上限 | 読み取りリクエスト | 書き込みリクエスト |
|---|---|---|
| プロジェクトごと・毎分 | 300 | 300 |
| ユーザーごと・プロジェクトごと・毎分 | 60 | 60 |
毎分の上限内に収まっている限り、1日あたりの上限はありません。超えると429: Too many requestsが返されます。Googleは切り捨て指数バックオフを推奨しています。失敗するたびに待ち時間を長くし、ランダムな遅延を加えて、最大値まで待つ方法です。1回のリクエストが180秒を超えると、タイムアウトします。
実際には、ページを表示するたびにAPIを呼び出さないでください。シートのデータを1分以上キャッシュし、batchGetで読み取りをまとめ、可能なら書き込みもまとめてください。
選択肢とトレードオフ
| 方法 | 長所 | 短所 |
|---|---|---|
| ライブのデータソースとしてシートを使う | スタッフが使い慣れたツールで編集できる。管理画面を作る必要がない | 上限がある。行ごとの権限がない。列名を変えるだけで壊れやすい |
| シートをデータベースに同期する | 読み取りが速く信頼できる。Sheetsが停止してもアプリは動く | 同期ジョブと、どちらが優先されるかのルールが必要 |
| データベースを先に使い、シートにエクスポートする | アプリがデータを所有する。シートはレポートになる | シートでの編集はデータベースに戻らない |
| 間にオートメーションツールを挟む | 単純な流れならコードは不要 | 別のサブスクリプションが必要。デバッグが難しい |
多くのユーザーや機密データを扱う場合は、データベースの方が信頼できる情報源です。データベースとはを参照してください。
AIビルダーに与えるプロンプト
シートを読み取る場合:
当社のGoogleスプレッドシートの「Menu」タブを、メニューページに表示してください。サーバーからGoogle Sheets APIを使い、JSONキーがシークレットGOOGLE_SERVICE_ACCOUNT_JSONに、スプレッドシートIDがSHEET_IDに保存されたサービスアカウントで認証してください。範囲Menu!A2:D(名前、説明、価格、カテゴリ)を読み取ってください。結果は5分間キャッシュしてください。APIが失敗した場合は、最後にキャッシュされたバージョンを表示してください。キーは決してブラウザに送らないでください。
行を書き込む場合:
お問い合わせフォームが送信されたら、データベースに保存するとともに、「Leads」タブに行を追加してください(日付、名前、メール、メッセージ)。spreadsheets.values.appendをvalueInputOption RAWで使ってください。Googleが429を返したら、指数バックオフで再試行してください。それでも失敗する場合は、リードをデータベースに保持し、後で再試行してください。
よくある間違い
- サービスアカウントのメールアドレスにシートを共有し忘れる。 キーは正しくても、APIが権限エラーを返します。
- キーをフロントエンドやリポジトリに置く。 JSONキーは、そのキーと共有されたすべてのシートへのアクセス権を持ちます。APIキーを安全に保つ方法を参照してください。
- ユーザー入力にUSER_ENTEREDを使う。 数式の注入が起こり得ます。
- すべてのリクエストでAPIを呼び出す。 最初のトラフィックのピークで毎分の上限に達します。
- 列の位置に依存する。 誰かが列を挿入すると、アプリが誤ったデータを読みます。ヘッダー行を読み取って名前でマッピングするか、ヘッダーを固定してください。
- 必要以上にシートを公開する。 「リンクを知っている全員」にすると、公開状態になります。
- 複数ユーザーのデータベースとしてシートを使う。 同時書き込みや権限の欠如により、データが失われたり漏えいしたりします。
チェックリスト
- Sheets APIを有効にし、サービスアカウントを作成した
- 必要最小限の役割で、シートをサービスアカウントのメールアドレスと共有した
- キーとシートIDをサーバー側のシークレットとして保存した
- すべての呼び出しをサーバーから行っている
- 範囲でタブ名を使っている
- ユーザーが入力したテキストにはRAWを使っている
- 読み取りをキャッシュし、429をバックオフで処理している
- Sheetsが利用できなくてもアプリが適切に動く
- どちらが信頼できる情報源かを決めた
MythexでのGoogleスプレッドシート
Mythexでは、Sheetsと連携する方法が2つあります。コネクタは、ご自身のGoogleアカウントをMythexに接続し、構築中にエージェントが使えるようにします。たとえば、シートを読み込んでそこからダッシュボードを作ることができます。ドキュメントによると、認証情報はMythexの接続サービスに保持され、コードには一切入りません(コネクタを参照し、Googleが求めるすべての権限を承認してください)。公開済みのアプリが単独でシートを読み書きする場合、確実な方法は、このガイドの方法です。つまり、サービスアカウントのキーをプロジェクトのシークレットとして保存し、サーバーからSheets APIを呼び出します(任意のAPIを統合するを参照)。シートでは足りなくなってきたら、エージェントに依頼してデータをプロジェクトのデータベースに移し、その上にダッシュボードを構築してください。
よくある質問
アプリから非公開のGoogleスプレッドシートを読むにはどうすればよいですか?
一般的な方法は、Google Cloudのサービスアカウントを使うことです。Google Sheets APIを有効にし、サービスアカウントとそのキーを作成したら、スプレッドシートをサービスアカウントのメールアドレスに閲覧者または編集者として共有します。サーバーがシークレットとして保存したキーを使って、Sheets APIを呼び出します。
Google APIキーでスプレッドシートにアクセスできますか?
公開されているデータに限られます。Googleの認証情報のガイドでは、APIキーは、リンクを知っている全員と共有されたファイルなど、公開で利用可能なデータへの匿名アクセス用とされています。非公開のシートにはサービスアカウントかOAuthが必要です。
Google Sheets APIの上限はどのくらいですか?
2026年9月時点で、Googleはプロジェクトごとに毎分300回の読み取りと300回の書き込み、ユーザーごと・プロジェクトごとに毎分60回ずつの読み取りと書き込みを挙げており、1日あたりの上限はありません。上限を超えると429エラーが返されます。Googleは、切り捨て指数バックオフの利用を推奨しています。
Googleスプレッドシートをアプリのデータベースとして使ってよいですか?
データを編集するユーザーがスプレッドシートも直接編集するような、小規模で利用の少ないアプリなら機能します。ユーザーが多い場合、頻繁な書き込みがある場合、レコード同士の関連がある場合、またはユーザーごとの権限が必要な場合は、本格的なデータベースの方が信頼性が高くなります。それでもスプレッドシートへのエクスポートは可能です。