Kon's DX Lab - Case Study

Day 80 │ SlashコマンドからGoogle Sheetsに書き込む最小構成(Slack Bolt + Flask)

Published on 2025-06-20

🔬 Case Study Summary
Problem

(ここに課題を記述)

Result

(ここに具体的な成果を記述)


Tech & Process

(ここに採用技術とプロセスを記述) コードを詳しく見る »

こんにちは、こんです🦊
Slack勤怠ボット構築もいよいよ応用フェーズに入ってきましたが、今回はあえて超ミニマルな構成に立ち返って「最小構成でSlashコマンド→Google Sheets書き込み」までをやってみます。


🎯 この記事の目的

  • Slack Bolt + Flask + Google Sheets API を用いた最低限の動作構成を理解する

  • MVP構築前に「最小構成でちゃんと動く」を確認する

  • コードが肥大化する前に構造と流れを把握しておく


🧱 必要なもの


🧪 最小構成のコード例(app.py)

import os
import datetime
from flask import Flask, request
from slack_bolt import App
from slack_bolt.adapter.flask import SlackRequestHandler
from googleapiclient.discovery import build
from google.auth import default

# 環境変数から取得
SLACK_BOT_TOKEN = os.environ["SLACK_BOT_TOKEN"]
SLACK_SIGNING_SECRET = os.environ["SLACK_SIGNING_SECRET"]
SPREADSHEET_ID = os.environ["SPREADSHEET_ID"]

# Slackアプリ
app = App(token=SLACK_BOT_TOKEN, signing_secret=SLACK_SIGNING_SECRET)
handler = SlackRequestHandler(app)

# Sheets API初期化
creds, _ = default()
sheet = build('sheets', 'v4', credentials=creds).spreadsheets().values()

# 書き込み関数
def append_log(values):
    sheet.append(
        spreadsheetId=SPREADSHEET_ID,
        range="A1",
        valueInputOption="USER_ENTERED",
        body={"values": [values]}
    ).execute()

# Slashコマンド
@app.command("/hello")
def handle_hello(ack, body, client):
    ack()
    user_id = body["user_id"]
    username = client.users_info(user=user_id)["user"]["real_name"]
    now = datetime.datetime.now().strftime("%Y/%m/%d %H:%M")
    append_log([now, username, "hello"])
    client.chat_postMessage(channel=user_id, text="✅ Hello記録完了!")

# Flaskエンドポイント
flask_app = Flask(__name__)

@flask_app.route("/slack/commands", methods=["POST"])
def slack_commands():
    return handler.handle(request)

app = flask_app  # Cloud Run用にappをエクスポート

💡 ポイント解説


🔧 最小限の環境変数

SLACK_BOT_TOKEN=...
SLACK_SIGNING_SECRET=...
SPREADSHEET_ID=...

.envではなく、Cloud Runでは --set-env-vars で渡すことが必須です。


✅ Slack側の設定

  • Slash Command /hello を作成

    • Request URL: https://xxxxx.run.app/slack/commands

  • Bot Token Scopes に commands, chat:write, users:read を追加

  • Appを再インストール(スコープ変更時は必要)


🎉 動作確認

Slack上で /hello を送信 →
→ DMに ✅ が届き、Google Sheets に記録が追加されれば成功!


📝 まとめ

「Slackコマンド → Google Sheets」までを最短でやると、実はこれだけ。
全体構造が理解できたら、次はコメント付きログ、複数コマンド、日付フィルタなどを段階的に追加していくとスムーズです。


#100日チャレンジ
#Slackボット開発
#最小構成
#GoogleSheetsAPI
#Flask
#CloudRun
#Python開発
#MVP開発
#DX実験記録