LoginSignup
2
0

More than 1 year has passed since last update.

Streamlitでスプレッドシートにログを出力する

Last updated at Posted at 2022-08-15

目次

  1. Streamlitについて
  2. 目的
  3. 方法
  4. おまけ
  5. おわりに

Streamlitについて

Streamlitは、Pythonだけで簡単にWebアプリケーションを作成できる強者です。
遊び心もあって素敵です。
公式ドキュメントはこちら

目的

Streamlit, 実はデフォルトでLoggerが用意されています。

でも、これは管理者画面のコンソールにつらつら吐き出されるだけなので少しみづらいです。(自分が良い方法を知らないだけかもしれないけど...)

必要な情報のみ、スプレッドシートに出力できたらいいのに...
と思っていたら、とうとうできました!
いろんなサイトを見ながらやったので、備忘録的にまとめておきたいと思います。
(間違いがあれば指摘していただけると嬉しいです)

用意するもの

  • アカウント
    • Github: Streamlitアプリをデプロイするため
    • Streamlit:Streamlitアプリをデプロイするため
    • Google: GCSとスプレッドシートを利用するため
  • 環境
    • streamlit(今回は、1.12.0を使用, まだ入っていない場合は pip3 install streamlit でインストール)

今回は、スプレッドシートに書き出す部分のみ扱います。

方法

参考サイト

↓大きく参考にしたサイト
ベースとなるアプリ
StreamlitとGCSの接続

このBug Reportというアプリを見た時に、スプシに書き出せるのか!!という衝撃が走りました笑

Google Cloud Storage の設定

こちらの公式ドキュメントを参考に、GCSとStreamlitのアプリを紐付ける。

画像がとても小さいですが、ズームすれば意外と見えます

スプレッドシートの作成

データベースとして使用したいスプレッドシートを作成します。

この時、スプレッドシートの設定は 「リンクを知っている人は誰でも編集可能」 にするのがおすすめです。
全て試したわけではないですが、閲覧権限のみではエラーとなりました。

シート名も後でプログラムで指定するので変更しましょう。
日本語よりも英語が良いです。

シート名がリクエストに入るので、日本語だとうまくいかない時があります(たぶん)

Streamlitアプリのコードを作成

main.pyという名前のファイルを作成。以下のコードを写す。
(ただし、SHEET_IDとSHEET_NAMEは自分のものを指定)

main.py
import google_auth_httplib2
import httplib2
import streamlit as st
from google.oauth2 import service_account
from googleapiclient.discovery import build
from googleapiclient.http import HttpRequest

SCOPE = "https://www.googleapis.com/auth/spreadsheets"
SHEET_ID = "自分のスプレッドシートID"
SHEET_NAME = "自分のスプレッドシートの シート名"

@st.experimental_singleton()
def connect_to_gsheet():
    # Create a connection object
    credentials = service_account.Credentials.from_service_account_info(
        st.secrets["gcp_service_account"], scopes=[SCOPE]
    )

    # Create a new Http() object for every request
    def build_request(http, *args, **kwargs):
        new_http = google_auth_httplib2.AuthorizedHttp(
            credentials, http=httplib2.Http()
        )

        return HttpRequest(new_http, *args, **kwargs)

    authorized_http = google_auth_httplib2.AuthorizedHttp(
        credentials, http=httplib2.Http()
    )

    service = build("sheets", "v4", requestBuilder=build_request, http=authorized_http)
    gsheet_connector = service.spreadsheets()

    return gsheet_connector


def add_row_to_gsheet(gsheet_connector, row):
    gsheet_connector.values().append(
        spreadsheetId=SHEET_ID,
        range=f"{SHEET_NAME}!A:C",
        body=dict(values=row),
        valueInputOption="USER_ENTERED",
    ).execute()

#### main contents
st.title("Hello")

gsheet_connector = connect_to_gsheet()

form = st.form(key="test")
with form:
    text1 = st.text_input("first")
    text2 = st.text_input("second")
    submitted = st.form_submit_button(label="Submit")

if submitted:
    add_row_to_gsheet(gsheet_connector, [[text1, text2]])
    st.success("OK!")


ローカルでの動きを確認

ターミナルで下記コマンドを実行してみてください!

streamlit run main.py

※ファイル名をmain.py以外にした人は、上のコマンドもそのファイル名に差し替えます

最初は時間かかりますが、うまくいけば勝手にブラウザが起動するはず!

アプリを動かしたあと、スプレッドシートをみてみてください。記録されていますか?

おまけ

スプレッドシートに出力することで、ログの分析もお手軽です!

スプレッドシートのCOUNTIF関数等やグラフ描画を駆使すれば、可視化ダッシュボードも瞬殺です!!

スクリーンショット 2022-08-16 0.45.21.png

リアルタイムで分析できる別のStreamlitアプリを作成するのもいいですね!
その際はこちらが参考になります!データの読み取りは、書き出しよりも単純です。

また、Streamlitでやりたいことが増えそうです。

おわりに

だいぶ簡単にでしたが、スプレッドシートへのログの出力について紹介しました!
あとは、add_row_to_gsheet(gsheet_connector, [[text1, text2]])
この一行を、自分のアプリの中に出力したいタイミングで入れればOKです!

これから注意点はまとめていきます!

まずは、簡単な初投稿でした!終わり!

2
0
0

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
0