😸
LINE × Googleスプレッドシートで作る日報Bot|FastAPIで自分専用業務管理
📌 はじめに
LINEで日報を送ると、自動でGoogleスプレッドシートに記録されるBotを作りました。
個人開発や業務改善を目的とした、自分専用の軽量日報システムです。
本記事では、FastAPI × LINE Bot × Google Sheets API を使って構築した手順と実装内容を紹介します。
📐 アーキテクチャ構成
以下のようなシンプルな流れです。
- LINE ユーザーが日報を送信
- FastAPI(Render上) がWebhook受信し、解析
- Google Sheets API を使って スプレッドシートに記録
⚙️ 技術スタック
技術 | 用途 |
---|---|
Python | バックエンド言語 |
FastAPI | Webアプリケーション |
LINE Bot SDK | ユーザーからの受信と返信 |
Google Sheets API | スプレッドシート連携 |
Render | デプロイ環境 |
📮 動作例
LINEで以下のように送信:
日報
作業内容:資料作成
所要時間:3h
課題:資料が足りない
明日:レビュー対応
![LINE送信例のスクリーンショット]
するとスプレッドシートにこのように記録されます:
日付 | 作業内容 | 所要時間 | 課題 | 明日の予定 |
---|---|---|---|---|
2025/06/20 | 資料作成 | 3h | 資料が足りない | レビュー対応 |
![スプレッドシート例のスクリーンショット]
🔧 実装のポイント
1. Webhook受信(FastAPI)
@app.post("/callback")
async def callback(request: Request):
body = await request.body()
signature = request.headers.get("X-Line-Signature")
handler.handle(body.decode("utf-8"), signature)
return "OK"
2. メッセージ処理
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
if "日報" in event.message.text:
# テキストをパースし、シートに書き込み
3. Google Sheets 書き込み
worksheet.append_row([today, task, time_spent, issue, tomorrow])
🚀 デプロイ(Render)
-
requirements.txt
とmain.py
を準備 - RenderのWeb Serviceとして
main:app
を登録 -
.env
に以下を設定:
LINE_CHANNEL_ACCESS_TOKEN=
LINE_CHANNEL_SECRET=
SPREADSHEET_ID=
GOOGLE_APPLICATION_CREDENTIALS=credentials.json
🔮 今後の拡張予定
- LINE SDK v3対応
- 定時リマインダー送信機能
- 入力内容のバリデーション・エラー通知
- CSV/グラフ出力
💬 まとめ
「毎日の記録を少しでもラクにしたい」「Googleスプレッドシートで一元管理したい」という個人や小規模チームに向けた、実用的なBotの一例です。
GitHubリポジトリはこちら👇
🔗 github.com/tkagawa218/googleSheets
ぜひスター&フォローよろしくお願いします 🙌
Discussion