今回は、GSheetsとPythonを連携させる方法を簡単なステップバイステップのチュートリアルで学びます。
イントロダクション
コードを使って仕事をしていると、コードから生成された情報、あるいはコードによって利用された情報を保存する場所が必要であることに気付くことがよくあります。
さらに調べていくと、世界中で使われている解決策はデータベースとして知られているものであることに気づきます。
そして、このデータベースが自分のコードからアクセスできることも次第にわかり、有頂天になり、早く試してみたいと思うようになります。
数週間後、あなたはデータベースには多くの選択肢があること、そしていつも使っているGoogle Sheetsもデータベースとして機能することに気づきます。
作成、読み込み、更新、削除、略してCRUDのすべての操作を行うことができます。
さて、ここで朗報です!その通りなのです。
Google Sheetsは、日常生活で使う記録をオンラインで閲覧、編集、共同作業ができるソフトウェアです。
しかし、ここで多くの人が気づいていないことがあります。
Googleはまた、私たちのコードの快適さからシートにアクセスする機能を提供しています。
ブラウザでできるすべての操作を、コードから行うことができるのです。
しかし、いつものように、コードがどのように動作するかを理解するために、最初のステップが必要です。
では、次に何が起こるかわかったところで、Google Sheetsを使ってみましょう。
Google Python クライアント API のインストール
Pythonを使ってGoogle Sheetsの操作を始めるには、まず機能と実行能力を確保する必要があります。
そこで、Googleクライアントライブラリのpipインストールコマンドを以下に示します。
pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
|
これからいくつかのモジュールを使用する予定ですが、これらはレコードの操作を容易にするもので、Google Sheetsを直接操作するための一種の回り道となります。
pip install gspread oauth2client
|
Pythonのほとんどのインスタンスで動作するはずですが、もし何か問題があるようでしたら、インストールページを調べてみるとよいかもしれません。
GSheets と Python を統合するためのステップ
次は、GSheetsとPythonを連携させるための手順を紹介します。
以下のステップを踏んでください。
1. GCPでのプロジェクトの立ち上げ
GSheets APIと連携するためには、まずGoogle Cloud Platform、通称GCPに作ったプロジェクトを作成し、利用する必要があります。
Google Cloud Platformはクラウドコンピューティングサービス群であり、クラウドを前提としたAPIを利用するためには、前提条件としてGCPと連携する必要があります。
つまり、プロジェクトを作成し、Drive APIを有効にするだけで、APIに必要なクレデンシャルを受け取り、Scriptと対話し、データを取得することができるようになるということです。
では、まず最初に! Google Cloud Consoleに至るまで、それぞれのアカウントにログインする必要があります。
# Authentication and access modulesimport gspread
from oauth2client.service_account import ServiceAccountCredentials
# pprint is used for pretty printing the output# It is not vital to the script in any way, but rather for us# to view the examplesfrom pprint import pprint
|
では、プロジェクトを作成しましょう。
方法は、画像の赤い矢印で示したselect a projectをクリックし、ウィンドウが表示されたら、新しいプロジェクトを作成するだけです。
プロジェクトのタイトルは自由につけることができます。
また、このプロジェクトを特定の組織と関連付けない場合は、組織なしを選択します。
ダッシュボードにまだ移動していない場合は、サイドバーの「ホーム -> ダッシュボード」からアクセスできます。
2. ドライブAPIの有効化
プロジェクトを作成したところで、いよいよAPIを導入します。
APIを探すには、上部の検索バーを使ってGoogle Drive APIと検索するのが簡単です。
# sheet accessscope = ["https://spreadsheets.google.com/feeds",'https://www.googleapis.com/auth/spreadsheets',"https://www.googleapis.com/auth/drive.file","https://www.googleapis.com/auth/drive"]
|
正しいものが見つかれば、このように表示されるはずです。
creds = ServiceAccountCredentials.from_json_keyfile_name("creds.json", scope)
client = gspread.authorize(creds)
|
これで、APIの概要ページが自動的に表示されるはずです。
次に、サイドバーからクレデンシャルセクションに移動したいと思います。
Google Drive API、Web Server、Application Data、そしてCompute Engineとの統合のためのNoと、レスポンスが揃うように、プロジェクトに応じたクレデンシャルを生成してみましょう。
sheet = client.open("tester").sheet1
|
次に、サービスアカウントを作成します。
サービスアカウント名は何でもよく、ロールはeditorにします。
これにより、全てのCRUD操作を行うことができますが、ファイルそのものを削除することはできません。
また、この例で使用するように、このファイルはJSONファイルであることが望ましいです。
次に、同様の方法でSheets APIを有効化しますが、認証情報は作成しません。
# retrieves all recordsprint("Retrieving all records.... ")
data = sheet.get_all_records()
pprint(data)# retrieving specific row valuesprint(")
row = sheet.row_values(3)
pprint(row)# retrieving specific column valuesprint(")
col = sheet.col_values(3)
pprint(col)# retrieving specific cellprint(")
cell = sheet.cell(1, 2).value
pprint(cell)# inserting details into the sheetprint(")
insertDetails = ["Adithya", "testemail@gmail.com", "33YEP4554"]
sheet.insert_row(insertDetails, 1)
# updating details in the sheetprint(")
sheet.update_cell(2, 2, "dat.adithya@gmail.com")
|
3. creds.json を操作する
さて、JSON 形式でダウンロードしたクレデンシャルを、スクリプトを作成するのと同じディレクトリに保存したいと思うかもしれません。
このプロジェクトでは、クレデンシャルファイルの名前を creds.json に変更しますが、ファイル名を変更することは可能ですが、このファイルを使用するときは常にファイル名を変更する必要があることを覚えておいてください。
さて、creds.json の中には、たくさんのキーと値が含まれていますが、ここでは client_email キーにだけ注目しましょう。
このキーの値をコピーします。
Googleシートのコンテンツにアクセスするためには、このメールIDを共有する必要があるからです。
次に、新しいシートを作成するか、既存のシートを使用して、ページの右上隅にある共有オプションを使用して電子メールを追加します。
[{'33YEP4554': 2222333312,
'Adithya': 'Murthy',
'testemail@gmail.com': 'murthyhere@gmail.com'},
{'33YEP4554': 8098776633,
'Adithya': 'John',
'testemail@gmail.com': 'johnnyboi@yahoo.in'},
{'33YEP4554': 123456789,
'Adithya': 'Boiler',
'testemail@gmail.com': 'boilerplate@email.com'},
{'33YEP4554': 2524523233,
'Adithya': 'lalith',
'testemail@gmail.com': 'lalith.14bcm4243@gmail.com'},
{'33YEP4554': 2654432266,
'Adithya': 'swathi',
'testemail@gmail.com': 'swathi@rediffmail.com'},
{'33YEP4554': 6666634232,
'Adithya': 'chinnu',
'testemail@gmail.com': 'lamba@yahoo.com'},
{'33YEP4554': 6345311456,
'Adithya': 'aditya',
'testemail@gmail.com': 'adinayaki@gmail.com'}]
Retrieving information from row 3...['John', 'johnnyboi@yahoo.in', '8098776633']
Retrieving information from column 3...['33YEP4554',
'2222333312',
'8098776633',
'123456789',
'2524523233',
'2654432266',
'6666634232',
'6345311456']
Retrieving value of a cell placed at (1, 2) in the sheet...
'testemail@gmail.com'Inserting details into the sheet...Updating details in the sheet...
|
このステップの最後には、このようなものが完成しているはずです。

これで、Googleサービスアカウントは、あなたから提供されたシートにアクセスし、修正することができるようになります。
4. PythonでGsheetsにアクセスする
いよいよです。
ここからは、実際にコードを書き始めるところです。
この記事の冒頭で、いくつかの追加モジュールをインストールしたところまでフラッシュバックして、いよいよそれらを使う時が来ました。
gspreadモジュールは本質的に Google Sheets モジュールのための Python API で、きちんとしたドキュメントで構成されています。
そしてoauth2client` モジュールは OAuth で動作するためのシンプルなライブラリです。
oauth2clientライブラリは現在では非推奨とされており、google-authライブラリに取って代わられています。
しかし、このシートで作業する例では、これで十分でしょう。
まずはモジュールをインポートして、スクリプトを書き始めましょう。

次に、シートにアクセスするためのスコープを追加します。

これは、スプレッドシートを取得するためのページを定義するものです。
これが終わると、スクリプトはドキュメントをどこで探せばいいのかがわかるようになります。
次に、oauth2clientモジュールを使用して、サービスアカウントの認証情報を提供し、認証する作業に進みます。

今作成したシートはtesterという名前で、最初のシートのレコードを使用しているので、このように特定のシートを変数に代入することができます。

そして、完了です。
これでシートへの接続が確立され、残りのコードはスプレッドシートの機能をテストするためのものです。
これはかなり実践的な経験なので、自分のシート/サンプルでテストすることをお勧めします。

最後に、sheet.insert_row を使ってシートに値を挿入し、それが1行目の一部であることを指定します。
これがコマンドラインからの出力です。

そして、スプレッドシート自体の画像は以下のとおりです。

5. 前に進む
sheetsモジュールの基本的な原理を理解したところで、これをある程度自動化できるようにするのが賢明でしょう。
例えば、会場に来た人の出欠をコマンドラインから入力したり、ファイルの全レコードをGoogleシートに追加するだけで、入力内容を少し整形したりすることができます。
gspreadのドキュメントには、セルの更新からワークシート全体の削除まで、この記事で取り上げた機能以外にもたくさんの機能がありますので、ここではそれについて説明します。
まとめ
Pythonを使ったGoogle Sheetsでの作業は、データベースとしての活用、共同での記録、あるいは非コード入力者にも理解できるような詳細の更新など、詳細を記録する際に多くの扉を開くことになります。
全体として、GoogleのAPIで作業を始めるには素晴らしい方法です。
とはいえ、SQLやPandas、dotenvモジュールのような、データベースや設定を扱うのに役立つ他のモジュールを調べてみるのもいい考えかもしれない。
また、それらを調べる前に、今日開発したスクリプトへのリンクはこちらです – Gist Link.