くまがいブログ

エンジニアに目指す社会人

HCの月報を簡単にしてみよう

目次

GitHub Actions を使って、リポジトリ内の Markdown ファイルで作成した日報ファイルをマージし、それぞれのファイルの最新のコミットメッセージを追加し月報を作成するのを楽にする方法を紹介します。

開発した理由


月報を作成する際に一個一個日報をみて思い出すのが時間がかかり効率悪いなと感じていました。HappinessChainでは管理アプリのKIRARAを通じて日々の学習を Markdown 形式で日報を記録しているので、月報でうまく利用できないか考えました。手動でファイルをコピー・結合する作業は非効率であり、作業ミスで抜けや重複のリスクもあります。

そこで、GitHub Actions を活用して Markdown ファイルを自動でマージするものを作成しました。

このスクリプトを使用することで、

  • 日報データを自動的にまとめることができる。
  • GitHub Actions によって完全に自動化し、手作業の負担を軽減できる。

これにより、月報作成の手間を省き、記録の正確性を向上させることができます。

GitHub Actions の設定


GitHub Actions で git push を実行するためには、適切な権限設定が必要です。

GITHUB_TOKENに書き込み権限を付与する

  1. daily_reportレポジトリを開く
  2. リポジトリの「Settings(設定)」を開く
  3. 「Actions」→「General(全般)」を選択
  4. 「Workflow permissions(ワークフローの権限)」を「Read and write permissions(読み書き許可)」に設定
  5. 「Save(保存)」をクリック
  6. GitHub Actions を手動で実行して確認

GitHub Actions のワークフローを作成


daily_reportレポジトリ内に.github/workflows/merge_daily_reports.yml というファイルを作成し、以下の内容を記述します。

name: Merge Daily Reports

on:
  workflow_dispatch:
    inputs:
      target_month:
        description: '対象の月 (now: 今月, last: 先月)'
        required: true
        default: 'last'

jobs:
  merge:
    runs-on: ubuntu-latest
    env:
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}  # 環境変数でトークン設定

    steps:
      - name: リポジトリをチェックアウト(全ファイル取得)
        uses: actions/checkout@v4
        with:
          ref: main
          fetch-depth: 0

      - name: 実行対象の年月を決定
        run: |
          if [ "${{ github.event.inputs.target_month }}" == "now" ]; then
            YEAR=$(date +'%Y')
            MONTH=$(date +'%m')
          else
            YEAR=$(date --date="last month" +'%Y')
            MONTH=$(date --date="last month" +'%m')
          fi

          echo "YEAR=$YEAR" >> $GITHUB_ENV
          echo "MONTH=$MONTH" >> $GITHUB_ENV

      - name: Markdownファイルを結合(各ファイルの LAST_COMMIT_MSG を追加)
        run: |
          REPORT_DIR="$YEAR/$MONTH"
          OUTPUT_FILE="${YEAR}-${MONTH}-merged.md"

          echo "Looking for files in: $REPORT_DIR"

          if [ ! -d "$REPORT_DIR" ]; then
            echo "Directory $REPORT_DIR does not exist. Skipping merge."
            exit 0
          fi

          # 先頭にタイトルを追加
          echo -e "# Merged Daily Reports for $YEAR-$MONTH\n\n" > "$OUTPUT_FILE"

          # 各ファイルに対して処理
          for file in $(ls "$REPORT_DIR"/*.md | sort); do
            # 各ファイルの最新コミットメッセージを取得
            LAST_COMMIT_MSG=$(git log -1 --pretty=%B -- "$file")

            # ファイルの内容を取得
            CONTENT=$(cat "$file")

            # 結合用のフォーマットで出力
            echo -e "## $(basename "$file")\n" >> "$OUTPUT_FILE"
            echo -e "**Last Commit Message:** $LAST_COMMIT_MSG\n" >> "$OUTPUT_FILE"
            echo -e "$CONTENT\n\n" >> "$OUTPUT_FILE"
          done

      - name: 変更をコミット & プッシュ
        run: |
          git config --global user.name "github-actions[bot]"
          git config --global user.email "github-actions[bot]@users.noreply.github.com"

          MERGED_FILE="${YEAR}-${MONTH}-merged.md"

          if [ -f "$MERGED_FILE" ]; then
            git add "$MERGED_FILE"
            git commit -m "${YEAR}年${MONTH}月の日報を結合"

            # `GITHUB_TOKEN` を使って認証して push
            git remote set-url origin https://x-access-token:${GITHUB_TOKEN}@github.com/${{ github.repository }}.git
            git push origin main
          else
            echo "Merged file $MERGED_FILE does not exist. Skipping commit & push."
            exit 0
          fi


動作の流れ


  1. GitHub Actions を手動実行
    • GitHub の Actions タブから Run workflow をクリック。
    • target_monthnow(今月)または last(先月)に設定。
  2. 対象の年月 (YYYY/MM) を自動決定
    • now: date +'%Y' / date +'%m'
    • last: date --date="last month" +'%Y' / date --date="last month" +'%m'
  3. 対象ディレクトリの .md ファイルを結合し、各ファイルの Last Commit Message を取得して追加
  4. 結合した YYYY-MM-merged.md をコミット & プッシュ

期待される出力


01.md
Last Commit Message: 20250201の日報作成

取り組んだこと
タイピング練習
Django で EC サイトを作る(Herokuにデプロイ)
わかったこと
デプロイ方法も二種類ある
次やること
Django で EC サイトを作る(デプロイする)
感じたこと
プランとか調べるだけで終わってしまった。
学習時間
2h

02.md
Last Commit Message: 20250202の日報作成

取り組んだこと
タイピング練習
Django で EC サイトを作る(Herokuにデプロイ)
わかったこと
デプロイ大変...
次やること
Herokuチュートリアルに従ってデプロイしてみる
Django で EC サイトを作る(デプロイする)
感じたこと
全然うまくいかん。なにが足りないのか、何が悪いのかももわからない。
学習時間
2h

まとめ


✅ Markdown ファイルを自動でマージ
✅ 各ファイルの最新コミットメッセージを追加
✅ GitHub Actions による自動化 & プッシュ

この方法を使えば、日報を一つのファイルに簡単にまとめることができます!
私はこのデータを生成AIに渡して月報のたたきを作ってもらっています。
良かったら活用してみてください。