daily-report について
GitHub、Jira、Google Calendarの活動をまとめ、下書きを作成して、ユーザーの確認後にGitHub Issueとして投稿する日報スキルです。期間指定での取得や、メンション通知を避けるリンクなしの形式に対応します。
主な機能
- 01期間を指定したGitHub活動の取得
- 02Jiraワークアイテムの検索
- 03Slackのカレンダーメッセージから会議を抽出
- 04確認用レポートの下書き作成
- 05承認後のGitHub Issue投稿
活用シーン
- 01日々のコード作業と課題をまとめる
- 02当日の会議を業務レポートに含める
- 03公開前にレポートを確認・編集する
MCP 対応
Slack MCP関連のトークン環境変数を使い、Slack経由でGoogle Calendarの会議メッセージを取得します。READMEにはMCPサーバーのインターフェースは記載されていません。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ i9wa4/ dotfiles --skill daily-reportインストール後、Claude Code で/daily-reportを入力して読み込まれたか確認します。
同梱ファイルscripts/get-activities.shscripts/get-team-activities.sh
詳細
日報スキル
@i9wa4 の GitHub および Jira のアクティビティを要約し、GitHub Issue として投稿します。
1. 前提条件
- gh CLI がインストールされていること
- jq がインストールされていること
- acli がインストールされていること(Jira 用)
2. ワークフロー
2.1. GitHub アクティビティを取得する
専用スクリプトを使用してアクティビティを取得します。 デフォルトでは、現在の時刻(UTC で計算)から過去 24 時間のアクティビティを取得します。
2.1.1. スクリプトの場所
${CLAUDE_CONFIG_DIR}/skills/daily-report/scripts/get-activities.sh
2.1.2. コマンドの例
# Default: 24 hours ago to now (local repos only via ghq list)
${CLAUDE_CONFIG_DIR}/skills/daily-report/scripts/get-activities.sh --no-url
# Specify hours: N hours ago to now
${CLAUDE_CONFIG_DIR}/skills/daily-report/scripts/get-activities.sh --hours 48 --no-url
# Specify datetime directly (ISO8601, UTC)
${CLAUDE_CONFIG_DIR}/skills/daily-report/scripts/get-activities.sh --from 2025-12-16T15:00:00Z --to 2025-12-17T15:00:00Z --no-url
2.1.3. オプション
| オプション | 説明 |
|---|---|
| --no-url | URL を含めずに出力します(メンション通知を防ぎます) |
| --hours N | N 時間前から現在までのアクティビティを取得します |
| --from | 開始日時(ISO8601、例:2025-12-17T00:00:00Z) |
| --to | 終了日時(ISO8601、例:2025-12-17T23:59:59Z) |
| --hostname | GitHub Enterprise Server のホスト名 |
| --exclude-owner | 指定したオーナーのリポジトリを除外します(カンマ区切り、デフォルト:i9wa4) |
| --include-personal | 個人リポジトリを含めます(--exclude-owner を上書きします) |
2.1.4. 出力形式
### repository-owner/repository-name
- [Issue] Issue title
- [IssueComment] Issue title
- [PullRequest] PR title
- [PullRequestComment] PR title
- [ReviewedPR] PR title (PRs reviewed by me, excludes my own PRs)
注:URL を省略してメンション通知を防ぐには、--no-url オプションを使用してください。
注:個人リポジトリ(i9wa4/*)はデフォルトで除外されます。
2.2. Jira アクティビティを取得する
acli を使用して Jira アクティビティを取得します。
# Today's activities
acli jira workitem search \
--jql "updated >= startOfDay() AND (assignee = currentUser() OR reporter = currentUser()) ORDER BY updated DESC" \
--fields "key,summary,status"
# Specific date range
acli jira workitem search \
--jql "updated >= 'YYYY-MM-DD' AND updated < 'YYYY-MM-DD' AND (assignee = currentUser() OR reporter = currentUser()) ORDER BY updated DESC" \
--fields "key,summary,status"
2.3. Google Calendar から会議を取得する
Slack の DM 経由で Google Calendar から今日の会議を取得します。
2.3.1. 前提条件
必要な環境変数:
export SLACK_GCAL_DM_URL="https://app.slack.com/client/E.../D..."
export SLACK_MCP_XOXC_TOKEN="xoxc-..."
export SLACK_MCP_XOXD_TOKEN="xoxd-..."
2.3.2. 過去 24 時間のメッセージを取得する
# Extract channel ID from URL
CHANNEL=$(echo "$SLACK_GCAL_DM_URL" | sed -n 's|.*/client/[^/]*/\([^/]*\).*|\1|p')
# Fetch messages
FILE=$(mkoutput --dir tmp --label output)
curl -s -X POST "https://slack.com/api/conversations.history" \
-H "Authorization: Bearer $SLACK_MCP_XOXC_TOKEN" \
-H "Cookie: d=$SLACK_MCP_XOXD_TOKEN" \
-d "channel=${CHANNEL}" \
-d "limit=200" > "$FILE"
# Filter messages from last 24 hours
NOW=$(date +%s)
YESTERDAY=$((NOW - 86400))
jq -r --argjson yesterday "$YESTERDAY" \
'.messages[] | select(.ts | tonumber > $yesterday)' "$FILE"
2.3.3. 今日の予定を抽出する
過去 24 時間のメッセージから「Today」のサマリーメッセージを探します。 このメッセージには、その日のすべての会議が attachments 配列に含まれています。
主な目印:
- メッセージテキストが
*Today*-<!date^...で始まる - Attachments に Unix タイムスタンプ付きの会議情報が含まれている
2.3.4. タイムスタンプから会議時刻を解析する
会議時刻には Unix タイムスタンプ形式が使用されます:<!date^UNIX_TIMESTAMP^{time}|...>
タイムスタンプをローカル時刻に変換します:
date -r UNIX_TIMESTAMP "+%H:%M"
2.3.5. 出力形式
Attachments から次の情報を抽出します:
- 会議名:リンクテキストから取得します(例:
|Meeting Name>*) - 開始/終了時刻:Unix タイムスタンプを HH:MM 形式に変換します
- キャンセルされた会議は除外します(別のメッセージで取り消し線が付いています)
形式:- 会議名 (HH:MM-HH:MM)
2.4. 下書きを作成する
ファイルを作成します:
FILE=$(mkoutput --dir tmp --label "daily-$(whoami)")
注意:「Today's AI Activities」セクションにはコマンドブロックを残してください。 コマンドを実行し、結果をコマンドブロックの下に貼り付けてください。
テンプレート:
---
title: "YYYY-MM-DD $(whoami)"
labels:
- name: "日報"
color: "0887b9"
---
## 1. Reflection
## 2. Today's Activities
### 2.1. GitHub
Organize gh-furik output. Classify as follows:
#### 2.1.1. Created Issues
- [repo-name] Issue title
#### 2.1.2. Created PRs
- [repo-name] PR title
- [repo-name] PR title (merged)
- Add supplementary comments indented
#### 2.1.3. Reviewed PRs
- [repo-name] PR title
#### 2.1.4. Commented Issues/PRs
- [repo-name] Issue/PR title
### 2.2. Jira
- [KEY-123] Issue summary (status)
### 2.3. Meetings
- Meeting name
- Supplementary comments
2.5. ユーザーの編集を待つ
下書きを表示し、ユーザーによる編集を待ちます。ユーザーが所感を追加します。
2.6. Issue を投稿する
gh issue create を使用して投稿します:
gh issue create --title "YYYY-MM-DD $(whoami)" --label "日報" --body "$(cat <<'EOF'
[body]
EOF
)"
投稿後、Issue の URL を表示します。
3. 重要なルール
- 直接リンクを使用しない:PR/Issue に直接リンクしないでください(メンションが発生します)。 タイトルのみを使用してください
- PR/Issue 番号:
(# 123)のように、#の後にスペースを入れてください((#123)ではありません)。 スペースがないと、GitHub が意図しないリポジトリに自動リンクします。 - 下書きの確認:必ずユーザーに下書きを表示し、編集を待ってください
- Issue の投稿:ユーザーが下書きの準備完了を確認してから投稿してください
4. 出力タイプの分類
スクリプトの出力を次のように分類します:
| 出力タイプ | 分類 |
|---|---|
| Issue | 作成した Issue |
| PullRequest | 作成した PR |
| ReviewedPR | レビューした PR |
| IssueComment | コメントした Issue/PR |
| PullRequestComment | コメントした Issue/PR |
注:同じ Issue/PR への複数のコメントは、1 つにまとめてください。 注:ReviewedPR には、他のユーザーが作成した PR のみを含めます(自分の PR は除外します)。