PR
私が使っているPCガジェット類
作業環境で実際に使っている・気になっている周辺機器などをまとめました
※ 一部のリンクは広告(アフィリエイト)を含みます
作業環境で実際に使っている・気になっている周辺機器などをまとめました
※ 一部のリンクは広告(アフィリエイト)を含みます
スプレッドシートを自動で書き換えるツールを作ってもらったのに、動かすためにスプレッドシートの設定とAPIの秘密鍵を用意してくださいと言われたことはありませんか?
私は経験ありです(言う側で)
ただ手順を聞いても Google Cloud だのサービスアカウントだの聞き慣れない言葉が並んでいて、ちょっと敷居が高いんじゃないかと思います
でも、やることは5つだけで1つずつ見ていけばそんなに難しい話じゃありません
Google Cloud のコンソールで①プロジェクトを作る → ②APIを有効にする → ③サービスアカウントを作る → ④秘密鍵のJSONをダウンロードする → ⑤スプレッドシートを共有する、この順番に進めば完了です
今回はこの5手順を紹介します
秘密鍵(サービスアカウントキー)は、プログラム専用のGoogleアカウントに発行されるパスワード代わりのファイルです
その専用アカウントを Google は「サービスアカウント」と呼んでいて、早速の横文字に抵抗を感じますがその名の通りただのアカウント(≒メアド)だと思ってもらえれば大丈夫
プログラムがスプレッドシートを操作するは、いつも使っているアカウント(≒Gmailアカウント)ではなくてこのサービスアカウントで行うことになります
後述しますが、プログラムに読み書きしてほしいスプレッドシートには、そのサービスアカウントを共有設定しておく必要が出てきます
サービスアカウントと秘密鍵は、どちらも Google Cloud の「プロジェクト」という箱の中に作られます
プロジェクトを作った人が、そのプロジェクトのオーナーになります


では、開発者など誰か他の人に作ってもらえないのでしょうか?
開発者側のアカウントで作った鍵でも、もちろん技術的には動きます
ただしそれだと、鍵の管理を開発者に握られてしまい、もし無効化されてしまうと何も操作できなくなって別の開発者にまた鍵の作成を依頼することになってしまいます
だから自分のツールとして使い続けるなら、シートを持っている人のGoogleアカウントで作るのが鉄則です
自分で操作するのが不安なら、画面共有しながら(よりもこの記事を見てもらって・・)本人のアカウントで進めるのが現実的で、GoogleアカウントのIDとパスワードを預けて代わりに作ってもらう形はアカウントごと預けることになるのでもっと避けたいところです
全体の流れはこんな並びで、APIの反映待ちを入れても全部でだいたい15分ほど
| 順番 | やること | 開く画面 | 私の手元での目安 |
|---|---|---|---|
| 1 | プロジェクトを作る | Google Cloud コンソール | 3分 |
| 2 | Google Sheets API と Google Drive API を有効にする | APIライブラリ | 3分 |
| 3 | サービスアカウントを作る | IAMと管理 | 3分 |
| 4 | 秘密鍵のJSONをダウンロードする | 認証情報 / サービスアカウント | 2分 |
| 5 | スプレッドシートを共有する | スプレッドシートの共有ダイアログ | 1分 |
ジャベ雄Google Cloud の画面は大量のメニューがありますが、やることは明確なので順番に進めてください
コンソールへのアクセスは https://cloud.google.com/ から
初めてのアクセスの時は「無料で利用開始」をクリックしたくなりますが、無料トライアル(カード登録)の申し込み画面に進むので、コンソールから入るほうが手順が少ないです
※画面写真は2026年9月現在なので、細かい見た目は変わっているかもしれません
セルの読み書きを担当するのが Google Sheets API、スプレッドシートというファイル自体を名前で探したり一覧するのが Google Drive API の担当
今回はこの2つを有効にします(どちらも有効化は無料)
ツールがURLやIDで直接シートを開くだけなら Drive API なしでも大丈夫
ただ有効化そのものにお金はかからないので、両方まとめて入れておくほうが確実です
有効化しただけでは何も起きませんし、料金も発生しません
Google Sheets API と Google Drive API は、標準的な利用範囲なら追加料金なしです
Sheets API の上限は読み取り・書き込みそれぞれ1プロジェクトあたり300リクエスト/分、1ユーザーあたり60リクエスト/分
この1分あたりの枠に収まっていれば、1日の上限はありません(Sheets API の使用量の上限)
ただし2026年9月時点の公式の日本語ページには、割り当てリクエストの上限を超えた分について2026年後半に Google Cloud の請求先アカウントへ料金が発生する予定と書かれています
数千行を読み書きする程度なら届かない数字ですが、大量にアクセスするツールなら開発者に確認しておくといいと思います
開始日や単価は公式ページのほうで確認してください
Drive API など一部のAPIは、2026年5月以降に作ったプロジェクトから割り当ての数え方が変わっています
自分でコードを書く人は、公式の上限表を一度見ておくと話が早いです
サービスアカウントを作ると 〜@〜.iam.gserviceaccount.com という形のメールアドレスが発行されます
そのアドレスに対して秘密鍵のJSONを1つ作り、あとでスプレッドシートを共有する相手として使う流れ
作成そのものは、名前を1つ決めるだけで終わります
ちょっと手数が多いのは、むしろ鍵を作る画面までの移動のほう
次に出てくる「権限」と「アクセス権を持つプリンシパル」は、1つ前の画面写真にもあるとおり「省略可」の項目で、今回のようにAPIを利用するだけの目的なら省略でOK
ここは何も選ばずに「続行」→「完了」で先に進んでください
ファイル名はプロジェクトIDと英数字をつないだ形で、test-project-9016-xxxx.json みたいな感じで付きます
ファイルを右クリック →「プログラムから開く」→ メモ帳(Mac ならテキストエディット)で開くと、こういう10行ほどのJSONが入っています
{
"type": "service_account",
"project_id": "PROJECT_ID",
"private_key_id": "KEY_ID",
"private_key": "-----BEGIN PRIVATE KEY-----\nPRIVATE_KEY\n-----END PRIVATE KEY-----\n",
"client_email": "SERVICE_ACCOUNT_EMAIL",
"client_id": "CLIENT_ID",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://accounts.google.com/o/oauth2/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/SERVICE_ACCOUNT_EMAIL"
}大文字の部分に入るのは、プロジェクトごとの固有の値で、項目や値は時期によって少し変わります
このうち共有に使うのは client_email の値(〜@〜.iam.gserviceaccount.com の形)だけで、private_key が秘密の本体なので人に見せません



鍵の名前を用途で付けておくと、あとで消すときに迷いません
共有する相手は、さきほどのJSONに入っていた client_email のアドレスです
人を招待するときと同じ「共有」ボタンから、そのアドレスを追加するだけ
スプレッドシートを先に作成して共有します
APIでは既にあるスプレッドシートを操作することになるので先に準備しておいてください
ダウンロードしたJSONをメモ帳などで開き、client_email の値をコピー
コンソールのサービスアカウント一覧にも出ているアドレスなので、そちらからコピーしても構いません
会社の Google Workspace アカウントで「組織外のユーザーとは共有できません」のようなメッセージが出る場合(表記は環境で変わります)は、管理者側の外部共有の設定が原因です
外部共有を許可リスト方式にしている会社だと、そのままでは通りません
公式にも「gserviceaccount.com で終わるサービスアカウントは信頼できるドメインとして使えない」と書かれているためです
情報システム部門に相談する案件なので、共有したいシートの範囲を添えて聞いてみてください
動いていたツールが急に403で止まった、という場合もここが原因のことがあります(外部共有をオフにすると、過去に共有したファイルへのアクセスも切れます)
共有まで済んだら、ちゃんと動くか確かめてみましょう
ツールを受け取った側は、渡された起動方法でツールを実行して、シートが更新されれば完了です
自分でPythonを書く人向けに、鍵と共有が合っているかを確かめる最短のコードも置いておきます
事前に pip install gspread を1回だけ実行してください(gspread が認証用の google-auth も一緒に入れてくれます)
import gspread
# ダウンロードした秘密鍵(JSON)のパス
gc = gspread.service_account(filename="spreadsheet-editor-xxxxxxxx.json")
# 共有したスプレッドシートを URL で開く
sh = gc.open_by_url("https://docs.google.com/spreadsheets/d/xxxxxxxxxxxxxxxxxxxxxxxx/edit")
ws = sh.sheet1
print(ws.get_all_values()) # 中身が表示されれば成功JSON はスクリプトと同じフォルダに置くか、フルパスで書きます(Windows なら r”C:\Users\ユーザー名\Downloads\spreadsheet-editor-xxxxxxxx.json” のように先頭に r を付けたraw文字にすると、パスの \ でつまずきません)
gspread の最新安定版は 6.2.1(2025年5月14日リリース、2026年9月時点)、対応するPythonは 3.8 以上
認証の書き方は gspread 公式の認証ページ があるので参考にしてみてください
私がハマったので備忘的に・・・
ほぼ共有し忘れです
私の手元で試してみたところ、共有する前に実行するとこんなメッセージで止まりました(表記は変わることがあります)
例外が発生しました: PermissionError
{'code': 403, 'message': 'The caller does not have permission', 'status': 'PERMISSION_DENIED'}
gspread.exceptions.APIError: {'code': 403, 'message': 'The caller does not have permission', 'status': 'PERMISSION_DENIED'}
The above exception was the direct cause of the following exception:
File "C:\Users\xxxx\Desktop\python\sample.py", line 9, in <module>
sheet = gc.open_by_url('https://docs.google.com/spreadsheets/d/xxxxxxxxxxxxxxxxxxxxxxxx/edit#gid=0').worksheet('テストシート')
PermissionError: 「SpreadsheetNotFound」(スプレッドシートが見つかりません)で止まる場合も、原因は同じ共有し忘れです
共有ダイアログを開いて、client_email のアドレスが一覧に入っているか確認してください
書き込みで失敗するなら、権限が「閲覧者」のままかもしれません
「Google Sheets API has not been used in project … before or it is disabled」のような文言なら、APIを有効にしていないか、別のプロジェクトで作った鍵を使っているかのどちらかです
私が API を有効にしていないプロジェクトの鍵で試したときの実物がこちら(表記は変わることがあります)
例外が発生しました: PermissionError
APIError: [403]: Google Sheets API has not been used in project 123456789012 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/sheets.googleapis.com/overview?project=123456789012 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.
gspread.exceptions.APIError: APIError: [403]: Google Sheets API has not been used in project 123456789012 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/sheets.googleapis.com/overview?project=123456789012 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.
The above exception was the direct cause of the following exception:
File "C:\Users\xxxx\Downloads\test.py", line 7, in <module>
sh = gc.open_by_url("https://docs.google.com/spreadsheets/d/xxxxxxxxxxxxxxxxxxxxxxxx/edit")
PermissionError: メッセージの中の project= に続く12桁の数字が、鍵が属しているプロジェクトの番号です
そのリンクをそのまま開くと、そのプロジェクトの Sheets API の有効化ページに飛べるので、そこで「有効にする」を押すのがいちばん早い直し方
有効化したはずなのに出るときは、鍵JSONの project_id が別のプロジェクトになっていないか見比べてみてください
ちゃんと有効になっていても、有効化した直後は反映に数分かかることがあるので、少し待ってから再実行してみてください
権限の画面を省略したこの記事の作り方なら、秘密鍵を使って操作できるのはサービスアカウントに共有したファイルだけです
日頃から利用しているGoogleアカウント本体やGmail、共有していない他のシートはもちろん操作できないので安心
ただ、共有したシートに対してパスワードなしで読み書きできる鍵
セキュリティ的にも保管場所は限定して、メール添付やチャットへの貼り付け、クラウド同期のフォルダとかも避けたいところ
ツールを自分のパソコンで動かすなら、開発者に鍵を渡す必要はありません
開発中は開発者に自分のテスト用の鍵を準備してもらうか、本番で使う鍵と別で開発用に一時利用する鍵を渡せばOK
どうしても開発者側のサーバーで動かす運用にするなら専用の鍵を作ってちゃんと操作ログを追えるようにしたいですね
ちなみに鍵の有効期限は既定で無期限、会社の Google Cloud だと組織ポリシーで期限が付くことがあります
1つのサービスアカウントに作れる鍵は最大10個までです
手順は「IAMと管理」→「サービスアカウント」→ 対象のアカウント →「キー(鍵)」タブ → 該当の鍵を削除、そのあと新しい鍵を作ってツールに差し替えるだけです
削除するとその鍵では新しく認証できなくなります(反映に少し時間がかかることがあります)
ちなみに GitHub や GitLab の公開リポジトリに鍵JSONを上げてしまうと、2024年6月16日から Google 側が検知して自動で無効化する仕組みが既定で動いているそうです(そもそもそんなミスしないようにしてるので経験ありませんが・・)
「Key creation is not allowed on this service account.」のようなメッセージで鍵の作成が止まる場合は、組織のポリシーで禁止されています
2024年5月3日より後に作られた組織だと、鍵の作成を止める設定が最初から入っているためです
制約の名前は constraints/iam.managed.disableServiceAccountKeyCreation(旧表記は constraints/iam.disableServiceAccountKeyCreation)
個人のGoogleアカウントで作ったプロジェクトなら、この制限にはまず当たりません
会社のアカウントで出たなら、自分では解除できないので Google Cloud の管理者(情報システム部門)にお願いしてみてください
Google カレンダーや Google ドライブに対してツールで操作したい時も、APIを有効にする → サービスアカウントに共有するの同じ考え方で使えます
コンソールで触る場所も、プロジェクト・APIライブラリ・サービスアカウントの3か所で変わりません
ドライブも同じで、フォルダやファイルは手動で作って、サービスアカウントは許可(共有)された範囲で操作することになります
当然それぞれの所有者は利用している人(=オーナー)になるのでサービスアカウント自身が所有者になる作り方はできません
ここまでの作業でツールに読み込ませるのは、JSONファイル1つと共有したシートのURLだけです
抜けやすいところを並べておくので、順番に確かめてみてください
鍵の用意と共有だけは、どうしても利用者側の作業として残ります
逆に言えばここが終われば、あとはツールを起動するだけの状態です
スプレッドシート連携のツールそのものを作ってほしい、という相談も受けているので、必要なときは気軽に声をかけてください



一度通しておけば、2回目からは迷わずに済みます
APIのトークンや鍵を Python から扱う書き方は、Chatwork通知の記事でもう少し具体的に書いています


PythonとExcelを中心に仕事に役立つ業務ツールや自動化、スクレイピングツールの作成を受注していて、クラウドワークスでは気が付けば100件以上のお仕事を受注してきました!
会社員をやりながらの副業なので時間の捻出は相応ですが、クライアントの方々と近い立場でこちらからも提案しながら活動していますのでお悩みあれば是非ご相談ください
VBAとPythonを中心にユーザー側でできるITを自己学習しているので備忘録半分、学習履歴を残して同じ道を辿る人の参考になればとブログを始めました
副業でスクレイピングツール作成を中心にできることを色々やっていますのでご相談いただけるとありがたいです!
クラウドワークスのページへ
ココナラのページへ
コメント