目次
GitHub Actions を使って、リポジトリ内の Markdown ファイルで作成した日報ファイルをマージし、それぞれのファイルの最新のコミットメッセージを追加し月報を作成するのを楽にする方法を紹介します。
開発した理由
月報を作成する際に一個一個日報をみて思い出すのが時間がかかり効率悪いなと感じていました。HappinessChainでは管理アプリのKIRARAを通じて日々の学習を Markdown 形式で日報を記録しているので、月報でうまく利用できないか考えました。手動でファイルをコピー・結合する作業は非効率であり、作業ミスで抜けや重複のリスクもあります。
そこで、GitHub Actions を活用して Markdown ファイルを自動でマージするものを作成しました。
このスクリプトを使用することで、
- 日報データを自動的にまとめることができる。
- GitHub Actions によって完全に自動化し、手作業の負担を軽減できる。
これにより、月報作成の手間を省き、記録の正確性を向上させることができます。
GitHub Actions の設定
GitHub Actions で git push
を実行するためには、適切な権限設定が必要です。
GITHUB_TOKENに書き込み権限を付与する
- daily_reportレポジトリを開く
- リポジトリの「Settings(設定)」を開く
- 「Actions」→「General(全般)」を選択
- 「Workflow permissions(ワークフローの権限)」を「Read and write permissions(読み書き許可)」に設定
- 「Save(保存)」をクリック
- 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
動作の流れ
- GitHub Actions を手動実行
- GitHub の
Actions
タブからRun workflow
をクリック。 -
target_month
をnow
(今月)またはlast
(先月)に設定。
- GitHub の
- 対象の年月 (
YYYY/MM
) を自動決定-
now
:date +'%Y'
/date +'%m'
-
last
:date --date="last month" +'%Y'
/date --date="last month" +'%m'
-
- 対象ディレクトリの
.md
ファイルを結合し、各ファイルのLast Commit Message
を取得して追加 - 結合した
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に渡して月報のたたきを作ってもらっています。
良かったら活用してみてください。