LINEで現場日報を作るボットを試した — テキスト・音声・修正対応

リード

こんにちは、ぽまらのです。

以前このブログで X 投稿の半自動化 を書きました。今度は LINE 向けの小さなアプリです。

Screenshot

現場のメモや音声を送ると、工務店向けの「現場日報」形式に整えて返してくれる LINE ボット を作り、Railway 上で動かしています。

ターゲットは 工務店・建設現場 です。手袋のままスマホで話す、帰りの車で箇条書きを送る——そんな使い方を想定しています。

この記事では、なぜ LINE か、何ができるか、中身の設計、つまずいた点をまとめます。


なぜ「日報 × LINE」か

現場日報は、会社によってフォーマットが決まっていて、書くのが面倒 という話をよく聞きます。

一方で現場では、

  • 手が汚れていて長文を打ちにくい
  • 終業後にまとめて書こうとして忘れる
  • メモはあるが、提出用の体裁 に直す時間がない

という状況も多いはずです。

LINE はすでに現場でも使われている ことが多いので、「別アプリを入れてもらう」よりハードルが低いと考えました。
入力は テキストでも音声でも OK。出力は LINE のトーク画面にそのまま返す——シンプルな一本道です。


ボットでできること

入力処理出力
テキスト現場メモをそのまま送信整形された現場日報
音声Whisper で文字起こし → 日報生成文字起こし結果 + 日報
修正指示「〇〇を追加」「天気を直して」など直前の日報を書き換え

「使い方」「ヘルプ」と送ると、操作ガイドが返ります。

日報の型(出力例)

メモから、だいたい次の項目に分けて出力します。

  • 日付・現場名・天気
  • 本日の作業内容
  • 工事進捗状況
  • 材料・機材
  • 安全・品質確認(ヒヤリハット、熱中症など)
  • 明日の予定
  • 申し送り事項

罫線と絵文字付きの LINE 向けプレーンテキスト です(Markdown の #** は使わない)。

メモにない項目は 「記録なし」 と書くよう、プロンプトで縛っています。
AI に勝手に事実を足させないのが、現場向けでは特に大事だと思いました。


全体の流れ

テキストの場合

flowchart LR
  A[現場担当が LINE でメモ送信] --> B[Webhook 受信]
  B --> C[Claude で日報整形]
  C --> D[LINE に返信]
  C --> E[サーバーに .md 保存]

音声の場合

flowchart LR
  A[音声メッセージ] --> B[処理中と返信]
  B --> C[音声ダウンロード]
  C --> D[faster-whisper 文字起こし]
  D --> E[文字起こし結果を push]
  E --> F[Claude で日報生成]
  F --> G[日報を push]

音声は処理に時間がかかるので、先に「文字起こし中です」と返信 し、結果は push メッセージ で送る構成にしています(後述)。


使った技術

要素選んだもの理由
LINE 連携Messaging API(Webhook)友だち追加だけで使える
サーバーFastAPIWebhook + ヘルスチェックを1本で
日報生成Claude Haiku速度・コスト。定型整形向き
音声faster-whisper(base, CPU)LINE の音声をローカル文字起こし
ホスティングRailway小さな MVP を手早く公開

環境変数は LINE_CHANNEL_SECRETLINE_CHANNEL_ACCESS_TOKENANTHROPIC_API_KEY など。
鍵はサーバー側のみで、リポジトリには載せません。


設計で意識したこと

メモにない情報は書かない

現場日報で AI が でたらめな進捗や人数を足す のは困るので、システムプロンプトで次を徹底しています。

  • 推測で補完しない
  • 不明な項目は「記録なし」
  • 専門用語はメモに沿って使う

JSON で品質を縛るハーネス の記事で書いたのと同じ発想で、出力フォーマットと禁止事項をプロンプトに固定 しています。

修正はチャットの続きで

「修正」「追加」「直して」などのキーワードを含むテキストを送ると、直前の日報 を読み直して差し替えます。
メモリ上に保持し、再起動後は保存済みファイルから最新を読むフォールバックも入れています。

短すぎるメモは弾く

10文字未満のテキストは、日報にする材料が足りないので、使い方ガイド付きで促すようにしました。


つまずいた点

LINE の reply_token は1回きり

音声処理は ダウンロード → Whisper → Claude と時間がかかります。
最初に「処理中」を reply したあと、結果は push で送る必要がありました。
ここを誤ると「返信が来ない」状態になるので、テキストと音声で送り方を分けています。

Whisper の初回ロード

faster-whisper のモデルは 初回だけロードに時間 がかかります。
Railway の無料〜小規模プランでは、スリープからの復帰後に最初の音声が遅く感じる可能性があります。

短いメモほど「記録なし」だらけになる

どうしても入力が少ないと、日報の枠の大半が「記録なし」になります。
これは仕様どおりですが、もう少し詳しく送ってください と案内する文面も検討中です。


デプロイと現状

Webhook サーバーは Railway に載せ、ヘルスチェック用に /health を用意しています。

  • 例: https://nippou-bot-production.up.railway.app/health

現状は MVP / デモ です。
工務店向けに「無料で試してみて」と提案する前段階として、自分で現場メモ風の入力を試し、フォーマットと修正フローを固めています。

X 半自動化と違い、こちらは LINE 上で完結 します。
ただし 提出先の基幹システムへの自動連携 までは入れていません。あくまで「体裁を整えたテキストを返す」ところまでです。


まとめ

  • 工務店向け の現場日報を、LINE のテキスト/音声 から生成するボットを作った
  • Claude Haiku で整形、faster-whisper で音声文字起こし
  • メモにない情報は 「記録なし」 — 推測で足さない
  • 修正指示 で直前の日報を書き換え可能
  • Railway 上の MVP。提出システム連携はこれから

現場で「とりあえずメモだけ送って、あとで日報にして」と言えると、続きやすいのではないかと思っています。


コメント