ClaudeとGitHub ActionsでIssueに自動ラベル付けしてみた

# 背景・目的
日頃、Issue作成後に適切なラベル（例：bug, feature, question）を付けます。
この作業は属人的になりやすく、ラベルの抜けや誤分類が発生する。放置するなどあります。
とくにチーム外のメンバーや非エンジニアが起票した場合、分類の基準がぶれる傾向にあります。

今回は、下記を目的に、Claudeで、Issueの本文をもとに自動で分類します
- GitHub Actionsを使い、ラベル付けを自動化して手間と属人性を排除
- 開発フローをスムーズにし、Issue triage（一次選別）の手間を軽減


# 実践
## 事前準備
### API KEYの発行とSecretsへの保存
1. 下記でAPI KEYの発行とSecretsへ保存します

https://qiita.com/zumax/items/052f7de0930e1dcdea96#claude-api%E3%82%AD%E3%83%BC%E3%81%AE%E7%99%BA%E8%A1%8C

## GitHubリポジトリに必要なラベルを事前に確認
Claudeにラベルを選べせるため事前に確認します

1. GitHubにサインインします
1. リポジトリに移動します
1. ①「Issue」タブ＞②「Labels」をクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/d47ee3c3-8ac6-4e7b-9274-3ce685837573.png)

1. デフォルトのラベルを確認します
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/b0493b9c-27e5-48c2-b011-6678297296ac.png)

## GitHub Workflowを作成
1. mainから新しいブランチを作成します
1. `.github/workflows/issue-labeling.yml` を作成します
    ```yml
    name: Claude Issue Labeling
    
    on:
      issues:
        types: [opened]
    
    permissions:
      issues: write
      contents: read
      id-token: write
    
    jobs:
      label_with_claude:
        runs-on: ubuntu-latest
    
        steps:
          - name: Get label suggestion from Claude
            id: claude
            uses: anthropics/claude-code-action@beta
            with:
              anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
              direct_prompt: |
                You are a GitHub issue classifier.
                Read the issue body below and return exactly one label (no explanation).
                Choose from: bug, documentation, enhancement, question.
                ---
                ${{ github.event.issue.body }}
    
          - name: Apply label using github-script
            uses: actions/github-script@v7
            with:
              github-token: ${{ secrets.GITHUB_TOKEN }}
              script: |
                const label = `${{ steps.claude.outputs.result }}`.trim();
                if (label) {
                  await github.rest.issues.addLabels({
                    issue_number: context.issue.number,
                    owner: context.repo.owner,
                    repo: context.repo.repo,
                    labels: [label],
                  });
                  console.log(`✅ Label "${label}" has been added.`);
                } else {
                  console.log("⚠ No label returned from Claude.");
                }
    ```

1. CommitしPushします
1. マージします


## Issueを作成する
### READMEにコメントを追加する 
1. 「Issue」タブをクリックします
1. 「New Issue」をクリックします
1. タイトルとDescriptionを追加します
    ```
    READMEにコメントを追加する
    ---
    README には、新規ユーザー向けの簡単な使用例が欠けています。
    基本的なコードでライブラリを初期化して使用する方法を示すセクションを追加したいと思います。
    ```

1. Createをクリックします
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/6a7a25df-2988-4b5c-8d65-b111111b7905.png)

1. しばらくすると実行され、ラベルが付きました
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/2754cc18-d0a2-439e-8cc0-cc0b85933e28.png)


### CLAUDE.mdを作成する
1. 「New Issue」をクリックします

1. タイトルとDescriptionを追加します
    ```
    CLAUDE.mdを作成する
    ~~~~
    
    CLAUDE.md は、GitHub Actions で [Anthropic Claude](https://www.anthropic.com/) を使うプロジェクトにおいて、Claude をどのように使っているかを明示的に記録するためのドキュメントです。
    一般的にはリポジトリのルートに置いて、「このリポジトリでの Claude の使い方」「設定の意図」「挙動」「注意点」などをまとめる目的で使われます。
    
    ===
    
    コーディングルールや推奨事項を書く。
    ```
1. Createをクリックします
1. しばらくすると実行され、ラベルが付きました
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/f443d806-10fc-4f86-9faa-c2f0259ccb69.png)

### テストコードを作成する
1. 「New Issue」をクリックします

1. タイトルとDescriptionを追加します
    ```
    hello.pyのテストコードを作成する
    ===
    hello.pyには、テストコードが存在しないため作成する
    ```

1. Createをクリックします
1. しばらくすると実行され、「enhancement」ラベルが付きました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206276/87f88e9d-52a9-445e-94c1-d0ab478ed693.png)


# 考察
今回、Issueの内容に応じたラベルが数秒で自動付与できました。
次回以降は、IssueをもとにPRの作成まで自動で行えるようにします。


# 参考
https://qiita.com/zumax/items/052f7de0930e1dcdea96

https://github.com/anthropics/claude-code-action