🐍

gspread で Python から Google スプレッドシートを扱えるようにするまで

2022/09/01に公開

記事概要

Python から Google スプレッドシートを操作するアプリケーションを作成する機会があったので、必要な設定などを備忘のため記事化したものです。

本記事では、以下のようなスプレッドシートを用意して、対象シートのすべての値を取得する所まで実施します。

print(spreadsheet.sheet1.get_all_values())

# [['Hello, gspread!']]

Google Cloud Platform 側の設定

プロジェクトの作成

任意の名称でプロジェクトを作成します。(本記事では DEMO-gspread としています)

API の有効化

gspread を利用するには、以下の API を有効にします。


① コンソール画面のサイドバーから、[API とサービス] - [有効な API サービス] を押下します。


② [API とサービスの有効化] を押下します。


③ 検索窓から API をキーワード検索します。


④ [有効にする] を押下し、API を有効にします。

Google Drive API

Google Sheets API

認証情報の発行

gspread を利用するには Google サービスへの認証・認可が必要になりますが、その方法として以下の2つが提供されています。

  • サービスアカウントの利用 [1]
  • OAuth クライアント ID の利用 [2]

本記事では「サービスアカウント」を利用します。サービスアカウント [3] とは、特殊なタイプの Google アカウントのことで、いわゆる Bot です。認証情報は Bot (アプリケーション 等) に対して Google サービスへの認証・認可を提供します。

サービスアカウントは分離された異なるアカウントであるため、デフォルトではスプレッドシートに対するアクセス権限を持っていません。今回はスプレッドシートにアクセスさせたいため、ユーザーはこのサービスアカウントと対象のスプレッドシートを共有することになります。


① コンソール画面のサイドバーから、[API とサービス] - [認証情報] を押下します。


② [認証情報] - [サービスアカウント] を押下します。


③ 任意のサービスアカウント名を入力し、[完了] を押下します。


④ [キー] タブを開き、[鍵を追加] - [新しい鍵を作成] を押下します。


⑤ 「キーのタイプ」を json のまま、[作成] を押下します。(※注意にもある通り、ダウンロードされる認証情報は厳重に管理します)


以上で Google Cloud Platform 側の設定は完了です。

Google スプレッドシートの作成と共有

① 適当な Google スプレッドシートを作成し、[共有] を押下します。

② 作成したサービスアカウントのメールアドレスを入力し、適切な権限を選択した上で [送信] を押下します。

Python アプリケーションからの操作

ライブラリインストール

gspread および google をインストールしておきます。

$ pip install --upgrade pip
$ pip install google
$ pip install gspread

認証

認証のサンプルコードを以下に示します。

from google.oauth2.service_account import Credentials
import gspread

scopes = [
    'https://www.googleapis.com/auth/spreadsheets',
    'https://www.googleapis.com/auth/drive'
]

credentials = Credentials.from_service_account_file(
    YOUR_CREDENTIAL_FILEPATH,
    scopes=scopes
)

gc = gspread.authorize(credentials)

スプレッドシート操作

動作確認として、"シート1" に含まれるすべての値を取得・表示してみます。

spreadsheet_url = "https://docs.google.com/spreadsheets/d/xxxxxxxxxxxxxxxx"

spreadsheet = gc.open_by_url(spreadsheet_url)
print(spreadsheet.sheet1.get_all_values())
Output
[['Hello, gspread!']]

ということで、無事 gspread を使用して Python アプリケーションから Google スプレッドシートへのアクセス・操作ができました!

脚注
  1. For Bots: Using Service Accoun - gspread ↩︎

  2. For End Users: Using OAuth Client ID - gspread ↩︎

  3. Service accounts - Google Cloud ↩︎

  4. oauth2client - oauth2clinet ↩︎

  5. google-auth - Google Auth Library for Python - google-auth ↩︎

Discussion