コンテンツにスキップ

Claude Code 完全ガイド

🕘 Claude Code + Cron自動化完全ガイド2025年 - 定時実行・スケジューリング実装

Claude CodeとCronを連携させることで、定時実行やスケジューリングによる高度な自動化システムを構築できます。本ガイドでは、実用的な自動化シナリオから高度な運用まで段階的に解説します。

📋 目次

🎯 基本概念と準備

Claude CodeとCronの組み合わせメリット

自動化の価値

  • 定時実行: 毎日・毎週・毎月の定期タスク自動化
  • コード生成: 定期的なコード更新・リファクタリング
  • 監視・メンテナンス: システム状態の定期チェック
  • データ処理: ログ解析・レポート生成の自動化

事前準備

# Cronの確認
crontab -l

# Claude Codeのインストール確認
claude --version

# 作業ディレクトリ作成
mkdir -p ~/claude-automation/{scripts,logs,config}
cd ~/claude-automation
# WSL内でCronサービス開始
sudo service cron start

# 自動起動設定
sudo systemctl enable cron

# Claude Code確認
claude --version

⚡ 基本的なCron連携

1. シンプルな定時実行スクリプト

daily-code-review.sh
#!/bin/bash

# Claude Code + Cron基本実行スクリプト
LOG_FILE="$HOME/claude-automation/logs/daily-$(date +%Y%m%d).log"
PROJECT_PATH="$HOME/projects/my-app"

echo "=== Claude Code Daily Review: $(date) ===" >> "$LOG_FILE"

cd "$PROJECT_PATH" || exit 1

# Claude Codeでコードレビュー実行
claude code . --prompt "プロジェクト全体のコード品質をチェックし、改善提案を出力してください" \
  --output "$HOME/claude-automation/logs/review-$(date +%Y%m%d).md" \
  >> "$LOG_FILE" 2>&1

echo "=== Review Completed: $(date) ===" >> "$LOG_FILE"

2. Crontab設定例

# Crontab編集
crontab -e

# 設定例
# 毎日午前9時にコードレビュー実行
0 9 * * * /home/user/claude-automation/scripts/daily-code-review.sh

# 毎週月曜日にフルスキャン
0 10 * * 1 /home/user/claude-automation/scripts/weekly-scan.sh

# 毎月1日にレポート生成
0 8 1 * * /home/user/claude-automation/scripts/monthly-report.sh

🛠️ 実用的な自動化パターン

パターン1: 自動バックアップ + コード分析

backup-and-analyze.sh
#!/bin/bash

BACKUP_DIR="$HOME/backups/$(date +%Y%m%d)"
PROJECT_DIR="$HOME/projects/webapp"
LOG_FILE="$HOME/claude-automation/logs/backup-$(date +%Y%m%d).log"

# バックアップ作成
mkdir -p "$BACKUP_DIR"
rsync -av "$PROJECT_DIR/" "$BACKUP_DIR/" >> "$LOG_FILE"

# Claude Codeで変更点分析
cd "$PROJECT_DIR" || exit 1

claude code . --prompt "
昨日からの変更点を分析し、以下を出力:
1. 追加された機能の概要
2. 潜在的なセキュリティリスク
3. パフォーマンス改善提案
4. テストカバレッジの改善点
" --output "$HOME/claude-automation/reports/daily-analysis-$(date +%Y%m%d).md" \
  >> "$LOG_FILE" 2>&1

パターン2: 依存関係監視・更新

dependency-monitor.sh
#!/bin/bash

PROJECT_DIR="$HOME/projects/webapp"
ALERT_EMAIL="admin@company.com"

cd "$PROJECT_DIR" || exit 1

# Claude Codeで依存関係チェック
ANALYSIS_RESULT=$(claude code . --prompt "
package.jsonの依存関係を分析し、以下を確認:
1. セキュリティ脆弱性のあるパッケージ
2. 大幅にアップデート可能なパッケージ
3. 非推奨のパッケージ
4. 安全に更新可能な推奨更新リスト

JSON形式で結果を出力してください。
" --format json)

# 緊急度の高い問題があればメール通知
if echo "$ANALYSIS_RESULT" | jq -r '.security_issues[]' | grep -q "critical"; then
    echo "$ANALYSIS_RESULT" | mail -s "Critical Security Issues Detected" "$ALERT_EMAIL"
fi

# レポート保存
echo "$ANALYSIS_RESULT" > "$HOME/claude-automation/reports/dependency-$(date +%Y%m%d).json"

パターン3: 自動リファクタリング

auto-refactor.sh
#!/bin/bash

PROJECT_DIR="$HOME/projects/api-server"
BRANCH_NAME="auto-refactor-$(date +%Y%m%d)"

cd "$PROJECT_DIR" || exit 1

# 新しいブランチ作成
git checkout -b "$BRANCH_NAME"

# Claude Codeでリファクタリング実行
claude code . --prompt "
以下の基準でコードをリファクタリングしてください:
1. 重複コードの削除
2. 関数の分割(100行超える関数)
3. 変数名の改善
4. コメント追加
5. TypeScript型定義の改善

変更したファイルのリストと変更理由を出力してください。
" --execute --output "refactor-log-$(date +%Y%m%d).md"

# 変更があればコミット・プッシュ
if git diff --quiet; then
    echo "No changes to commit"
    git checkout main
    git branch -d "$BRANCH_NAME"
else
    git add .
    git commit -m "🤖 Auto-refactor: $(date +%Y-%m-%d)

    Automated refactoring by Claude Code:
    - Code duplication removal
    - Function decomposition
    - Variable naming improvements
    - Type definition enhancements"

    git push origin "$BRANCH_NAME"

    # プルリクエスト作成 (GitHub CLI使用)
    gh pr create --title "🤖 Automated Refactoring $(date +%Y-%m-%d)" \
      --body "Automated code improvements by Claude Code + Cron" \
      --base main --head "$BRANCH_NAME"
fi

🚀 高度な運用テクニック

1. 条件付き実行システム

conditional-execution.sh
#!/bin/bash

PROJECT_DIR="$HOME/projects/webapp"
CONFIG_FILE="$HOME/claude-automation/config/settings.json"

# 設定読み込み
LAST_COMMIT=$(jq -r '.last_processed_commit' "$CONFIG_FILE")
CURRENT_COMMIT=$(cd "$PROJECT_DIR" && git rev-parse HEAD)

# 新しいコミットがある場合のみ実行
if [ "$LAST_COMMIT" != "$CURRENT_COMMIT" ]; then
    echo "New commits detected, running analysis..."

    cd "$PROJECT_DIR" || exit 1

    # 変更ファイル取得
    CHANGED_FILES=$(git diff --name-only "$LAST_COMMIT" HEAD)

    # Claude Codeで変更分析
    claude code . --prompt "
    以下のファイルが変更されました:
    $CHANGED_FILES

    変更内容を分析し、以下を出力:
    1. 影響範囲の評価
    2. 必要なテストの特定
    3. デプロイ前チェック項目
    4. 潜在的なリスク評価
    " --output "$HOME/claude-automation/reports/change-analysis-$(date +%Y%m%d-%H%M).md"

    # 設定更新
    jq --arg commit "$CURRENT_COMMIT" '.last_processed_commit = $commit' "$CONFIG_FILE" > tmp.json
    mv tmp.json "$CONFIG_FILE"
else
    echo "No new commits, skipping analysis"
fi

2. 並列実行とロック機構

parallel-safe-execution.sh
#!/bin/bash

LOCK_FILE="/tmp/claude-automation.lock"
MAX_PARALLEL=3

# ロック取得
exec 200>"$LOCK_FILE"
if ! flock -n 200; then
    echo "Another instance is running, exiting..."
    exit 1
fi

# 並列処理関数
run_analysis() {
    local project_path="$1"
    local analysis_type="$2"

    echo "Starting $analysis_type for $project_path"

    cd "$project_path" || return 1

    claude code . --prompt "$analysis_type analysis" \
      --output "$HOME/claude-automation/reports/${analysis_type}-$(basename "$project_path")-$(date +%Y%m%d).md" &

    local pid=$!
    echo "$pid" >> "$HOME/claude-automation/pids.tmp"

    return 0
}

# 複数プロジェクトを並列処理
PROJECTS=(
    "$HOME/projects/frontend"
    "$HOME/projects/backend"
    "$HOME/projects/mobile-app"
)

for project in "${PROJECTS[@]}"; do
    run_analysis "$project" "security" &

    # 並列数制限
    job_count=$(jobs -r | wc -l)
    if [ "$job_count" -ge $MAX_PARALLEL ]; then
        wait -n  # 1つのジョブ完了を待つ
    fi
done

# 全ジョブ完了待ち
wait

# ロック解除
flock -u 200

3. エラーハンドリングと通知

robust-automation.sh
#!/bin/bash

set -euo pipefail  # エラー時即座に終了

LOG_FILE="$HOME/claude-automation/logs/main-$(date +%Y%m%d).log"
ERROR_LOG="$HOME/claude-automation/logs/error-$(date +%Y%m%d).log"
WEBHOOK_URL="https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK"

# エラーハンドラー
error_handler() {
    local line_no=$1
    local error_code=$2

    echo "Error on line $line_no: exit code $error_code" | tee -a "$ERROR_LOG"

    # Slack通知
    curl -X POST -H 'Content-type: application/json' \
      --data "{\"text\":\"Claude Code automation failed: Line $line_no, Code $error_code\"}" \
      "$WEBHOOK_URL"

    # ログ送信
    tail -50 "$LOG_FILE" | mail -s "Claude Code Automation Error" admin@company.com

    exit "$error_code"
}

trap 'error_handler ${LINENO} $?' ERR

# メイン処理
{
    echo "=== Starting Claude Code automation: $(date) ==="

    # 各種チェック実行
    run_security_scan
    run_performance_analysis
    run_code_quality_check

    echo "=== Automation completed successfully: $(date) ==="

    # 成功通知
    curl -X POST -H 'Content-type: application/json' \
      --data '{"text":"✅ Claude Code automation completed successfully"}' \
      "$WEBHOOK_URL"

} 2>&1 | tee -a "$LOG_FILE"

📊 監視・メトリクス収集

実行統計の自動集計

metrics-collector.sh
#!/bin/bash

METRICS_FILE="$HOME/claude-automation/metrics/$(date +%Y%m).json"
LOG_DIR="$HOME/claude-automation/logs"

# 今日の実行統計を集計
TODAY=$(date +%Y%m%d)
TODAY_LOGS=$(find "$LOG_DIR" -name "*$TODAY*" -type f)

TOTAL_EXECUTIONS=$(echo "$TODAY_LOGS" | wc -l)
SUCCESSFUL_RUNS=$(grep -l "completed successfully" $TODAY_LOGS | wc -l)
FAILED_RUNS=$((TOTAL_EXECUTIONS - SUCCESSFUL_RUNS))

# メトリクス更新
jq --arg date "$TODAY" \
   --arg total "$TOTAL_EXECUTIONS" \
   --arg success "$SUCCESSFUL_RUNS" \
   --arg failed "$FAILED_RUNS" \
   '.daily_stats += [{
     date: $date,
     total_executions: ($total | tonumber),
     successful_runs: ($success | tonumber),
     failed_runs: ($failed | tonumber),
     success_rate: (($success | tonumber) / ($total | tonumber) * 100)
   }]' "$METRICS_FILE" > tmp.json && mv tmp.json "$METRICS_FILE"

# 週次レポート生成(月曜日のみ)
if [ "$(date +%u)" = "1" ]; then
    claude code . --prompt "
    メトリクスファイル $METRICS_FILE を分析し、
    過去1週間の自動化システムのパフォーマンスレポートを作成してください:
    1. 成功率の推移
    2. 失敗パターンの分析
    3. 改善提案
    " --output "$HOME/claude-automation/reports/weekly-performance-$(date +%Y%m%d).md"
fi

⚠️ トラブルシューティング

1. よくある問題と解決策

Cron実行時の環境変数問題

# Cronは最小限の環境変数しか持たない
# スクリプト内で明示的にPATHを設定

#!/bin/bash
export PATH="/usr/local/bin:/usr/bin:/bin:$HOME/.local/bin"
export NODE_PATH="/usr/local/lib/node_modules"

# Claude Code実行前に環境確認
which claude || exit 1

権限エラー

# ログディレクトリの権限設定
chmod 755 "$HOME/claude-automation"
chmod 644 "$HOME/claude-automation/logs"/*

# スクリプトの実行権限
chmod +x "$HOME/claude-automation/scripts"/*.sh

2. デバッグ用Cronスクリプト

debug-cron.sh
#!/bin/bash

DEBUG_LOG="$HOME/claude-automation/debug-$(date +%Y%m%d-%H%M).log"

{
    echo "=== Debug Info: $(date) ==="
    echo "User: $(whoami)"
    echo "Working Directory: $(pwd)"
    echo "PATH: $PATH"
    echo "Environment:"
    env | sort
    echo ""

    echo "Claude Code Version:"
    claude --version || echo "Claude not found in PATH"
    echo ""

    echo "Available Commands:"
    which git || echo "git not found"
    which node || echo "node not found"
    which npm || echo "npm not found"
    echo ""

    echo "=== Running Actual Script ==="

} >> "$DEBUG_LOG" 2>&1

# 実際のスクリプト実行(デバッグモード)
"$HOME/claude-automation/scripts/daily-code-review.sh" >> "$DEBUG_LOG" 2>&1

3. ログローテーション

log-rotation.sh
#!/bin/bash

LOG_DIR="$HOME/claude-automation/logs"
ARCHIVE_DIR="$HOME/claude-automation/archives"
RETENTION_DAYS=30

# 30日以上古いログをアーカイブ
find "$LOG_DIR" -name "*.log" -mtime +$RETENTION_DAYS -exec mv {} "$ARCHIVE_DIR/" \;

# アーカイブディレクトリの90日以上古いファイルを削除
find "$ARCHIVE_DIR" -name "*.log" -mtime +90 -delete

# 圧縮してストレージ節約
find "$ARCHIVE_DIR" -name "*.log" -mtime +7 -exec gzip {} \;

🔧 高度な設定例

全機能統合Crontab

# 完全自動化Crontab設定例

# 毎15分: 緊急度の高いセキュリティチェック
*/15 * * * * /home/user/claude-automation/scripts/security-monitor.sh

# 毎時: 軽量な品質チェック
0 * * * * /home/user/claude-automation/scripts/hourly-quality-check.sh

# 毎日朝9時: フルコードレビュー
0 9 * * * /home/user/claude-automation/scripts/daily-full-review.sh

# 毎日夜23時: バックアップ + 分析
0 23 * * * /home/user/claude-automation/scripts/backup-and-analyze.sh

# 毎週月曜朝: 週次レポート生成
0 8 * * 1 /home/user/claude-automation/scripts/weekly-report.sh

# 毎月1日: 依存関係大規模チェック
0 6 1 * * /home/user/claude-automation/scripts/monthly-dependency-audit.sh

# 毎日深夜: ログローテーション
0 2 * * * /home/user/claude-automation/scripts/log-rotation.sh

📈 運用最適化のベストプラクティス

  1. 段階的導入: 軽量なタスクから開始
  2. 監視体制: メトリクス収集とアラート設定
  3. 冗長性: 重要なタスクは複数の時間帯で実行
  4. セキュリティ: 機密情報の適切な取り扱い
  5. パフォーマンス: リソース使用量の定期監視

Claude Code + Cronの組み合わせにより、継続的なコード品質向上と運用自動化を実現できます。段階的に導入し、チームの開発ワークフローに最適化していきましょう。