AIコーディング 2026.05.13

Claude Codeで24時間稼働するAI開発エンジンを構築する【2026年版】DevOps不要の自動化設計

タグ:Claude / 生成AI / 自動開発 / 初心者向け / AI活用

AI開発エンジンのアーキテクチャ

トリガー(GitHub PR / スケジュール / Webhook)

GitHub Actions / Cloudflare Workers

Claude API(claude-sonnet-4-5 / claude-haiku-4-5-20251001)

結果: PRレビューコメント / コード修正 / レポート生成

コスト追跡・アラート

実装1: GitHub Actions自動コードレビュー(PR毎に実行)

# .github/workflows/ai-review.yml
name: Claude Code Review

on:
  pull_request:
    types: [opened, synchronize]

jobs:
  ai-review:
    runs-on: ubuntu-latest
    permissions:
      pull-requests: write
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      
      - name: Get diff and review
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          pip install anthropic PyGithub
          python .github/scripts/claude_review.py \
            --pr ${{ github.event.pull_request.number }} \
            --repo ${{ github.repository }}
# .github/scripts/claude_review.py
import anthropic
import argparse
import subprocess
from github import Github
import os

client = anthropic.Anthropic()

def review_pr(pr_number: int, repo_name: str) -> None:
    diff = subprocess.run(
        ["git", "diff", "origin/main...HEAD"],
        capture_output=True, text=True
    ).stdout[:15000]
    
    response = client.messages.create(
        model="claude-haiku-4-5-20251001",  # コストを抑えるためHaikuで
        max_tokens=1024,
        messages=[{"role": "user", "content": f"""
このPRのdiffを確認してレビューしてください。

確認観点:
1. バグ・ロジックエラー
2. セキュリティリスク(SQLインジェクション・XSS等)
3. パフォーマンス問題
4. 型安全性(TypeScript)

diff:
{diff}

問題点を箇条書きで、問題なければ「✅ レビュー問題なし」と返してください。"""}]
    )
    
    g = Github(os.environ["GITHUB_TOKEN"])
    repo = g.get_repo(repo_name)
    pr = repo.get_pull(pr_number)
    pr.create_issue_comment(f"## Claude Code Review\n\n{response.content[0].text}")
    
    tokens = response.usage.input_tokens + response.usage.output_tokens
    cost = tokens * 0.80 / 1_000_000  # Haiku $0.80/1M
    print(f"レビューコスト: ${cost:.4f}")

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("--pr", type=int, required=True)
    parser.add_argument("--repo", required=True)
    args = parser.parse_args()
    review_pr(args.pr, args.repo)

実装2: スケジュール実行で日次コスト追跡

# daily_cost_tracker.py
# cronで毎日実行してSlackに通知する

import anthropic
import requests
import os
from datetime import date, timedelta

client = anthropic.Anthropic()

def get_usage_summary() -> str:
    """Claude APIに聞いてコスト状況を分析"""
    today = date.today()
    
    response = client.messages.create(
        model="claude-haiku-4-5-20251001",
        max_tokens=512,
        messages=[{"role": "user", "content": f"""
今日 {today} のClaude APIコスト管理に関する注意点を3点箇条書きで教えてください。
コスト削減に関する実践的なアドバイスを含めてください。"""}]
    )
    return response.content[0].text

def notify_slack(message: str) -> None:
    webhook = os.environ.get("SLACK_WEBHOOK_URL")
    if webhook:
        requests.post(webhook, json={"text": f"📊 Claude API Daily Report\n{message}"})

# cronで毎日8:00に実行
summary = get_usage_summary()
notify_slack(summary)

# コスト試算: 1日1回実行で
# Haiku入力200+出力200トークン = $0.00016/日 = $0.048/月

月額コスト試算

# cost_estimator.py

MODELS = {
    "claude-haiku-4-5-20251001": (0.80, 4.00),
    "claude-sonnet-4-5": (3.00, 15.00),
}

def estimate_24h_system_cost(hourly_calls: int, model: str,
                              avg_input: int = 1000,
                              avg_output: int = 500) -> dict:
    inp, out = MODELS[model]
    per_call = (avg_input * inp + avg_output * out) / 1_000_000
    monthly = per_call * hourly_calls * 24 * 30
    return {"monthly_usd": round(monthly, 2), "per_call_usd": round(per_call, 5)}

print("1時間10コール / Haiku:", estimate_24h_system_cost(10, "claude-haiku-4-5-20251001"))
print("1時間10コール / Sonnet:", estimate_24h_system_cost(10, "claude-sonnet-4-5"))
# 出力例:
# Haiku: {'monthly_usd': 2.88, 'per_call_usd': 0.0004}
# Sonnet: {'monthly_usd': 10.8, 'per_call_usd': 0.0015}

あわせて読みたい

参考ソース