mcpField
D
daily-report

daily-report

github.com/i9wa4生産性12105 回インストール1 日前に更新
リポジトリ

daily-report について

GitHub、Jira、Google Calendarの活動をまとめ、下書きを作成して、ユーザーの確認後にGitHub Issueとして投稿する日報スキルです。期間指定での取得や、メンション通知を避けるリンクなしの形式に対応します。

主な機能

  1. 01期間を指定したGitHub活動の取得
  2. 02Jiraワークアイテムの検索
  3. 03Slackのカレンダーメッセージから会議を抽出
  4. 04確認用レポートの下書き作成
  5. 05承認後のGitHub Issue投稿

活用シーン

  1. 01日々のコード作業と課題をまとめる
  2. 02当日の会議を業務レポートに含める
  3. 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-urlURL を含めずに出力します(メンション通知を防ぎます)
--hours NN 時間前から現在までのアクティビティを取得します
--from開始日時(ISO8601、例:2025-12-17T00:00:00Z)
--to終了日時(ISO8601、例:2025-12-17T23:59:59Z)
--hostnameGitHub 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. 重要なルール

  1. 直接リンクを使用しない:PR/Issue に直接リンクしないでください(メンションが発生します)。 タイトルのみを使用してください
  2. PR/Issue 番号:(# 123) のように、# の後にスペースを入れてください((#123) ではありません)。 スペースがないと、GitHub が意図しないリポジトリに自動リンクします。
  3. 下書きの確認:必ずユーザーに下書きを表示し、編集を待ってください
  4. Issue の投稿:ユーザーが下書きの準備完了を確認してから投稿してください

4. 出力タイプの分類

スクリプトの出力を次のように分類します:

出力タイプ分類
Issue作成した Issue
PullRequest作成した PR
ReviewedPRレビューした PR
IssueCommentコメントした Issue/PR
PullRequestCommentコメントした Issue/PR

注:同じ Issue/PR への複数のコメントは、1 つにまとめてください。 注:ReviewedPR には、他のユーザーが作成した PR のみを含めます(自分の PR は除外します)。

コメント