LoginSignup
2

More than 3 years have passed since last update.

Google SpreadSheetから設定値を読み取るgssetting

Last updated at Posted at 2019-12-19

aratana Advent Calendar 2019の20日目です。
aratana

最近、設定ファイルにサイト情報を書いて、チェックしにいくというスクリプトを動作させているのですが、チェック対象サイトが増えるたびに、設定ファイルを自分で書き換えるという作業が発生しているので、改善したいなと思ってきました。

現状だいたい下記のような流れです。

マネージャーががんばる -> サイトオープン -> サイトオープンしたよ連絡
 -> シートにサイト情報を記入
 -> 私に連絡が来る -> 私がサーバに入って、設定ファイルに反映

私の作業は数分ですが、めんどうだなーって思ってきました。
スプレッドシートに書いてあるサイト情報をマスタにして、スクリプトから取得すれば解決だな!と思ったので、スプレッドシートから設定値を楽に取得するパッケージを作りました。Pythonで。

gssetting

安直ですが、Google SpreadSheet Settingの略で、gssettingと命名してみました。
設定情報のモデルを作成し、それを元にシートから情報を取ってくるイメージです。
gspread依存です。

2019/12/20現在、急ぎで作ったのでアルファ扱いで、完成度は低いですが、今後改善していきます。(テストファイルとかつくらなきゃ

利用方法

はじめに

まず、サービスアカウントを作成して、対象のシートに設定してください。
下記サイトをご参考に。。。
PythonでGoogleスプレッドシートを編集

インストール

PyPiに登録しているので、ピップ!します。(現在は、Python3.7以上対象となってます。

pip install gssetting

モデル作成

下記シートから、name列とvalue列のみを抽出しようかと思います。

スクリーンショット 2019-12-19 16.48.28.png

from dataclasses import dataclass

from gssetting import GSSetting


@dataclass
class Setting(GSSetting):
    username: str
    value: str

    headers = ["name", "value"]

実行

下記コードを実行することにより、読み込み完了です。
後はいい感じに加工したりしていけばおkですね!

from dataclasses import dataclass

from gssetting import GoogleSpreadSheetSetting, GSSetting


@dataclass
class Setting(GSSetting):
    username: str
    value: str

    headers = ["name", "value"]


if __name__ == "__main__":
    gs_setting = GoogleSpreadSheetSetting(
        "./service_account.json", "document_id"
    )
    settings = gs_setting.load("sheet_name", "A1:C3", Setting)
    print(settings)

    for setting in settings:
        print(setting.username.value)

実行結果

[Setting(name=<Cell R2C1 '私'>, value=<Cell R2C3 'ひらがな'>), Setting(name=<Cell R3C1 '僕'>, value=<Cell R3C3 '漢字'>)]
私
僕

まとめ

楽に、シートから設定を取得できるパッケージは完成したので、色々なところで使いまわししていこうかなと思ってます。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2