[GITHUB] その日作業したPull Requestを抽出してMarkdownでサマリーを作るスクリプト

日報とかに書くときに便利かも。

実装

スクリプトファイルの作成

gh_daily_report.shというファイルを作成、中身の構成は以下:

#!/bin/bash
# ============================================================
# gh_daily_report.sh
# その日に作成 or コメントしたPRをMarkdownで出力
# ============================================================

GITHUB_TOKEN="${GITHUB_TOKEN:-}"
REPO="${1:-}"
TARGET_DATE="${2:-$(date +%Y-%m-%d)}"

if [ -z "$GITHUB_TOKEN" ]; then
  echo "Error: GITHUB_TOKEN が設定されていません"
  exit 1
fi

if [ -z "$REPO" ]; then
  echo "Usage: $0 <owner/repo> [YYYY-MM-DD]"
  exit 1
fi

gh_api() {
  curl -sf \
    -H "Authorization: Bearer $GITHUB_TOKEN" \
    -H "Accept: application/vnd.github+json" \
    -H "X-GitHub-Api-Version: 2022-11-28" \
    "$1"
}

ME=$(gh_api "https://api.github.com/user" | jq -r '.login')
SINCE="${TARGET_DATE}T00:00:00+09:00"
UNTIL="${TARGET_DATE}T23:59:59+09:00"

echo "取得中... (repo: $REPO, date: $TARGET_DATE, user: $ME)" >&2

# ---- 1. 今日作成したPR ----
CREATED=$(gh_api \
  "https://api.github.com/repos/${REPO}/pulls?state=all&per_page=100" \
  | jq -r --arg me "$ME" --arg since "$SINCE" --arg until "$UNTIL" '
    .[] | select(.user.login == $me)
    | select(.created_at >= $since and .created_at <= $until)
    | {number: .number, title: .title, url: .html_url}
  ')

# ---- 2. 今日一般コメントしたPR (PRもissues APIで取れる) ----
ISSUE_COMMENT_PR_NUMBERS=$(gh_api \
  "https://api.github.com/repos/${REPO}/issues/comments?since=${SINCE}&per_page=100" \
  | jq -r --arg me "$ME" --arg until "$UNTIL" '
    .[] | select(.user.login == $me)
    | select(.created_at <= $until)
    | .issue_url | split("/") | last
  ' | sort -u)

# ---- 3. 今日レビューコメントしたPR ----
REVIEW_COMMENT_PR_NUMBERS=$(gh_api \
  "https://api.github.com/repos/${REPO}/pulls/comments?since=${SINCE}&per_page=100" \
  | jq -r --arg me "$ME" --arg until "$UNTIL" '
    .[] | select(.user.login == $me)
    | select(.created_at <= $until)
    | .pull_request_url | split("/") | last
  ' | sort -u)

# ---- コメント系のPR番号をまとめてタイトル取得 ----
ALL_COMMENT_NUMBERS=$(echo -e "${ISSUE_COMMENT_PR_NUMBERS}\n${REVIEW_COMMENT_PR_NUMBERS}" | sort -u | grep -v '^$')

COMMENTED=""
while IFS= read -r num; do
  [ -z "$num" ] && continue
  # ⬇️ テキストリンク形式 `-[タイトル](URL)` に修正
  item=$(gh_api "https://api.github.com/repos/${REPO}/pulls/${num}" \
    | jq -r 'select(.number != null) | "- [\(.title)](\(.html_url))"')
  [ -n "$item" ] && COMMENTED="${COMMENTED}${item}\n"
done <<< "$ALL_COMMENT_NUMBERS"

# ---- Markdown出力 ----
echo ""
echo "# 📋 作業サマリー ($TARGET_DATE)"
echo ""
echo "## 🔀 Pull Request"
echo ""

HAS=false

if [ -n "$CREATED" ]; then
  echo "### **作成**"
  # ⬇️ テキストリンク形式 `-[タイトル](URL)` に修正
  echo "$CREATED" | jq -r '"- [\(.title)](\(.url))"'
  echo ""
  HAS=true
fi

if [ -n "$(printf '%b' "$COMMENTED")" ]; then
  echo "### **コメント・レビュー**"
  printf "%b" "$COMMENTED"
  echo ""
  HAS=true
fi

if [ "$HAS" = false ]; then
  echo "_なし_"
fi

保存したら、ターミナル上でこのファイルの実行権限を与える。

chmod +x gh_daily_report.sh

(+xでこのファイルを実行してもいいよという権限を与える役割)

必要な引数

Repo権限のあるTOKENを発行して、手元にメモしておく。

ghp_xxxxxxみたいなやつです、TOKEN名は何でもOK。

実行

ターミナルを開いて、以下を実行

export GITHUB_TOKEN=ghp_xxxxx
./gh_daily_report.sh リポジトリ名

リポジトリ名は、https://github.com/以降の部分です。

もし特定の日付の作業を抽出したいなら、リポジトリ名の次に日付をつければその日付でフィルタリングして返してくれます。

./gh_daily_report.sh リポジトリ名 2026-04-16