もどる

2026-06-19

週報をGitHub Actionsで自動化した

ログに貯めた毎週の活動記録を、Claude APIがその週の分だけ読んで要約し、週報として自動でGitHubにコミット・メール送信する仕組みをGitHub Actionsで作りました。最初は空テンプレートを作るだけでしたが、AI要約まで任せる形に作り替えています。

背景

AI制作を一緒にやっている仲間に週ごとの活動を報告しよう!と思いましたが、面倒なので「AIとの作業ログを管理する仕組みを作った」で貯めているAIとの作業ログを読み込んで、GitHub Actionsを使って毎週自動でファイルを生成・メール送信する仕組みを作りました。自分でもたまに過去に何をやっていたか振り返る時があるので、その際にも使えます。

最初のバージョンは見出しだけの空テンプレートを作るところまででしたが、その後 Claude API を組み込み、その週のログを実際に読んで週報の中身まで書いてくれるように作り替えました。

仕組み

毎週月曜0時(JST)に GitHub Actions が起動し、次の処理を自動で実行します。

  1. logsリポジトリの raw/ から、前の1週間(月〜日)分のログを集める
  2. 集めたログを Claude API(Opus 4.8)に渡し、「やったこと」「進んだこと」「詰まったこと」「来週やること」「気づき」といった見出しごとに要約してもらう
  3. 要約を週報テンプレートに流し込んで weekly/YYYY/wNN_YYYYMMDD.md を生成(例 logs/weekly/2026/w25_20260615.md)
  4. リポジトリにコミット・push
  5. 登録されているメールアドレスにメール送信

GitHub Actions はクラウドで動くため、ローカルPCを起動する必要がないところが良い点です。要約は AI に任せているので、ログをたくさん書いた週でも、読みやすい分量の週報に自動でまとまります。

工夫したところ

  • 対象はいつも「前の週」:月曜0時に動く都合上、その時点でまだ始まったばかりの今週を要約しようとしてもログがありません。そこで「前日の日曜に終わった週」を対象にしています。
  • 手で書いた週報は上書きしない:中身が空テンプレートのままのファイルだけを対象にし、すでに自分で加筆した週報は保護するようにしました。
  • ログが無い週はスキップ:その週のログが1件も無ければ、空の週報は作らずに何もしません。

ファイル命名規則

weekly/2026/w25_20260615.md
  • wNN:ISO週番号
  • YYYYMMDD:その週の月曜日の日付

タイムゾーンはワークフロー内の Python スクリプトで Asia/Tokyo を指定することで、ファイル名と日付がずれないようにしています。

設定(GitHub Secrets)

外部サービスの鍵は、すべて GitHub Secrets に登録して呼び出しています。Secrets は Actions 画面の Settings → Secrets and variables → Actions で管理します。

  • ANTHROPIC_API_KEY:Claude API を呼ぶための鍵。用途ごとに分けたかったので、週報用のキーを新しく発行して登録しました。
  • MAIL_USERNAME / MAIL_PASSWORD:メール送信用。Gmail のアプリパスワードを発行して登録しています。