Kompira Enterprise で Google スプレッドシートの読み書きをする

Kompira Enterprise で Excel ファイルの読み書きをする」で Kompira Enterprise から Excel ファイルを読み書きする方法をご紹介しました。本稿では同様に Google スプレッドシートに対してアクセスする方法をご紹介します。


動作確認環境

ソフトウェア バージョン
Kompira Enterprise 1.6.2.post4
OS CentOS 7.8.2003
gspread 3.7.0
oauth2client 4.1.3

Python ライブラリの準備

Excel の場合と同様に、Python の外部ライブラリを使用します。今回はスプレッドシートを操作する「gspread」と Oauth 認証関連の「oauth2client」を導入します。
Kompira Enterprise サーバーにログインした後に、以下のようにしてインストールします。

$ sudo /opt/kompira/bin/pip install gspread 
$ sudo /opt/kompira/bin/pip install oauth2client

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

Google アカウントを取得して、スプレッドシートを1つ作成します。ここでは「samplesheet」という名前のスプレッドシートを作成して、A1 セルに  Hello, world と記載しました。

Google API Console ページで、「プロジェクトを作成」をクリックして新規プロジェクトを作成します。以下では kompira という名前で作成しました。

作成したら、画面左上のナビゲーションメニューから「APIとサービス」>「認証情報」をクリックして、遷移した画面から「認証情報を作成」>「サービスアカウント」をクリックします。

サービスアカウント名を設定して「作成」をクリックします。ここではサービスアカウント名を「kompiraserver」とします。

「②このサービス アカウントにプロジェクトへのアクセスを許可する」と、「③ユーザーにこのサービス アカウントへのアクセスを許可」にはなにも記入せずに、下の「完了」をクリックします。

認証情報の画面に戻るので先ほど作成したサービスアカウントを選択します。

「キー」タブに移り、「鍵を追加」>「新しい鍵を作成」から秘密鍵を作ります。「JSON」を選択して「作成」をクリックしてください。

この後、認証キー情報の JSON ファイルがダウンロードされます。このファイルは Kompira Enterprise サーバーの kompira アカウントから参照できるディレクトリに転送しておきます。
今回は /tmp に転送しました。

次に先に作成したスプレッドシートにユーザーを登録します。ダウンロードした JSON 形式の認証情報ファイルを開いてみると、 client_email をキーとしたアドレスが記述されています。

このアドレスをスプレッドシート「samplesheet」右上の「共有」を押した後の以下の画面で登録します。

API ライブラリの設定
「API とサービス」の「ダッシュボード」内にある「API とサービスの有効化」をクリックしてライブラリを追加します。

外部から Google スプレッドシートにアクセスするためには、以下の2つのライブラリが必要となります。

  •  Google Drive API
  •  Google Sheets API

それぞれの API ライブラリを選択し、「有効にする」をクリックしてください。

「ダッシュボード」内で、追加した2つの API が有効化されていることを確認できます。

ここまでで、認証情報の設定とスプレッドシートの準備ができました。続いて Kompira Enterprise 上でのジョブフローを作成していきましょう。

ライブラリとジョブフローの作成

まずはライブラリを用意します。ここでは「gsheet」 という名前で作成しました。
Kompira Enterprise で Excel ファイルの読み書きをする」の場合と同様に、1つのセルの値を読み出す  get_cell_value という関数を実装してみます。

ライブラリ「gsheet」

import gspread
from oauth2client.service_account import ServiceAccountCredentials

scope = [
    'https://spreadsheets.google.com/feeds',
    'https://www.googleapis.com/auth/drive'
]

# 引数はファイル名、シート名、セル番号
def get_cell_value(filename, sheet_name, cell):
    
    # 先にコピーした認証ファイル
    credentials = ServiceAccountCredentials.from_json_keyfile_name(
        '/tmp/(認証用JSONファイル)', scope
    )
  
    gc = gspread.authorize(credentials)
    wb = gc.open(filename)
    ws = wb.worksheet(sheet_name)
    return ws.acell(cell).value

次に、このメソッドを利用するジョブフロー「sample」を作成します。

ジョブフローは次のように記述できます。

ジョブフロー「sample」

[./gspread.get_cell_value: "samplesheet", "シート1", "A1"] ->
[val = $RESULT] ->
print(val)

実行すると次のようにコンソールに表示されます。

このようにして gspread モジュールの API を呼び出すことで、Google スプレッドシートの値を読み込み・記入することが可能です。

今回は acell メソッドを使った指定セル値の読み込みのみをご紹介いたしましたが、他にも列指定やシート全体の読み込み、記入をはじめ、シートの作成なども行えます。詳細は gspread API Reference をご覧のうえ、必要なライブラリ・メソッドを追加してご利用ください。

TOP