目次
はじめに
この記事は「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 が要約してくれることで、週報作成にかかる時間を短縮できるだけでなく、
毎週の内容を客観的にレビューしやすくなり、学習のモチベーション維持にもつながりそうです。出力された内容はチェックや修正は必要ですが、「面倒だな」と思うことが少しでも減ったので作った甲斐はあったと思います。