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

現場のメモや音声を送ると、工務店向けの「現場日報」形式に整えて返してくれる 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) | 友だち追加だけで使える |
| サーバー | FastAPI | Webhook + ヘルスチェックを1本で |
| 日報生成 | Claude Haiku | 速度・コスト。定型整形向き |
| 音声 | faster-whisper(base, CPU) | LINE の音声をローカル文字起こし |
| ホスティング | Railway | 小さな MVP を手早く公開 |
環境変数は LINE_CHANNEL_SECRET、LINE_CHANNEL_ACCESS_TOKEN、ANTHROPIC_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。提出システム連携はこれから
現場で「とりあえずメモだけ送って、あとで日報にして」と言えると、続きやすいのではないかと思っています。

コメント