14
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

n8nでGoogleカレンダーから日報を自動生成してDiscordへ投稿する仕組みを作った

14
Posted at

はじめに

毎日の日報作成、地味に面倒ではないでしょうか。

予定はGoogleカレンダーに入っているのに、その内容を見返して日報にまとめ直すのは二度手間。

そこで今回は、n8nでGoogleカレンダーの予定を取得し、Geminiで日報化してDiscordへ自動投稿する仕組みを作ってみました。

完成すると、毎営業日18時にこんな流れで自動化されます。

  • Googleカレンダーから当日の予定取得
  • タイトル、時間、説明欄を整形
    ^ Geminiで自然な日報下書きを生成
  • Discordに自動投稿

完全放置で日報のたたき台ができます。

作ったワークフロー全体像

Schedule Trigger
↓
Google Calendar
↓
Code(予定整形)
↓
AI Agent(Gemini)
↓
Code(投稿整形)
↓
Discord

シンプルですがかなり実用的です。

できること

生成される投稿例

【日報下書き】
2026/04/28(火)の業務報告です。
本日は朝会での状況共有から始まり、午前中に顧客MTG、午後は開発作業および1on1を実施しました。顧客MTGで発生した見積作成等のタスクを順次進めていく予定です。

【本日の作業】
・09:30〜10:00 朝会
・11:00〜12:00 顧客MTG
・13:30〜16:00 開発作業(Deep Work)
・16:30〜17:00 1on1

【進捗】
・朝会にて、APIの実装状況確認と本日の優先タスク整理を行いました。
・顧客MTGにて、要件確認および画面仕様のレビューを実施しました。次回対応事項についても整理済みです。
・開発作業では、認証バグの修正およびテストコードの追加を行いました。あわせてプルリクエストの提出作業を進めています。
・1on1にて、現在の案件状況の共有とキャリアに関する相談、および来週のタスク確認を行いました。

【課題・相談】
・朝会にてブロッカーの相談を行いました。
・顧客MTGを受け、以下の対応が必要です。
 - 見積書の作成
 - 仕様確認メールの送付

【明日の予定】
・顧客MTGで発生した見積作成および仕様確認メールの送付
・1on1で確認した来週以降のタスクに向けた準備

使用ノード

今回使うのは6ノード。

1. Schedule Trigger

毎営業日18時に起動します。

2. Google Calendarで当日予定取得

設定ポイント

  • Calendar: primary
  • timeMin
{{ $now.startOf('day').toISO() }}
  • timeMax
{{ $now.endOf('day').toISO() }}

これで今日の予定だけ取れます。

orderBy を startTime にして時系列順にしています。

3. CodeノードでAI向けに整形

LLMにそのまま生データを渡すと扱いにくいので、
プロンプトに入れやすい形へ整形します。

やっていること
HTML除去
カレンダー説明欄はHTML混じることがあるため整形します。

.replace(/<[^>]*>/g,'')

時刻整形

toLocaleTimeString('ja-JP',{
 timeZone:'Asia/Tokyo',
 hour:'2-digit',
 minute:'2-digit'
})

09:30形式に変換しています。

イベントを自然文へ変換

【予定1】
タイトル: 顧客MTG
時間: 10:00〜11:00
場所: Zoom
説明欄:
要件確認

精度向上のためこの形にしてGeminiへ渡します。

4. AI Agentで日報生成

Prompt (User Message)

以下は今日のGoogleカレンダー予定です。
予定タイトル、時間、場所、説明欄をもとに、Discordに投稿する日報の下書きを日本語で作成してください。
日付: {{ $json.today }}
カレンダー予定:{{ $json.calendarText }}

System Prompt
指定したフォーマット

  • 日報下書き
  • 本日の作業
  • 進捗
  • 課題相談
  • 明日の予定

さらに

カレンダーにない内容を断定しない

を入れてハルシネーション防止します。

5. 投稿前の後処理

生成文をそのままDiscordへ送らずに
Codeノードで整形します。

前置き削除

モデルが余計な説明を出す場合を除去します。

text.replace(/^.*?【日報下書き】/s,'【日報下書き】')

Markdownノイズ削除

text.replace(/^\*{3,}$/gm,'')

6. Discord自動投稿

contentに

{{$json.content}}

を渡して投稿します。

この構成の良いところ

1 予定説明欄まで活かせる

タイトルだけでなく説明欄も要約対象。

例えば

  • APIレビュー
  • 顧客要件整理
  • 認証修正

こういう文脈まで日報化される。

普通の予定取得だけより精度が高くなります。

2 Discord投稿まで自動

通知と日報生成が一体化。
Slack等への応用も可能です。

まとめ

n8nだけで

  • Googleカレンダー取得
  • AI日報生成
  • Discord投稿

までノーコード寄りで実装できました。

日報を書く時間が減るだけでなく、
予定の説明欄をちゃんと書く習慣もできるので副次効果も大きいです。

  • Slack版
  • 週報版

なども作ると便利そうだと感じました。

14
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?