AIコーディング 2026.04.20

Claude Codeで開発時間を50%削減する5つの自動化ワークフロー

タグ:ClaudeCode / Claude / 生成AI / 開発効率化 / ワークフロー

TL;DR(3行まとめ)

  • Claude Codeは「華やかな新機能開発」より、毎日の地味な作業の自動化に真価がある
  • コードレビューのコメント整理・テスト生成・リファクタリング(整理整頓)など5つのワークフローが実用的
  • GitHub ActionsとClaude APIを連携させることで、プルリクエスト時のコードレビューを完全自動化できる

変更内容の詳細

dev.toユーザーのKai氏が投稿した記事「5 Claude Code Workflows I Use Every Day (For the Boring 80%)」では、Claude Codeを日々の開発で活用している5つの具体的なワークフローが紹介されています。記事のタイトルにある「退屈な80%」というのは、プログラマーが日常的に行う作業——コードを読む、テストを書く、ドキュメントを整える、バグを探す——のことで、新しい機能を「ゼロから作る」より圧倒的に時間を占める部分です。

ワークフロー1: コードレビューの自動化

プルリクエスト(コード変更の申請)を出す前に、Claude Codeに「このコードの問題点を指摘して」と頼む使い方です。さらに進んで、GitHub ActionsとClaude APIを連携させることで、プルリクエスト作成時に自動的にコードレビューが走る仕組みを構築できます。

この自動化によって実現できること:

  • レビュー待機時間の削減:人手を待たず、即座に自動レビューが実行される
  • レビュー品質の向上:人間の見落としやすいバグパターンをAIが客観的に検出
  • 開発者の認知負荷軽減:定型的なレビュー指摘をAIが引き継ぎ、人間は高度な判断に集中
  • CI/CDパイプラインの最適化:テスト実行時間の短縮と並行処理で、全体ビルド時間を4分の1に削減した事例あり
# プロジェクトのルートで実行(シンプルな使い方)
claude "このファイルをレビューして、問題点と改善案をリストアップして"

GitHub Actionsを使った自動化の詳細な手順は「試し方」セクションで解説します。

ワークフロー2: テストコードの自動生成

テストを書くのは大切とわかっていても、後回しにしがちな作業の代表格です。Claude Codeに既存のコードを渡して「このコードのテストを書いて」と頼むだけで、主要なケースをカバーしたテストコードの雛形を用意してくれます。

テスト生成で省力化できる具体的な作業:

  • テストケースの考案: エッジケース(境界値)やエラーパターンをAIが提案
  • モック・スタブの準備: 外部APIやデータベース呼び出しの模擬化を自動生成
  • テストファイル作成: 既存プロジェクトの構成に合わせたテストファイルの雛形生成
  • カバレッジ分析: 未テストの関数や分岐を検出し、テストケース追加を提案

結果として、テスト作成から実行まで50〜70%の時間短縮が見込めます。

claude "src/utils/calculate.ts のユニットテストをJestで書いて"

詳細な手順はこのページの「試し方」セクションで解説します。

ワークフロー3: リファクタリング(コードの整理整頓)

動いているけど読みにくいコード、変数名が意味不明なコード——こういうものを直す作業は重要ですが優先度が下がりがちです。Claude Codeに「このコードをもっと読みやすくして」と依頼することで、変数名の改善や処理の分割を提案・実行してもらえます。

ワークフロー4: バグの原因調査

エラーログやスタックトレース(エラーが起きた場所の記録)をそのままClaudeに貼り付けて、「何が起きているか説明して」と聞くだけで、原因の仮説と調査の出発点を示してくれます。「Stack Overflow(技術Q&Aサイト)をしらみつぶしに検索する前にまずClaudeに聞く」という使い方が、作業時間の短縮につながるとKai氏は述べています。

ワークフロー5: ドキュメント(説明書き)の自動生成

関数やクラスにコメントや説明を書く作業も、後回しになりやすい典型例です。claude "このコードにJSDocコメントを追加して" のような一言で、既存コードに説明を付け加えてもらえます。

claude "以下のコードにJSDocコメントを追加して関数の目的・引数・返り値を説明して"

既存ユーザーへの影響と対応

「ゼロから作る」より「整える」に使う発想の転換

Claude Codeを使い始めると、どうしても「アプリをまるごと作ってもらおう」という方向に行きがちです。しかしKai氏の記事が示すように、毎日の仕事での価値は「地味な作業を減らすこと」にあります。コードを書く時間より、読む・直す・テストする時間の方が長いという開発現場の実態にあった使い方です。

コンテキスト(文脈)の渡し方が仕上がりを左右する

Claude Codeに頼む際は、「何のためのコードか」「どんな制約があるか」をひと言添えるだけで、提案の精度が上がります。例えば「Node.js 20系を使っているプロジェクトで」「TypeScriptの厳格モードが有効な環境で」など、環境情報を一緒に伝えるのが実用的です(一般的な傾向として、詳細な文脈を与えるほど回答の質が上がる可能性があります)。

出力は必ず自分でチェックする

Claude Codeが生成したテストコードやリファクタリング案は、そのまま使えることも多いですが、プロジェクト固有のルールや意図と合っているかは自分で確認が必要です。特にセキュリティに関わる部分は、生成AIの出力を鵜呑みにせず必ず目を通す習慣をつけておくのが安全です。


試し方(コマンド・手順)

Claude Codeがまだ入っていない場合は、まず公式ドキュメントからセットアップします(※インストール方法の詳細はAnthropicの公式サイトを確認してください)。

基本的な使い方の流れ

# 1. プロジェクトのディレクトリに移動
cd your-project

# 2. Claude Codeを起動
claude

# 3. 対話形式で作業を依頼
# 例: テスト生成
> src/lib/parser.ts のテストをVitest形式で書いて

# 例: ドキュメント生成
> このファイルの全関数にJSDocコメントを追加して

# 例: バグ調査
> 以下のエラーログの原因を説明して:[エラーをペースト]

テストコードを自動生成する(詳細手順)

テスト生成はワークフロー2の核心です。ここではJavaScript(Jest)とPython(pytest)それぞれの具体的な手順を解説します。

前提環境

言語ランタイムテストフレームワーク
JavaScriptNode.js 18以上Jest 29以上 / Vitest / Mocha
PythonPython 3.8以上pytest 7以上 / unittest

JavaScript(Jest)でのテスト生成例

以下のような関数があるとします:

// src/calculator.js
export function add(a, b) { return a + b; }

export function divide(a, b) {
  if (b === 0) throw new Error('Division by zero');
  return a / b;
}

export function formatPrice(price) {
  return `$${price.toFixed(2)}`;
}

Claude Codeへのプロンプト例:

次のコードに対するJestテストファイルを作成してください。
- ファイル名: src/calculator.test.js
- 各関数について正常系・エッジケース・エラーハンドリングをカバー
- テストは簡潔で、1テストケース1つのassertionを原則とする

[上記のcalculator.jsのコードをここに貼り付け]

Claude Codeが生成したテストコードの例:

// src/calculator.test.js
import { add, divide, formatPrice } from './calculator';

describe('Calculator Functions', () => {
  describe('add', () => {
    test('adds two positive numbers', () => {
      expect(add(2, 3)).toBe(5);
    });
    test('adds negative numbers', () => {
      expect(add(-2, 3)).toBe(1);
    });
    test('handles floating-point numbers', () => {
      expect(add(0.1, 0.2)).toBeCloseTo(0.3);
    });
  });

  describe('divide', () => {
    test('divides two numbers correctly', () => {
      expect(divide(10, 2)).toBe(5);
    });
    test('throws error when dividing by zero', () => {
      expect(() => divide(10, 0)).toThrow('Division by zero');
    });
  });

  describe('formatPrice', () => {
    test('formats price with two decimal places', () => {
      expect(formatPrice(19.5)).toBe('$19.50');
    });
    test('formats prices with rounding', () => {
      expect(formatPrice(19.999)).toBe('$20.00');
    });
  });
});

Python(pytest)でのテスト生成例

# src/calculator.py
def divide(a: float, b: float) -> float:
    if b == 0:
        raise ValueError("Division by zero")
    return a / b

Claude Codeへのプロンプト例:

次のPythonコードに対するpytestテストファイルを作成してください。
- ファイル名: tests/test_calculator.py
- pytest.approx() を使って浮動小数点誤差に対応する

[上記のcalculator.pyのコードをここに貼り付け]

生成例:

# tests/test_calculator.py
import pytest
from src.calculator import divide

class TestDivide:
    def test_divide_positive_numbers(self):
        assert divide(10, 2) == 5

    def test_divide_by_zero_raises_error(self):
        with pytest.raises(ValueError, match="Division by zero"):
            divide(10, 0)

    def test_divide_floating_point(self):
        assert divide(1, 3) == pytest.approx(0.333, rel=1e-2)

テスト実行とカバレッジ確認

# Jest
npm test -- --coverage

# pytest
pytest --cov=src tests/ -v

カバレッジレポートで未カバーの部分が見つかったら、Claude Codeに追加生成を依頼します:

上記のカバレッジレポートから以下の行がカバーされていません:
[ファイル名:行番号の一覧]
これらをテストでカバーするケースを追加してください。

つまずきやすいポイント(テスト生成編)

問題原因解決策
外部APIの通信エラーテストが実際のAPIを呼び出すモック(mock)を使うよう追加指示する
テスト実行順序で結果が変わるテスト間で状態を共有しているbeforeEach/afterEach でクリーンアップするよう指示
カバレッジが不足分岐が生成テストでカバーされていないカバレッジレポートを貼り付けて追加生成を依頼

GitHub Actionsでコードレビューを自動化する

より踏み込んだ使い方として、GitHub ActionsとClaude APIを連携させてプルリクエスト時のレビューを自動化できます。

前提環境・必要なもの

  • Claude API アクセス(Anthropic公式から取得)
  • GitHub アカウント(GitHub Actions実行権限)
  • GitHubリポジトリへの管理者権限またはワークフロー設定権限
  • GitHub Actions の基本的な理解

手順1:APIキーの取得とシークレット設定

Anthropic公式のAPIコンソール(https://console.anthropic.com)からAPIキーを生成し、GitHubのシークレットに登録します。

  1. GitHubリポジトリの Settings → Secrets and variables → Actions を開く
  2. 「New repository secret」をクリック
  3. Name: CLAUDE_API_KEY、Secret: 取得したAPIキーを入力

手順2:GitHub Actionsワークフローの作成

.github/workflows/claude-code-review.yml を作成します。

name: Claude Code Review

on:
  pull_request:
    types: [opened, synchronize]

jobs:
  review:
    runs-on: ubuntu-latest
    
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Get PR diff
        id: diff
        run: |
          git fetch origin pull/${{ github.event.pull_request.number }}/head:pr-branch
          git diff origin/main...pr-branch > /tmp/changes.diff
          cat /tmp/changes.diff

      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.11'

      - name: Install dependencies
        run: pip install anthropic

      - name: Run Claude Code Review
        id: review
        env:
          CLAUDE_API_KEY: ${{ secrets.CLAUDE_API_KEY }}
        run: |
          python3 << 'EOF'
          import os
          import anthropic

          with open('/tmp/changes.diff', 'r', encoding='utf-8') as f:
              diff_content = f.read()

          client = anthropic.Anthropic(api_key=os.environ.get("CLAUDE_API_KEY"))

          review_prompt = f"""
以下のコード変更をレビューしてください。セキュリティ、パフォーマンス、可読性の観点から具体的な指摘を提供してください。

### 変更内容
{diff_content}

### レビューフォーマット
- 🔴 重大(本番環境に影響)
- 🟡 警告(改善推奨)
- 🟢 情報(参考)

各カテゴリで具体的な指摘と改善案を記述してください。
          """

          message = client.messages.create(
              model="claude-3-5-sonnet-20241022",
              max_tokens=2048,
              messages=[{"role": "user", "content": review_prompt}]
          )

          review_result = message.content[0].text

          with open(os.environ.get('GITHUB_OUTPUT'), 'a') as f:
              f.write(f"review_result<<EOF\n{review_result}\nEOF\n")

          print(review_result)
          EOF

      - name: Post review comment
        if: always()
        uses: actions/github-script@v7
        with:
          script: |
            const review = `${{ steps.review.outputs.review_result }}`;
            github.rest.issues.createComment({
              issue_number: context.issue.number,
              owner: context.repo.owner,
              repo: context.repo.repo,
              body: `## 🤖 Claude Code Review\n\n${review}`
            });

つまずきやすいポイント

エラー原因解決策
API key not foundシークレット未設定または参照ミスSettings → Secrets で CLAUDE_API_KEY を確認
diffが大きすぎてタイムアウトClaude APIのトークン制限対象ファイルをフィルタリング(-- '*.py' '*.ts'
PRコメントが投稿されないGitHub Actionsのパーミッション不足Settings → Actions → General → 「Read and write permissions」に変更

応用:テスト実行との並行化

GitHub Actionsの複数ジョブを並行実行することで、CI全体の時間をさらに短縮できます(参考事例:11分→4分)。

jobs:
  code-review:
    runs-on: ubuntu-latest
    steps:
      # コードレビュー処理

  test:
    runs-on: ubuntu-latest
    steps:
      # ユニットテスト実行

  notify:
    needs: [code-review, test]
    if: always()
    runs-on: ubuntu-latest
    steps:
      # 結果をSlackに通知

日本語で依頼するときのコツ

Claude Codeは日本語の指示にも対応しています(※公式の言語サポート範囲は公式ドキュメントを確認)。「〜してほしい」「〜に直して」「〜の問題点を教えて」という自然な日本語で指示を出しても、多くの場合そのまま動作します。

# 日本語での指示例
claude "utils/date.ts を見て、バグになりそうな箇所を教えて"
claude "このコードのテストを書いて。エッジケース(境界の値)も含めて"

関連リンク


あわせて読みたい

参考ソース