From f5eac097b256c32bbdf3c9df40ccc7218110c527 Mon Sep 17 00:00:00 2001 From: hiroki ito Date: Fri, 3 Apr 2026 21:58:42 +0900 Subject: [PATCH] =?UTF-8?q?fix(=E3=82=B3=E3=83=9F=E3=83=8D=E3=82=B3):=20sc?= =?UTF-8?q?hedule=20YAML=E3=83=90=E3=82=B0=E3=82=92=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=E3=81=97README=E3=82=92=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Made-with: Cursor --- .claude/prompts/daily-report.md | 3 +- .claude/skills/slack-formatting/SKILL.md | 4 +- .../slack-formatting/scripts/post-report.js | 6 +- .github/workflows/daily-report.yml | 10 +- .github/workflows/report-job.yml | 11 +- README.md | 147 +++++++++++++++--- 6 files changed, 133 insertions(+), 48 deletions(-) diff --git a/.claude/prompts/daily-report.md b/.claude/prompts/daily-report.md index 1d25876..e07f4d7 100644 --- a/.claude/prompts/daily-report.md +++ b/.claude/prompts/daily-report.md @@ -307,8 +307,7 @@ node .claude/skills/slack-formatting/scripts/post-report.js \ **このスクリプトが行うこと:** - ✅ 複数画像を1メッセージにまとめて投稿 - ✅ チャンネルに直接投稿(スレッドではない) -- ✅ 環境変数 `SLACK_CHANNEL` からチャンネルIDを取得 -- ✅ 未設定の場合はデバッグチャンネル `YOUR_DEBUG_CHANNEL_ID` に投稿 +- ✅ 環境変数 `SLACK_CHANNEL` からチャンネルIDを取得(必須) ## 注意事項 diff --git a/.claude/skills/slack-formatting/SKILL.md b/.claude/skills/slack-formatting/SKILL.md index d1b8450..3a0d8d8 100644 --- a/.claude/skills/slack-formatting/SKILL.md +++ b/.claude/skills/slack-formatting/SKILL.md @@ -44,9 +44,7 @@ node .claude/skills/slack-formatting/scripts/post-report.js \ | 環境変数 | 用途 | 必須 | |----------|------|------| | `SLACK_BOT_TOKEN` | Bot User OAuth Token | ✅ | -| `SLACK_CHANNEL` | 投稿先チャンネルID | ※未設定時はデバッグチャンネル | - -**デバッグ用チャンネル**: `YOUR_DEBUG_CHANNEL_ID` +| `SLACK_CHANNEL` | 投稿先チャンネルID | 必須 | ### スクリプトが行うこと diff --git a/.claude/skills/slack-formatting/scripts/post-report.js b/.claude/skills/slack-formatting/scripts/post-report.js index 4070c88..e9080d6 100644 --- a/.claude/skills/slack-formatting/scripts/post-report.js +++ b/.claude/skills/slack-formatting/scripts/post-report.js @@ -24,7 +24,6 @@ const https = require('https'); // 環境変数(SLACK_CHANNEL または SLACK_CHANNEL_ID をサポート) const SLACK_TOKEN = process.env.SLACK_BOT_TOKEN; const CHANNEL_ID = process.env.SLACK_CHANNEL || process.env.SLACK_CHANNEL_ID; -const DEBUG_CHANNEL = 'YOUR_DEBUG_CHANNEL_ID'; // ======================================== // ログ出力(原因特定用) @@ -146,7 +145,7 @@ async function completeUpload(fileIds, message, channelId) { // メイン処理 // ======================================== async function postReport(imagePaths, message) { - const channelId = CHANNEL_ID || DEBUG_CHANNEL; + const channelId = CHANNEL_ID; logSection('SLACK投稿開始'); log(`投稿先チャンネル: ${channelId}`); @@ -215,7 +214,8 @@ async function main() { } if (!CHANNEL_ID) { - log(`警告: SLACK_CHANNEL が未設定のため、デバッグチャンネル (${DEBUG_CHANNEL}) に投稿します`); + console.error('エラー: SLACK_CHANNEL(または SLACK_CHANNEL_ID)環境変数が必要です'); + process.exit(1); } // 引数パース diff --git a/.github/workflows/daily-report.yml b/.github/workflows/daily-report.yml index a5d0b67..9bb48ab 100644 --- a/.github/workflows/daily-report.yml +++ b/.github/workflows/daily-report.yml @@ -1,20 +1,15 @@ name: Daily Commit Report on: - schedule: - # - cron: '0 22 * * *' # 毎日7:00 JST(有効にするにはコメントを外す) workflow_dispatch: inputs: - debug: - description: 'デバッグモード(テスト用チャンネルに投稿)' - required: false - default: false - type: boolean target_date: description: '対象日(YYYY-MM-DD、省略時は前日)' required: false default: '' type: string + # schedule: + # - cron: '0 22 * * *' # 毎日7:00 JST(有効にするにはコメントを外す) jobs: report: @@ -22,7 +17,6 @@ jobs: with: project_name: your-project config_file: configs/projects/your-project.yml - debug_channel: ${{ github.event.inputs.debug == 'true' && 'YOUR_DEBUG_CHANNEL_ID' || '' }} target_date: ${{ github.event.inputs.target_date }} secrets: ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} diff --git a/.github/workflows/report-job.yml b/.github/workflows/report-job.yml index ac3b5dd..2074c0f 100644 --- a/.github/workflows/report-job.yml +++ b/.github/workflows/report-job.yml @@ -11,11 +11,6 @@ on: description: '設定ファイルパス' required: true type: string - debug_channel: - description: 'デバッグ用チャンネルID(指定時はこちらに投稿)' - required: false - type: string - default: '' target_date: description: '対象日(YYYY-MM-DD形式、省略時は前日)' required: false @@ -82,7 +77,7 @@ jobs: env: GH_TOKEN: ${{ secrets.GH_TOKEN }} SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }} - SLACK_CHANNEL: ${{ inputs.debug_channel != '' && inputs.debug_channel || secrets.SLACK_CHANNEL }} + SLACK_CHANNEL: ${{ secrets.SLACK_CHANNEL }} TARGET_DATE: ${{ inputs.target_date }} - name: Notify failure to Slack @@ -112,9 +107,9 @@ jobs: -H "Authorization: Bearer $SLACK_BOT_TOKEN" \ -H "Content-Type: application/json" \ -d '{ - "channel": "'"${SLACK_CHANNEL:-YOUR_DEBUG_CHANNEL_ID}"'", + "channel": "'"${SLACK_CHANNEL}"'", "text": ":x: *コミネコ エラー発生*\n\nプロジェクト: ${{ inputs.project_name }}\n失敗箇所: '"$FAILED_STEP"'\nワークフロー実行: <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|詳細を確認>" }' env: SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }} - SLACK_CHANNEL: ${{ inputs.debug_channel != '' && inputs.debug_channel || secrets.SLACK_CHANNEL }} + SLACK_CHANNEL: ${{ secrets.SLACK_CHANNEL }} diff --git a/README.md b/README.md index dd2bdbc..48ee324 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ GitHubのコミットをAIで分析し、図解レポートをSlackに自動投稿するツールです。愛称は「コミネコ」。 +このツールは GitHub のコミット履歴を分析してレポートを生成します。**Git でコミットする運用が前提**で、Google ドライブやローカル保存など他の方法では使えません。 + ``` ┌──────────────────────────────────────────────────────────────┐ │ 📊 昨日の開発レポート 2026-01-15 │ @@ -22,6 +24,30 @@ Slackにはこのような図解レポートの画像が毎朝届きます。 --- +## 全体像 + +セットアップに入る前に、全体の構成を把握してください。 + +``` +あなたの GitHub アカウント +├── commit-report-tool ← このツール本体(GitHub Actions が毎朝動く) +└── your-project ← 監視対象(あなたが開発しているリポジトリ) +``` + +この2つのリポジトリと、3つの外部サービスを組み合わせて動きます。 + +``` +commit-report-tool(GitHub Actions) + │ + ├→ GitHub API で your-project のコミットを取得 + ├→ Claude API(Anthropic)でコミットを分析・図解生成 + └→ Slack API で図解レポートの画像を投稿 +``` + +セットアップでは「ツール本体を GitHub に置く → 監視対象を設定する → 3つのAPIキーを登録する → 実行」の順に進めます。 + +--- + ## 料金について このツールで使う外部サービスの料金です。 @@ -30,7 +56,7 @@ Slackにはこのような図解レポートの画像が毎朝届きます。 |---|---|---| | GitHub Actions | 定期実行(トリガー) | 毎月 2,000 分無料 | | GitHub API | コミットデータ取得 | 無料(5,000 リクエスト/時) | -| Claude API | AIによる分析・図解生成 | 従量課金(1回あたり約 $0.05〜0.20) | +| Claude API | AIによる分析・図解生成 | 事前チャージ制・従量課金(1回あたり約 $0.05〜0.20、$5 で約25〜100回分) | | Slack | レポート画像の通知先 | 無料ワークスペースで可 | --- @@ -42,7 +68,7 @@ Slackにはこのような図解レポートの画像が毎朝届きます。 ``` ┌─────────────┐ │ トリガー │ .github/workflows/daily-report.yml -│ (いつ動く) │ → 毎朝7時 or 手動実行 +│ (いつ動く) │ → 手動実行(定期実行はカスタマイズで有効化) └──────┬──────┘ ▼ ┌─────────────┐ @@ -94,20 +120,53 @@ configs/ ## セットアップ -### 前提 +### 準備するもの -- **GitHub アカウント**と監視したいリポジトリが必要です -- **Slack ワークスペース**が必要です(無料プランで可) -- このツールは GitHub Actions が全自動で実行します。あなたのPCで `npm install` を実行する必要はありません +- **GitHub アカウント** +- **Slack ワークスペース**(無料プランで可) +- **Anthropic Console のアカウント + クレジットチャージ済み**(後述の Part D で使います) -### Part A: リポジトリを準備する +Anthropic Console(https://console.anthropic.com/)でアカウントを作成し、Billing(https://console.anthropic.com/settings/billing)で **$5 以上チャージ** しておいてください。チャージしないとツールが動きません。 -1. このリポジトリを自分の GitHub アカウントにフォーク(またはコピー)する -2. **リポジトリは Private にしてください**(APIキーなどの設定を含むため) +> このツールは GitHub Actions が全自動で実行します。あなたのPCで `npm install` を実行する必要はありません。 -### Part B: リポジトリの情報を設定する +### Part A: ツール本体を GitHub に置く -**まず2行だけ書き換えてください。** 残りはそのままで動きます。 +このツールのコードを、あなたの GitHub アカウントにアップロードします。 + +#### 手順1: GitHub に新しいリポジトリを作る + +1. https://github.com/new にアクセス +2. **Repository name** に `commit-report-tool` と入力 +3. **Private** を選択(APIキーの設定を含むため、必ず Private にしてください) +4. 「Add a README file」のチェックは**外したまま**にする +5. 「Create repository」をクリック + +#### 手順2: コードを GitHub にアップロードする + +Cursor で AI に以下のように依頼してください: + +> 「このコードを GitHub にpushして。リポジトリは `あなたのユーザー名/commit-report-tool` です」 + +AI が `git remote add` と `git push` を実行してくれます。完了したら GitHub のリポジトリページを開いて、ファイルが表示されていることを確認してください。 + +### Part B: 監視対象のリポジトリを設定する + +レポートの対象にしたいリポジトリの情報を設定します。 + +#### 監視対象のリポジトリがまだない場合 + +GitHub で新しいリポジトリを作ってください。 + +1. https://github.com/new にアクセス +2. **Repository name** に好きな名前を入力(例: `my-web-app`) +3. **Private** を選択 +4. **「Add a README file」にチェックを入れる** — コミットが1件もないとレポートを生成できないため、最初のコミットを自動で作ります +5. 「Create repository」をクリック + +#### 設定ファイルを書き換える + +**2行だけ書き換えてください。** 残りはそのままで動きます。 `configs/repos/your-repo.yml` を開いて: @@ -117,6 +176,8 @@ repository: name: your-web-app # ← ここを監視したいリポジトリ名に ``` +GitHubのURL が `https://github.com/yamada-taro/my-app` であれば、`owner` は `yamada-taro`、`name` は `my-app` です。 + これだけでリポジトリ全体のコミットがレポート対象になります。 アプリ別の分類が必要な場合は「カスタマイズ」セクションで設定します。 @@ -134,14 +195,38 @@ repository: ### Part D: GitHub Secrets を設定する -リポジトリの Settings → Secrets and variables → Actions → New repository secret で以下を登録: +4つのシークレットを取得して、GitHub に登録します。各キーは**取得したらすぐメモ帳に貼り付けてください。画面を閉じると二度と表示されないものがあります。** -| Secret名 | 値 | -|---|---| -| `ANTHROPIC_API_KEY` | Claude API キー(https://console.anthropic.com/ で取得) | -| `GH_TOKEN` | GitHub Personal Access Token(repo スコープ) | -| `SLACK_BOT_TOKEN` | Part C でコピーした Bot User OAuth Token | -| `SLACK_CHANNEL` | Part C で確認したチャンネルID | +GitHub Secrets の登録先: リポジトリの Settings → Secrets and variables → Actions → New repository secret + +#### Secret 1: `ANTHROPIC_API_KEY`(Claude API キー) + +> **注意**: 普段使っている Claude.ai(チャット画面)と Anthropic Console(API管理画面)は別のサービスです。APIキーの取得は console.anthropic.com で行います。Claude.ai の有料プランに加入していても、API利用料は別途チャージが必要です。 + +1. https://console.anthropic.com/settings/keys にアクセス +2. 「Create Key」をクリック → 名前(例: `komineko`)を入力して作成 +3. 表示された `sk-ant-...` で始まるキーを**メモ帳に貼り付けて保存** +4. GitHub Secrets に `ANTHROPIC_API_KEY` として登録 + +> 「準備するもの」でチャージ済みですか?まだの場合は https://console.anthropic.com/settings/billing で $5 以上チャージしてください。チャージしないとツール実行時にエラーになります。 + +#### Secret 2: `GH_TOKEN`(GitHub Personal Access Token) + +1. https://github.com/settings/tokens/new にアクセス +2. **Note** に `komineko` と入力 +3. **Expiration** は `90 days` でOK +4. **Select scopes** で **`repo`** にチェック(リポジトリのスコープ。一番上にあります) +5. 「Generate token」をクリック +6. 表示された `ghp_...` で始まるトークンを**メモ帳に貼り付けて保存** +7. GitHub Secrets に `GH_TOKEN` として登録 + +#### Secret 3: `SLACK_BOT_TOKEN` + +Part C でコピーした Bot User OAuth Token(`xoxb-` で始まる文字列)を GitHub Secrets に `SLACK_BOT_TOKEN` として登録してください。 + +#### Secret 4: `SLACK_CHANNEL` + +Part C で確認したチャンネルID(`C` で始まる文字列)を GitHub Secrets に `SLACK_CHANNEL` として登録してください。 ### Part E: ローカル検証(オプション) @@ -163,10 +248,13 @@ node .claude/skills/github-api/scripts/get-commits.js あなたのユーザー ### Part F: GitHub Actions を実行する -1. リポジトリの「Actions」タブを開く -2. 左メニューから「Daily Commit Report」を選択 -3. 「Run workflow」→「Run workflow」をクリック -4. 数分待つと Slack にレポートが届きます +1. リポジトリの「**Actions**」タブを開く +2. **左サイドバー**から「**Daily Commit Report**」(または `.github/workflows/daily-report.yml`)をクリック +3. 画面**右上**の「**Run workflow**」ボタンをクリック → ドロップダウンが開くので、緑の「**Run workflow**」ボタンをクリック +4. 黄色(実行中)の表示が出たら、数分待ってください +5. 緑(成功)になったら Slack にレポートが届きます + +> 過去に失敗した実行が赤く表示されていることがありますが、それは古い記録です。新しく「Run workflow」で実行すれば問題ありません。 ### チェックポイント @@ -233,14 +321,22 @@ apps: ### 定期実行を有効にする -`.github/workflows/daily-report.yml` の cron 行のコメントを外す: +`.github/workflows/daily-report.yml` の `schedule` ブロック(2行)のコメントを外す: +変更前: +```yaml + # schedule: + # - cron: '0 22 * * *' # 毎日7:00 JST(有効にするにはコメントを外す) +``` + +変更後: ```yaml -on: schedule: - cron: '0 22 * * *' # 毎日7:00 JST ``` +`# ` を削除するとき、**先頭のスペース(インデント)はそのまま残してください**。`schedule:` の前にスペース2つ、`- cron:` の前にスペース4つが必要です。時刻は UTC で指定します(`0 22 * * *` = 日本時間 翌7:00)。 + ### ワンポイントTIPSを無効にする `configs/projects/your-project.yml`: @@ -270,6 +366,9 @@ tips: 1. **まずAIに聞く**: Cursorで「セットアップで〇〇のエラーが出ました」と伝えてください 2. **GitHub Actions のログを確認**: Actions タブ → 失敗したジョブ → ログを読む 3. **よくある問題**: + - 「**Credit balance is too low**」→ Anthropic Console(https://console.anthropic.com/settings/billing)でクレジットをチャージする。APIキーがあってもチャージしないと動きません + - 「**404 エラー**で Secrets の設定ページが開けない」→ ツール本体のリポジトリが GitHub に push されていない可能性があります。Part A を確認してください + - 「**Actions 画面がずっと赤い**」→ 過去の失敗記録が残っているだけです。新しく「Run workflow」で実行してください - 「コミットがない」→ 対象日のコミットがないか、リポジトリ名が間違っている - 「not_authed」→ SLACK_BOT_TOKEN が間違っているか期限切れ - 「Bad credentials」→ GH_TOKEN が間違っているか期限切れ