この記事はGreg Bauguesがこちらで公開した記事(英語)を日本語化したものです。
本稿は、以下に示す「データベースが必要ない場合もある」というPatrick McKenzie氏のツイートに触発されて書きました。
So if you're building out a quick CRUD app for e.g. internal use, Google Docs as a backend (consumed via JSON) is *surprisingly* powerful.
— Patrick McKenzie (@patio11) July 5, 2014
このチュートリアルでは、Anton Burnashev氏のgspread Pythonパッケージを使用し、わずか数行のコードでGoogleスプレッドシートからデータの読み込み、書き込み、削除を実行する方法をご紹介します。
Google Drive APIとサービスアカウント
このチュートリアルを実践するには、スプレッドシートが必要になります。米国議会議員の全員の連絡先情報を記載したスプレッドシートをコピーし、使用してください。スプレッドシートのファイル名を任意の名前に変更してください。本稿では「米国議会議員リスト」とします。
補足: Ian Webster氏は、このデータとTwilioと組み合わせて、市民が議会に簡単に電話できる方法を編み出しました。詳しくは、Twilioブログの「Call Any Representative Using One Phone Number」を参照してください。
プログラムでスプレッドシートにアクセスするには、Google APIコンソールからサービスアカウントとOAuth2認証情報を作成します。OAuth2の開発に苦労した経験がある場合でも、心配する必要はありません。サービスアカウントの使い方は非常に簡単です。
Google APIコンソールのUIは今後変更される可能性があります。
以下の手順と動画に従ってください。
- Google APIコンソールにアクセスします。
- [プロジェクトの選択]から[新しいプロジェクト]を選択し、プロジェクト名を入力し新規プロジェクトを作成します。
- APIとサービスから[ライブラリ]を選択します。Google Drive APIとGoogle Sheets APIを検索し、[有効にする]を選択します。
- Webサーバーがアプリケーションデータにアクセスするための認証情報を作成します。APIとサービスから[認証情報]を選択します。[認証情報を作成]をクリックし、[サービスアカウント]を選択します。
- サービスアカウント名を入力し、[作成を続行]を選択します。ロールを選択から[編集者]権限を選択し、[続行]を選択します。権限情報が保存されたら、[完了]を選択します。
- 作成したサービスアカウントのメールアドレスをクリックし、キーから[鍵を追加]をクリックします。[新しい鍵を作成]を選択し、キーのタイプは[JSON]を選択します。作成されたJSONファイルが自動的にダウンロードされます。
- JSONファイルをプロジェクトのルートディレクトリに移動し、ファイル名を「client_secret.json」に変更します。
最後に、アプリの認証に必要なステップである編集者権限の付与を行います。見逃しがちなので注意してください。
client_secret.jsonの、client_email
をコピーします。
スプレッドシートに戻り、[共有]をクリックします。次に、クライアントのメールアカウント(client_email
)をユーザーやグループと共有フィールドに貼り付け、[送信]をクリックします。
この手順をスキップし、Pythonからスプレッドシートにアクセスしようとすると、gspread.exceptions.SpreadsheetNotFound
エラーが発生します。
これで終了です。次にコードに進みます。
Pythonでスプレッドシートからデータを読み込む
認証情報が設定されている場合、PythonでGoogleスプレッドシートにアクセスするには、次の2つのパッケージが必要です。
- oauth2client – OAuth 2.0を使用し、Google Drive APIで認証します。
- gspread – Googleスプレッドシートを操作します。
以下のコマンドを実行し、パッケージをインストールします。
pip install gspread oauth2client
次に、プロジェクトのルートディレクトリにspreadsheet.pyファイルを作成します。以下のコードをspreadsheet.pyファイルに追加します。
sheet = client.open("{シートのファイル名}").sheet1
の{シートのファイル名}
を編集するシートのファイル名に変更してください。今回は、ファイル名を「米国議会議員リスト」に設定したので、sheet = client.open("米国議会議員リスト").sheet1
に変更します。
import gspread
from oauth2client.service_account import ServiceAccountCredentials
# use creds to create a client to interact with the Google Drive API
scope =['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive']
creds = ServiceAccountCredentials.from_json_keyfile_name('client_secret.json', scope)
client = gspread.authorize(creds)
# Find a workbook by name and open the first sheet
# Make sure you use the right name here.
sheet = client.open("{シートのファイル名}").sheet1
# Extract and print all of the values
list_of_hashes = sheet.get_all_records()
print(list_of_hashes)
sheet = client.open("{シートのファイル名}").sheet1
の{シートのファイル名}
部分が編集したいシートのファイル名と一致していることを確認してください。シート名と不一致の場合、プログラムが正しく動作しません。
プロジェクトのルートディレクトリで以下のコマンドを実行します。
python3 spreadsheet.py
綺麗に整理されたデータが出力され驚くと思います。
Pythonでスプレッドシートから挿入、更新、削除する
gspreadsの機能全般については、ドキュメントで詳細に解説しています。ここまでは、gspreadsの表面的な部分に触れてきました。
たとえば、データをハッシュのリストに抽出しましたが、必要に応じて複数のリストの中からリストを取得することもできます。
sheet.get_all_values()
また、単一の行、列、セルからデータを取得することもできます。
sheet.row_values(1)
sheet.col_values(1)
sheet.cell(1, 1).value
特定のセルを変更し、スプレッドシートに書き込むこともできます。
sheet.update_cell(1, 1, "I just wrote to a spreadsheet using Python!")
または、スプレッドシートに行を挿入することもできます。
row = ["I'm","inserting","a","row","into","a,","Spreadsheet","with","Python"]
index = 1
sheet.insert_row(row, index)
スプレッドシートから行を削除することもできます。
sheet.delete_row(1)
行の総数を調べることもできます。
sheet.row_count
これらの関数とその他数十種類の関数の詳細については、gspread APIリファレンスを参照してください。
PythonでGoogleスプレッドシートを使用すると、スプレッドシートを永続レイヤーとしてFlaskアプリケーションを開発したり、GoogleスプレッドシートからJupyter NotebookにデータをインポートしてPandasで分析したりできます。PythonでTwilioを試してみたい場合は、Pythonクイックスタートを参照してください。
良いプロジェクトが開発できた場合は、ぜひ教えてください。連絡先はgb[at]twilio.comまたは@greggybです。この投稿がお役に立ちましたら、ぜひご興味のありそうな方に共有してください。
レビューを提供してくれたDevin氏とSam氏、シートを提供してくれたGoogle、そして何よりも、gspreadを提供してくれたAnton氏に感謝申し上げます。

Schedule appointments and check their statuses using Notion, FastAPI, and the Twilio WhatsApp API.

Use a Raspberry Pi to build a system that will send you an SMS when flames are detected.

Learn how to use Notion to create email templates and an email mailing list. Using Python and SendGrid, make a console program so you can send your emails.

Learn how to use Twilio SMS, Python, and Airtable to send you an SMS message of your classes with directions for the day, so you can find your classes on time.

Provide users with a choice between receiving their one-time password via SMS or WhatsApp.

How to Build and Automate Client Payment Reminders using Twilio WhatsApp API, Notion API, and Python