🕘 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
📈 運用最適化のベストプラクティス¶
- 段階的導入: 軽量なタスクから開始
- 監視体制: メトリクス収集とアラート設定
- 冗長性: 重要なタスクは複数の時間帯で実行
- セキュリティ: 機密情報の適切な取り扱い
- パフォーマンス: リソース使用量の定期監視
Claude Code + Cronの組み合わせにより、継続的なコード品質向上と運用自動化を実現できます。段階的に導入し、チームの開発ワークフローに最適化していきましょう。