はじめに#
ソフトウェア開発において、Issue対応からPull Request(PR)作成までの一連のワークフローは、多くのエンジニアにとって日常的な作業です。しかし、Issue内容の把握、ブランチ作成、実装、コミット、PR作成、レビュー対応と、多くのステップを経る必要があり、時間と認知負荷がかかります。
Claude Codeは、公式ドキュメントの「Create pull requests」ワークフローで示されているように、この一連の作業を自然言語の指示だけで効率化できます。
Ask Claude directly to make a PR for you
本記事では、Claude Codeを活用してIssue対応からPR作成までのワークフローを一気通貫で実行する方法を解説します。この記事を読むことで、以下のことができるようになります。
- GitHub IssueをClaude Codeで読み込み、対応方針を立てる
- Issue対応の実装をClaude Codeで効率的に行う
- PRの作成と変更内容のサマリーを自動生成する
- コードレビュー指摘への対応を効率化する
- GitHub ActionsでClaude Codeを活用した自動化ワークフローを構築する
実行環境#
- オペレーティングシステム: macOS 10.15以上、Ubuntu 20.04以上/Debian 10以上、Windows 10以上(WSL 1/2またはGit for Windows)
- ハードウェア: 4GB以上のRAM
- Node.js 18以上(npmインストールの場合のみ必要)
- インターネット接続(認証およびAI処理に必要)
- シェル環境: Bash、Zsh、またはFish推奨
前提条件#
- コマンドライン操作の基礎知識
- Gitの基本操作(clone、commit、push等)
- プログラミングの基礎知識(言語は問わない)
- Claude.aiまたはAnthropic Consoleアカウント
- Claude Codeのインストールと認証が完了していること
- GitHub CLIのインストールと認証が完了していること
PRワークフローの全体像#
Claude Codeを使ったIssue対応からPR作成までの全体的なワークフローを確認しましょう。
flowchart TD
A[GitHub Issueの確認] --> B[対応方針の策定]
B --> C[ブランチ作成]
C --> D[実装]
D --> E[テスト実行]
E --> F{テスト成功?}
F -->|Yes| G[変更のコミット]
F -->|No| H[修正]
H --> E
G --> I[PRの作成]
I --> J[PRサマリー自動生成]
J --> K[レビュー待ち]
K --> L{レビュー指摘あり?}
L -->|Yes| M[指摘対応]
M --> E
L -->|No| N[マージ]このワークフローの特徴は、Claude Codeが各ステップで具体的な支援を提供できる点です。Issue内容の把握から実装、PR作成、レビュー対応まで、一貫してサポートします。
GitHub Issueの読み込みと対応方針の策定#
Issue対応の第一歩は、Issueの内容を正確に把握し、適切な対応方針を立てることです。
GitHub CLIを使ったIssue情報の取得#
Claude CodeはGitHub CLIと連携して、Issue情報を直接取得できます。
1
|
> gh issue view 123 を実行して、Issue #123の内容を確認して
|
Claude Codeはghコマンドを実行し、Issue情報を取得します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
⏺ 実行: gh issue view 123
Issue #123: ユーザー認証時のエラーハンドリング改善
状態: Open
作成者: @developer
ラベル: bug, priority-high
■ 内容:
ログイン失敗時のエラーメッセージが不明確で、ユーザーが原因を特定できない。
以下の改善が必要:
1. 具体的なエラー理由の表示
2. リトライ可能な場合の案内
3. サポートへの問い合わせ導線
■ 再現手順:
1. ログイン画面で間違ったパスワードを入力
2. 「エラーが発生しました」というメッセージのみ表示される
|
対応方針の策定#
Issue内容を把握したら、Claude Codeに対応方針を提案させます。
1
2
|
> このIssueに対応するための実装方針を提案して。
> 既存のエラーハンドリングの実装も確認して。
|
Claude Codeはコードベースを分析し、以下のような提案を行います。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
⏺ 実装方針を提案します:
■ 現状分析:
- src/services/AuthService.ts でエラーを catch して一般的なメッセージを返却
- エラー種別(パスワード不一致、アカウントロック等)が区別されていない
■ 提案する変更:
1. AuthError クラスの拡張(src/errors/AuthError.ts)
- エラーコードと詳細メッセージを保持
- リトライ可能かどうかのフラグを追加
2. AuthService の改修(src/services/AuthService.ts)
- 認証失敗時に具体的なエラー種別を特定
- AuthError をスローするように変更
3. LoginForm コンポーネントの改修(src/components/LoginForm.tsx)
- エラー種別に応じたメッセージ表示
- リトライボタンの条件付き表示
- サポートリンクの追加
4. テストの追加
- AuthService のエラーハンドリングテスト
- LoginForm のエラー表示テスト
■ 影響範囲:
- 認証関連のエラー表示が変わるため、E2Eテストの更新が必要
- 既存のエラーログ形式との互換性を確認する必要あり
|
ブランチ作成と実装#
対応方針が決まったら、ブランチを作成して実装に入ります。
ブランチの作成#
1
2
|
> Issue #123 に対応するブランチを作成して。
> ブランチ名は fix/issue-123-auth-error-handling にして。
|
Claude Codeはgitコマンドを実行してブランチを作成します。
1
2
3
|
⏺ 実行: git checkout -b fix/issue-123-auth-error-handling
Switched to a new branch 'fix/issue-123-auth-error-handling'
|
実装の依頼#
Claude Codeに実装を依頼する際は、具体的な要件を伝えます。
1
2
|
> 先ほど提案した実装方針に基づいて、Issue #123 の対応を実装して。
> まず AuthError クラスから始めて。
|
Claude Codeは段階的に実装を進め、各ステップで承認を求めます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
⏺ AuthError クラスを実装します。
■ 作成: src/errors/AuthError.ts
export enum AuthErrorCode {
INVALID_CREDENTIALS = 'INVALID_CREDENTIALS',
ACCOUNT_LOCKED = 'ACCOUNT_LOCKED',
ACCOUNT_NOT_FOUND = 'ACCOUNT_NOT_FOUND',
SESSION_EXPIRED = 'SESSION_EXPIRED',
UNKNOWN = 'UNKNOWN',
}
export interface AuthErrorOptions {
code: AuthErrorCode;
message: string;
retryable: boolean;
supportUrl?: string;
}
export class AuthError extends Error {
readonly code: AuthErrorCode;
readonly retryable: boolean;
readonly supportUrl?: string;
constructor(options: AuthErrorOptions) {
super(options.message);
this.name = 'AuthError';
this.code = options.code;
this.retryable = options.retryable;
this.supportUrl = options.supportUrl;
}
static invalidCredentials(): AuthError {
return new AuthError({
code: AuthErrorCode.INVALID_CREDENTIALS,
message: 'メールアドレスまたはパスワードが正しくありません',
retryable: true,
});
}
static accountLocked(): AuthError {
return new AuthError({
code: AuthErrorCode.ACCOUNT_LOCKED,
message: 'アカウントがロックされています',
retryable: false,
supportUrl: '/support/account-locked',
});
}
}
この変更を適用しますか? [y/n]
|
カスタムコマンドによるIssue対応の効率化#
頻繁にIssue対応を行う場合は、カスタムコマンドを作成すると便利です。
1
2
3
4
5
6
7
8
9
|
# .claude/commands/fix-issue.md の内容
Find and fix issue #$ARGUMENTS. Follow these steps:
1. Read the issue description using gh issue view
2. Understand the requirements and acceptance criteria
3. Analyze the relevant code in our codebase
4. Create a branch named fix/issue-$ARGUMENTS-<brief-description>
5. Implement the solution following our coding standards
6. Add appropriate tests
7. Prepare a concise commit message referencing the issue
|
このコマンドを使えば、以下のように簡潔にIssue対応を開始できます。
PRの作成と変更サマリーの自動生成#
実装が完了したら、PRを作成します。Claude Codeは変更内容を自動的に分析し、適切なPR説明文を生成できます。
変更内容のサマリー作成#
1
|
> 今回の変更内容をサマリーして。PRの説明文に使えるように整理して。
|
Claude Codeは差分を分析し、サマリーを生成します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
⏺ 変更内容サマリー:
■ 概要:
Issue #123 に対応し、ユーザー認証時のエラーハンドリングを改善しました。
■ 変更ファイル:
- src/errors/AuthError.ts (新規)
- src/services/AuthService.ts (修正)
- src/components/LoginForm.tsx (修正)
- src/tests/AuthService.test.ts (新規)
- src/tests/LoginForm.test.tsx (新規)
■ 主な変更点:
1. AuthError クラスの追加
- エラーコードによる種別管理
- リトライ可能フラグの追加
- サポートURL保持機能
2. AuthService の改修
- 認証失敗時の詳細なエラー判定
- AuthError をスローする形式に変更
3. LoginForm の改善
- エラー種別に応じたメッセージ表示
- リトライボタンの条件付き表示
- サポートページへのリンク追加
■ テスト:
- AuthService: 5ケース追加(全パス)
- LoginForm: 8ケース追加(全パス)
|
PRの作成#
Claude Codeに直接PRの作成を依頼できます。
または、より詳細な指示を与えることもできます。
1
2
|
> PRを作成して。タイトルは「feat: 認証エラーハンドリングの改善」にして。
> Issue #123 をクローズするようにリンクして。
|
Claude Codeはgh pr createコマンドを実行してPRを作成します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
⏺ 実行: gh pr create --title "feat: 認証エラーハンドリングの改善" \
--body "## 概要
Issue #123 に対応し、ユーザー認証時のエラーハンドリングを改善しました。
## 変更内容
- AuthError クラスの追加
- AuthService でのエラー種別判定
- LoginForm でのユーザーフレンドリーなエラー表示
## テスト
- AuthService: 5ケース追加(全パス)
- LoginForm: 8ケース追加(全パス)
## 関連Issue
Closes #123"
Creating pull request for fix/issue-123-auth-error-handling into main
https://github.com/your-org/your-repo/pull/456
|
PRサマリーの充実化#
PRの説明文をさらに充実させたい場合は、追加の情報を依頼できます。
1
|
> enhance the PR description with more context about the security improvements
|
1
|
> PRの説明文に、テスト方法の詳細を追加して
|
Claude Codeは既存のPR説明文を更新するコマンドを実行します。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
⏺ 実行: gh pr edit 456 --body "..."
PR #456 の説明文を更新しました。
追加した内容:
■ テスト方法:
1. ログイン画面で間違ったパスワードを入力
2. 「メールアドレスまたはパスワードが正しくありません」と表示されることを確認
3. リトライボタンが表示されることを確認
4. 5回連続でログインに失敗
5. 「アカウントがロックされています」と表示されることを確認
6. サポートページへのリンクが表示されることを確認
|
コードレビュー対応#
PRを作成した後は、コードレビューを受けてフィードバックに対応する必要があります。Claude Codeはこのプロセスも効率化できます。
レビューコメントの確認#
1
|
> gh pr view 456 --comments を実行して、レビューコメントを確認して
|
1
2
3
4
5
6
7
8
9
10
11
|
⏺ 実行: gh pr view 456 --comments
PR #456 のレビューコメント:
■ @reviewer (2時間前):
src/services/AuthService.ts L45-50:
「エラーメッセージが日本語固定になっていますが、i18n対応は考慮されていますか?」
■ @reviewer (2時間前):
src/components/LoginForm.tsx L78:
「サポートURLのハードコードは避けて、環境変数から取得するようにしてください」
|
レビュー指摘への対応#
1
2
3
|
> レビューコメントに対応して。
> 1. エラーメッセージをi18n対応する
> 2. サポートURLを環境変数から取得するように修正する
|
Claude Codeはレビュー指摘に対応した修正を実装します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
⏺ レビュー指摘に対応します。
■ 変更1: AuthError.ts のi18n対応
- import { t } from '@/i18n';
+ import { t } from '@/i18n';
static invalidCredentials(): AuthError {
return new AuthError({
code: AuthErrorCode.INVALID_CREDENTIALS,
- message: 'メールアドレスまたはパスワードが正しくありません',
+ message: t('auth.error.invalidCredentials'),
retryable: true,
});
}
■ 変更2: LoginForm.tsx のサポートURL修正
- supportUrl: '/support/account-locked',
+ supportUrl: process.env.NEXT_PUBLIC_SUPPORT_URL || '/support',
これらの変更を適用しますか? [y/n]
|
修正コミットとプッシュ#
1
|
> 修正をコミットしてプッシュして。コミットメッセージは「fix: address review comments」で
|
1
2
3
4
5
6
7
8
|
⏺ 実行: git add -A && git commit -m "fix: address review comments
- Add i18n support for error messages
- Use environment variable for support URL"
実行: git push
修正をプッシュしました。レビュアーに確認を依頼できます。
|
GitHub Actionsでの自動化#
Claude Code GitHub Actionsを使用すると、Issue対応やPR作成のワークフローをさらに自動化できます。
Claude Code GitHub Actionsのセットアップ#
Claude Codeターミナルで以下のコマンドを実行すると、簡単にセットアップできます。
このコマンドは、GitHubアプリのインストールと必要なシークレットの設定をガイドします。
基本的なワークフロー設定#
PRやIssueで@claudeをメンションするだけで、Claude Codeが応答するワークフローを設定できます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# .github/workflows/claude.yml
name: Claude Code
on:
issue_comment:
types: [created]
pull_request_review_comment:
types: [created]
jobs:
claude:
runs-on: ubuntu-latest
steps:
- uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
|
この設定により、IssueやPRのコメントで@claudeをメンションすると、Claude Codeが自動的に応答します。
1
2
|
# Issue #200 のコメント例
@claude このIssueを分析して、実装方針を提案してください
|
自動コードレビューワークフロー#
PRが作成されたときに自動的にコードレビューを実行するワークフローも設定できます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# .github/workflows/code-review.yml
name: Code Review
on:
pull_request:
types: [opened, synchronize]
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
prompt: "/review"
claude_args: "--max-turns 5"
|
Issue対応の自動化#
Issueに特定のラベルが付いたときに、自動的に実装を開始するワークフローも構築できます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# .github/workflows/auto-implement.yml
name: Auto Implement
on:
issues:
types: [labeled]
jobs:
implement:
if: github.event.label.name == 'auto-implement'
runs-on: ubuntu-latest
steps:
- uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
prompt: |
Implement the feature described in this issue.
Create a branch, implement the solution, and open a PR.
claude_args: "--max-turns 20"
|
GitLab連携#
Claude CodeはGitLabとも連携できます。GitLab CI/CDを使用した自動化ワークフローの設定例を紹介します。
GitLab CI/CDでの基本設定#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# .gitlab-ci.yml
stages:
- review
code_review:
stage: review
image: node:20
script:
- npm install -g @anthropic-ai/claude-code
- claude -p "Review the changes in this merge request and provide feedback"
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
variables:
ANTHROPIC_API_KEY: $ANTHROPIC_API_KEY
|
MRでのClaude Code活用#
GitLabのMerge Requestでも、Claude Codeを活用した効率的なワークフローを構築できます。
1
2
3
4
5
6
7
8
9
10
11
|
# .gitlab-ci.yml
implement_feature:
stage: implement
script:
- |
claude -p "
Read the issue description from $CI_MERGE_REQUEST_DESCRIPTION
and implement the requested changes.
"
rules:
- if: $CI_MERGE_REQUEST_LABELS =~ /auto-implement/
|
効果的なPRワークフローのベストプラクティス#
Claude Codeを使ったPRワークフローを最大限活用するためのベストプラクティスを紹介します。
CLAUDE.mdでプロジェクト規約を定義#
プロジェクトのルートにCLAUDE.mdファイルを配置し、コーディング規約やPR作成のルールを定義しておくと、Claude Codeがそれに従って動作します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
# CLAUDE.md
## PR作成ルール
- PRタイトルは Conventional Commits 形式に従う(feat:, fix:, docs: 等)
- PR説明文には必ず「概要」「変更内容」「テスト」セクションを含める
- 関連Issueは「Closes #XXX」形式でリンクする
## コミットメッセージ規約
- 日本語で記述
- 1行目は50文字以内で変更の要約
- 必要に応じて本文で詳細を説明
## レビュー対応
- レビュー指摘への対応は個別コミットで行う
- 対応完了後はレビュアーにメンションで通知
|
段階的な承認モードの活用#
重要な変更を行う場合は、Auto-Accept Modeではなく通常のAccept Modeを使用し、各変更を確認しながら進めることを推奨します。
1
2
3
4
|
# Shift+Tab でモードを切り替え
# ⏵⏵ accept edits on → Auto-Accept Mode
# ⏵ accept edits → Accept Mode(推奨)
# ⏸ plan mode on → Plan Mode(分析のみ)
|
Git Worktreesを使った並列作業#
複数のIssueに同時に対応する場合は、Git Worktreesを活用すると効率的です。
1
2
3
4
5
6
|
# 別のIssue対応用にworktreeを作成
git worktree add ../project-issue-124 -b fix/issue-124
# 各worktreeで別のClaude Codeセッションを起動
cd ../project-issue-124
claude
|
トラブルシューティング#
gh コマンドが認識されない#
GitHub CLIがインストールされていない、または認証されていない可能性があります。
1
2
3
4
5
6
7
8
|
# インストール確認
gh --version
# 認証状態確認
gh auth status
# 認証実行
gh auth login
|
PRの作成に失敗する#
リポジトリへのプッシュ権限がない、またはブランチ保護ルールに違反している可能性があります。
1
2
3
4
5
6
7
|
> gh pr create の実行に失敗しました。
> エラー: Permission denied
確認事項:
1. リポジトリへの書き込み権限があるか
2. ブランチがプッシュされているか
3. ブランチ保護ルールに違反していないか
|
GitHub Actionsが動作しない#
以下の点を確認してください。
- GitHubアプリが正しくインストールされているか
ANTHROPIC_API_KEYシークレットが設定されているか
- ワークフローファイルの構文が正しいか
まとめ#
Claude Codeを活用することで、Issue対応からPR作成までのワークフローを大幅に効率化できます。
本記事で紹介した主なポイントは以下の通りです。
- GitHub CLIと連携してIssue情報を取得し、対応方針を策定できる
- カスタムコマンドを使ってIssue対応のワークフローを標準化できる
- PRの作成と変更サマリーの自動生成で、ドキュメンテーションの手間を削減できる
- レビュー指摘への対応もClaude Codeがサポートしてくれる
- GitHub Actionsと連携することで、さらなる自動化が可能
Claude Codeは単なるコード生成ツールではなく、開発ワークフロー全体を支援するエージェントです。日々の開発作業に取り入れることで、より創造的な作業に集中できる時間を確保できます。
参考リンク#