目次
はじめに
この記事は「HCの月報を簡単にしてみよう」「GitHub Actions を使って Gemini API で月報を自動生成する」の続きの記事です。
日報を蓄積した Markdown ファイルを週単位でまとめ、自動的に「週報」を生成・コミットする仕組みを構築します。
詳細コードはリポジトリを参照してください。ここでは要点と必要最小限のコードを紹介します。
1. プロジェクトの目的
- 日報(
YYYY/MM/DD.md
)を管理- 毎日の学習や作業を Markdown 形式で保存
- 週ごとのマージ & 要約 → 週報生成
- GitHub Actions + Gemini API で文章を自動生成し、週報を自動コミット
- 手動で文章をまとめる手間を削減し、振り返り精度を向上
2. 全体の流れ
- 手動トリガー
-
workflow_dispatch
で「週の開始曜日」「対象週(last_week/this_week)」を入力
-
- シェルスクリプトで期間計算
-
date -d
を使い、START_DATE
(週初)とEND_DATE
(週末)を算出 - 例(「金曜始まり」「先週」):
END_DATE=$(date -d "last friday" +'%Y/%m/%d') START_DATE=$(date -d "$END_DATE - 6 days" +'%Y/%m/%d')
-
- 日報ファイルをマージ
-
merged/weekly_{開始日}_to_{終了日}.md
を作成 - 期間内の各
YYYY/MM/DD.md
を以下のように追記(見出し+区切り線)echo "---" >> merged_file.md echo "# 2025/06/01" >> merged_file.md cat "2025/06/01.md" >> merged_file.md
- 該当ファイルがなければワークフローを停止
-
- プロンプト文字列を生成
-
weekly_report_template.txt
(テンプレート) + マージ済み日報 を組み合わせ、merged/tmp_prompt.txt
に保存 - 例:
TEMPLATE=$(< weekly_report_template.txt) MERGED=$(< merged/weekly_…md) echo -e "テンプレート:\\n${TEMPLATE}\\n対象:\\n${MERGED}" > merged/tmp_prompt.txt
-
- Gemini API 呼び出し → 要約取得
-
curl
とjq
で JSON ペイロードを作成し POST - 成功時に
.candidates[0].content.parts[0].text
をGENERATED_CONTENT
として取得
-
- 週報ファイルを
.txt
で書き出し-
weekly_report/{開始日}to{終了日}.txt
を作成し、要約文を保存
-
- Git コミット & プッシュ
- Bot ユーザーでコミットし、
origin main
にプッシュ -
git diff --cached --quiet
で差分確認 → 差分がない場合はコミットスキップ
- Bot ユーザーでコミットし、
3. 必要なファイル構成例
-
.github/workflows/generate_weekly_report.yml
- ワークフロー定義(手動トリガー/期間計算/マージ/AI 呼び出し/コミット)
-
weekly_report_template.txt
- 週報のフォーマット見本(プレーンテキスト)
-
YYYY/MM/DD.md
(日報)- 毎日の学習記録ファイル
- (出力)
merged/weekly_…md
、merged/tmp_prompt.txt
- (出力)
weekly_report/2025-05-26to2025-06-01.txt
など
※詳細なディレクトリ構造や完全なコードはリポジトリ内をご確認ください。
4. 実装上のポイント
- シェルで日付計算
-
date -d "last friday"
などを使い、曜日ベースで柔軟に期間を取得 - タイムゾーンは必要に応じて
TZ=Asia/Tokyo
を指定すると安全
-
- ファイルマージ時のフォーマット
-
--
や# YYYY/MM/DD
を挿入して日付を明示 - AI が要約しやすいよう、「テンプレート」「対象の内容」を明示的に分ける
-
- Gemini API 呼び出しのエラー処理
- HTTP ステータスが 2xx 以外ならワークフローを失敗
- レスポンスが空文字や JSON 形式ではない場合もエラーとして扱う
- 自動コミットの差分チェック
-
git diff --cached --quiet
で「前回とまったく同じ内容ならコミットしない」 - 空の週報や内容が更新されなかった場合の無駄コミットを防止
-
5. まとめ
- 最小構成
-
workflow_dispatch
で手動起動 - シェルで週の期間を計算
- 日報マージ → 1 ファイルにまとめる
- テンプレート+マージ内容 → AI プロンプト作成
- Gemini API で要約取得
-
.txt
ファイルとして出力 - コミット & プッシュ
-
- メリット
- 手作業による文章まとめを完全自動化し、振り返りコストを削減
- AI で週報を生成することで、文章品質が安定しやすい
- Git 履歴に週報が残るため、振り返りの蓄積と参照が容易
- 注意点
- 日報の命名規則・フォーマットを統一しておかないとマージ漏れやフォーマット崩れが発生
- Gemini API のレスポンス品質・速度に依存するため、要約結果の確認が必要
- 最終的な Markdown 形式での公開が必要な場合は、手動で
.txt
から.md
に変換する手順を準備
- 感想
このワークフローのおかげで、週報時に振り返り作業が効率化される期待しています。
AI が要約してくれることで、週報作成にかかる時間を短縮できるだけでなく、
毎週の内容を客観的にレビューしやすくなり、学習のモチベーション維持にもつながりそうです。出力された内容はチェックや修正は必要ですが、「面倒だな」と思うことが少しでも減ったので作った甲斐はあったと思います。