こんにちは、こんです🦊
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実験記録