「出勤入れ忘れた」を減らすために、LINEグループ出勤確認Botを作った話

店舗運営をしていると、毎週の出勤確認は地味に面倒です。

スタッフに翌週の出勤希望を聞く。TimeTreeに予定が入っているか確認する。入っていない人を探す。個別に催促する。最後に日付ごとの出勤者をまとめる。

一つひとつは小さい作業です。ただ、毎週続くと管理する側の負担はかなり大きい。

これまでは出勤管理にTimeTreeを使っていました。TimeTree自体が悪いわけではありません。予定共有ツールとしては便利です。

ただ、現場で使っていると別の問題が出ます。

TimeTreeを開く習慣がない人。通知が来ても後回しにする人。性格的に細かい入力が苦手な人。そういうスタッフは、決められた日時までに出勤予定を入力できないことがありました。

そのときに出てくるのが「出勤を入れ忘れた」という言い訳です。

では、入れ忘れを防ぐにはどうすればいいのか。

考えた結論はシンプルでした。

確実に日常で使うツールに、出勤確認そのものを組み込む。

そして、未入力ならその場所で催促の通知が来るようにする。

そこで今回は、普段ほぼ確実に使うLINEグループを入口にして、翌週の出勤希望を回収・集計・催促できるBotを作りました。

僕は本職のエンジニアではありません。ただ、店舗運営の現場で何が面倒なのかは分かります。

その現場感をもとに、AIを使いながら要件整理、設計、実装、LINE Developers設定、Supabase設計、Vercelデプロイまで進めました。


何を作ったか

作ったのは、LINEグループ内で使える週次出勤確認Botです。

スタッフはLINEグループで 登録リンク入力リンク と送るだけで、出勤入力用の画面を開けます。管理者は 集計 と送るだけで、翌週の日付ごとの出勤者一覧を確認できます。

まだ入力していない人は 未入力 で確認でき、毎日12時には未入力者へ自動でメンション催促も送られます。

LINEトークだけで複雑なカレンダー画面を再現するのではなく、入口・通知・集計はLINEグループ、入力だけはLIFFフォームに分けました。

この分け方にしたことで、スタッフ側は「LINEから開いて押すだけ」、管理者側は「LINEで集計と送るだけ」というシンプルな運用にできます。


なぜLINEにしたか

今回一番大事にしたのは、機能の多さではなく「現場で使われるかどうか」です。

出勤管理ツールとして多機能なものを作ることはできます。時間入力、承認フロー、希望順位、履歴管理など、入れようと思えばいくらでも入れられます。

ただ、最初から機能を盛ると、入力する側が面倒になります。

今回の目的は、シフト管理システムを作ることではありません。

まずは「翌週の出勤希望を確実に回収すること」です。

だから入力対象は翌週の月曜から土曜に固定しました。日曜日は店休日の想定なので外しました。時間入力もやめました。

出勤するか、休みか、未定か。必要ならメモを書く。

それだけに絞っています。

LINEで管理し、未入力ならLINE上で通知が来る。この形にすれば「入れ忘れた」はかなり通りにくくなります。

LINEは日常的に見る。そこに未入力通知が来る。それでも入力しないなら、単なる入れ忘れではなく、見て見ぬふりに近い状態になります。

出勤確認の仕組みを作るというより、言い訳が生まれにくい運用を作る。そこが今回の一番の狙いでした。


技術的にやったこと

表面上は「LINEでリンクを返すBot」に見えますが、実際には小さな業務システムとして作っています。

使った主な技術は、Next.js、React、TypeScript、Supabase、LINE Messaging API、LIFF、Vercel、Vercel Cronです。

スタッフ登録では、LIFFからLINEのIDトークンを取得し、LINEユーザーIDとグループIDをSupabaseに保存します。同じ人が再登録しようとした場合は、重複登録ではなく「登録済み」として扱うようにしました。

出勤入力では、翌週の営業日ごとに 出勤 / 休み / 未定 を選びます。翌週に1回も出勤を選ばなかった場合は、出勤なし理由を必須にしました。

管理者が 集計 と送ると、日付ごとの出勤者、メモ、未入力者、翌週出勤なしの人と理由がLINEに返ります。

また、LINE Webhookの署名検証、Webhookイベントの重複処理防止、LIFFリンクの署名付きstate、Cron APIのBearer token保護も入れています。

単なる自動返信ではなく、実運用で使う前提の最低限の守りも入れた構成です。


非エンジニアがAIを使って作って感じたこと

今回やってみて感じたのは、非エンジニアでも「現場の課題を具体的に説明できる」なら、AIを使ってかなり実用に近いものを作れるということです。

ただし、AIに丸投げすれば勝手に良い業務システムができるわけではありません。

入力対象を今週にするのか翌週にするのか。日曜日を含めるのか。時間入力を必須にするのか。催促は個別DMなのかグループメンションなのか。1週間出勤しない人の理由を必須にするのか。

こういう判断は、技術の問題というより運用の問題です。

AIは実装を手伝ってくれます。でも、何を作るべきか、どこまで作るべきか、現場で使われる形は何かを決めるのは人間側です。

僕はコードだけを見ていたわけではありません。

これをスタッフが本当に使うか。管理者が毎週ラクになるか。入れ忘れの言い訳を潰せるか。

そこを見ながら、AIと一緒に形にしていきました。


この経験で対応できること

今回の経験をもとに、以下のような案件に対応できます。

  • LINE公式アカウントBot構築
  • LINE LIFFフォーム開発
  • 店舗向け業務効率化システム
  • 小規模チーム向けの出勤・シフト確認ツール
  • 未入力者への自動催促Bot
  • Supabaseを使った軽量な業務アプリ
  • Vercel Cronを使った定期通知システム
  • Webhook連携を含むサーバレスアプリ開発

「普段使っているLINEで業務を回したい」

「スタッフに新しいアプリを入れさせずに入力・集計をしたい」

「毎週の確認作業や催促を減らしたい」

こういう課題に対して、現場運用に合わせた小さな業務Botを設計・実装できます。

今回作ったものは、華やかなサービスではありません。

でも、現場で毎週発生する面倒を減らすための道具です。

僕にとっては、非エンジニアがAIを使ってどこまで実務に踏み込めるのかを試す、かなり実感のある開発になりました。

AIが毎朝、僕の代わりにニュースを届けてくれる話──X APIとDiscordで作った「自動情報収集ボット」

正直に言うと、毎日ニュースを追うのが嫌になっていた。

ChatGPT、Claude、Gemini……AIの進化はまるで毎日何かが変わる。でも気づけばタブを開いては閉じ、タイムラインを眺めては流し、いつのまにか「大事な情報を見逃していないか」という漠然とした不安だけが残っていた。

「もう、ボットに全部やらせればいい」

そう思って作り始めたのが、今回紹介する AI News Discord Bot だ。


何をするツールか

一言で言えば、毎朝自動でAIニュースを収集し、日本語に翻訳してDiscordに投稿するボットだ。

情報源は大きく2つある。

まずRSSフィード。TechCrunch AI、The Verge、VentureBeat、MIT Tech Review、HuggingFace Blog、OpenAI News……英語圏の主要メディアから最新記事を引っ張ってくる。

もうひとつがX(旧Twitter)のAPI。AIに関する公式アカウントの投稿や、「AI副業で稼いだ」「このプロンプトが神だった」系のエンゲージメントの高いツイートを48時間以内で収集する。

そして集めた情報をClaude Haiku(Anthropicの軽量・高速モデル)に渡す。Haikuは「これは本当に有益か?」をフィルタリングし、英語記事なら日本語に翻訳・3文で要約して返してくれる。

最終的にDiscordのチャンネルへ、カテゴリ別にきれいに整形されて届く。


5つのカテゴリで情報を分類

ボットが仕分けするカテゴリはこの5つだ。

  • 最新AIニュース ── 新モデルのリリース、主要企業の発表、AI規制の動向
  • AI技術情報 ── 新アーキテクチャ、ベンチマーク比較、推論最適化など開発者向け情報
  • Claude/ChatGPT/Gemini Tips ── 実際に使えるプロンプトや新機能の活用法
  • AI副業マネタイズ(国内) ── note、Brain、Coconalaなど日本のプラットフォームでの収益化事例
  • AI副業マネタイズ(海外) ── Fiverr、Gumroad、PromptBaseなど海外での稼ぎ方

「全部追いたいけど全部は無理」という状況を、ボットが解決してくれる。


作ってみて気づいたこと

このボットを動かし始めて、情報との付き合い方が変わった。

朝起きてDiscordを開くと、すでに整理された情報が届いている。英語が苦手でも関係ない。HaikuがすべてをきれいにAI翻訳して、要点だけ届けてくれる。

「知らなきゃいけない」という焦りがなくなった。

X APIを使っているのがポイントで、フォロワーが多いアカウントの人気ツイートだけを拾えるので、バズった有益情報を漏らさず収集できる。いいね数とRTに重みをつけてスコアリングしているので、エンゲージメントが高い投稿が上に来る仕組みだ。


使用技術まとめ

  • Python 3
  • X API v2(Bearer Token認証)
  • RSS解析(urllib)
  • Claude Haiku API(フィルタリング・翻訳・要約)
  • Discord Webhook(Embed形式で整形送信)
  • Windowsタスクスケジューラ(PowerShellで毎朝9時に自動実行)

「ゼロからリスタート」している今だからこそ

このブログのテーマは「ゼロからのリスタート」だ。

正直、技術的にゼロから始めた人間が、X APIとClaudeをつないで情報収集を自動化できるようになるとは思っていなかった。

でも動いた。毎朝9時に、ちゃんとDiscordに届く。

これはちっちゃな自信になった。「自分でも作れる」という感覚は、次への一歩を軽くしてくれる。

まだまだ改善したいことは山ほどある。でもまず「動くものを作った」という事実が、今の自分には一番大事なことだと思っている。