AIコーディング 2026.05.13
Claude Codeで24時間稼働するAI開発エンジンを構築する【2026年版】DevOps不要の自動化設計
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}