Initial commit

This commit is contained in:
Zhongwei Li
2025-11-29 18:09:29 +08:00
commit b3ad2e3943
28 changed files with 6966 additions and 0 deletions

158
commands/tdd-cycle-full.sh Executable file
View File

@@ -0,0 +1,158 @@
#!/bin/bash
# TDD フルサイクル実行スクリプト
# Usage: ./tdd-cycle-full.sh <test_case_name>
# 開始時間記録
START_TIME=$(date +%s)
if [ $# -ne 1 ]; then
echo "Usage: $0 <test_case_name>"
exit 1
fi
TEST_CASE_NAME=$1
# カラー定義
RED='\033[0;31m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Claude コマンド共通設定
ALLOWED_TOOLS="Write,Edit,Bash(npm:*),Bash(node:*)"
DISALLOWED_TOOLS="Bash(git *)"
VERIFY_ALLOWED_TOOLS="Write,Edit,Bash(npm:*),Bash(node:*),Bash(git status),Bash(git diff)"
VERIFY_DISALLOWED_TOOLS="Bash(git add),Bash(git commit),Bash(git push)"
# TDDサイクル実行関数
run_tdd_cycle() {
local test_case=$1
echo "🔴 RED フェーズ開始..."
if ! claude -p "/tsumiki:tdd-red $test_case 不足テストの追加実装" --allowedTools "$ALLOWED_TOOLS" --disallowedTools "$DISALLOWED_TOOLS"; then
echo -e "${RED}❌ RED フェーズ失敗${NC}"
exit 1
fi
echo -e "${GREEN}✅ RED フェーズ完了${NC}"
echo "🟢 GREEN フェーズ開始..."
if ! claude -p "/tsumiki:tdd-green $test_case" --allowedTools "$ALLOWED_TOOLS" --disallowedTools "$DISALLOWED_TOOLS"; then
echo -e "${RED}❌ GREEN フェーズ失敗${NC}"
exit 1
fi
echo -e "${GREEN}✅ GREEN フェーズ完了${NC}"
echo "🔵 REFACTOR フェーズ開始..."
if ! claude -p "/tsumiki:tdd-refactor $test_case" --allowedTools "$ALLOWED_TOOLS" --disallowedTools "$DISALLOWED_TOOLS"; then
echo -e "${RED}❌ REFACTOR フェーズ失敗${NC}"
exit 1
fi
echo -e "${GREEN}✅ REFACTOR フェーズ完了${NC}"
echo "🔍 VERIFY COMPLETE フェーズ開始..."
local verify_result
verify_result=$(claude -p "/tsumiki:tdd-verify-complete $test_case" --allowedTools "$VERIFY_ALLOWED_TOOLS" --disallowedTools "$VERIFY_DISALLOWED_TOOLS" 2>&1)
local verify_exit_code=$?
if [ $verify_exit_code -ne 0 ]; then
echo -e "${RED}❌ VERIFY COMPLETE フェーズ失敗${NC}"
exit 1
fi
echo -e "${GREEN}✅ VERIFY COMPLETE フェーズ完了${NC}"
echo -e "${verify_result}
# 結果の判定
if echo "$verify_result" | grep -E "(完全性検証: 合格)" > /dev/null; then
echo -e "${GREEN}🎉 TDDサイクル完了${NC}: $test_case のTDDサイクルが正常に完了しました"
return 0
elif echo "$verify_result" | grep -E "(未実装|品質基準に満たない|追加実装が必要)" > /dev/null; then
echo -e "${YELLOW}🔄 TDDサイクル継続${NC}: 品質基準に満たない項目が見つかりました。RED フェーズに戻ります..."
return 1
else
echo -e "${YELLOW}⚠️ 判定結果が不明確です${NC}"
echo "--- VERIFY COMPLETE フェーズの出力 ---"
echo "$verify_result"
echo "--- 出力終了 ---"
echo ""
echo -e "${BLUE}以下から選択してください:${NC}"
echo "1) 完了として扱うTDDサイクルを終了"
echo "2) RED フェーズから継続する"
echo "3) スクリプトを終了する"
echo ""
while true; do
read -p "選択 (1/2/3): " choice
case $choice in
1)
echo -e "${GREEN}🎉 TDDサイクル完了${NC}: ユーザー判断により完了とします"
return 0
;;
2)
echo -e "${YELLOW}🔄 TDDサイクル継続${NC}: ユーザー判断により RED フェーズに戻ります"
return 1
;;
3)
echo -e "${BLUE}👋 スクリプトを終了します${NC}"
exit 0
;;
*)
echo "無効な選択です。1, 2, または 3 を入力してください。"
;;
esac
done
fi
}
# 完了時間表示関数
show_completion_time() {
local exit_code=$1
local end_time=$(date +%s)
local duration=$((end_time - START_TIME))
local hours=$((duration / 3600))
local minutes=$(((duration % 3600) / 60))
local seconds=$((duration % 60))
printf "⏱️ 実行時間: "
if [ $hours -gt 0 ]; then
printf "%d時間%d分%d秒\n" $hours $minutes $seconds
elif [ $minutes -gt 0 ]; then
printf "%d分%d秒\n" $minutes $seconds
else
printf "%d秒\n" $seconds
fi
printf "🕐 終了時刻: %s\n" "$(date +'%Y-%m-%d %H:%M:%S')"
if [ $exit_code -eq 0 ]; then
echo -e "${GREEN}✅ 正常終了${NC}"
else
echo -e "${RED}❌ エラー終了${NC}"
fi
}
# trap設定エラー終了時にも時間表示
trap 'show_completion_time $?' EXIT
# メインループ
echo "TDD フルサイクル実行開始: $TEST_CASE_NAME"
max_cycles=5
cycle_count=0
while [ $cycle_count -lt $max_cycles ]; do
cycle_count=$((cycle_count + 1))
echo -e "${BLUE}=== サイクル $cycle_count 開始 ===${NC}"
if run_tdd_cycle "$TEST_CASE_NAME"; then
echo -e "${GREEN}🎉 全体完了: TDDサイクルが正常に完了しました${NC}"
exit 0
fi
echo -e "${YELLOW}サイクル $cycle_count 完了、次のサイクルに進みます...${NC}"
echo ""
done
echo -e "${RED}❌ 最大サイクル数($max_cycles)に達しました。手動で確認してください。${NC}"
exit 1