Back to list
Tsuchiya2

review-standards

by Tsuchiya2

A framework-agnostic system for AI-powered code generation with automatic quality gates. Self-adapting workers and evaluators for any language/framework.

0🍴 0📅 Jan 22, 2026

SKILL.md


name: review-standards description: Review and update project coding standards based on recent code changes / 最近のコード変更に基づいてプロジェクトのコーディング規約をレビュー・更新

Review Coding Standards / コーディング規約のレビュー

Purpose: Analyze recent code changes and interactively update coding standards in .claude/skills/ 目的: 最近のコード変更を分析し、.claude/skills/ のコーディング規約を対話的に更新

When to use / いつ使用するか:

  • After completing a sprint / スプリント終了後
  • After major refactoring / 大規模なリファクタリング後
  • When team decides to adopt new patterns / チームで新しいパターンの採用を決定したとき
  • Monthly or quarterly standards review / 月次または四半期ごとの規約レビュー

Step 1: Scan Existing Standards / 既存規約のスキャン

const fs = require('fs')
const path = require('path')

console.log('📚 Scanning existing coding standards...')
console.log('   既存のコーディング規約をスキャン中...\n')

// Check if skills directory exists
const skillsDir = '.claude/skills'
if (!fs.existsSync(skillsDir)) {
  console.log('⚠️  No coding standards found in .claude/skills/')
  console.log('   .claude/skills/ に規約が見つかりません\n')
  console.log('💡 Run /setup to create coding standards first')
  console.log('   まず /setup を実行して規約を作成してください\n')
  return
}

// Find all SKILL.md files
const standardDirs = fs.readdirSync(skillsDir, { withFileTypes: true })
  .filter(dirent => dirent.isDirectory())
  .map(dirent => dirent.name)

const existingStandards = []

for (const dir of standardDirs) {
  const skillPath = path.join(skillsDir, dir, 'SKILL.md')
  if (fs.existsSync(skillPath)) {
    existingStandards.push({
      name: dir,
      path: skillPath,
      label: dir.split('-').map(w => w.charAt(0).toUpperCase() + w.slice(1)).join(' ')
    })
  }
}

if (existingStandards.length === 0) {
  console.log('⚠️  No coding standards found')
  console.log('   規約が見つかりません\n')
  console.log('💡 Run /setup to create coding standards first')
  console.log('   まず /setup を実行して規約を作成してください\n')
  return
}

console.log(`📊 Found ${existingStandards.length} coding standard(s):`)
console.log(`   ${existingStandards.length} 個の規約を検出:\n`)

for (const standard of existingStandards) {
  console.log(`   ✅ ${standard.label} (${standard.name})`)
}
console.log('')

Step 2: Analyze Recent Code Changes / 最近のコード変更を分析

console.log('🔍 Analyzing recent code changes...')
console.log('   最近のコード変更を分析中...\n')

// Ask user how many commits to analyze
const commitResponse = await AskUserQuestion({
  questions: [
    {
      question: "How many recent commits should be analyzed? / 何件の最近のコミットを分析しますか?",
      header: "Commits",
      multiSelect: false,
      options: [
        {
          label: "Last 10 commits / 直近10件",
          description: "Quick review of recent changes / 最近の変更を素早くレビュー"
        },
        {
          label: "Last 20 commits / 直近20件",
          description: "Standard review (Recommended) / 標準的なレビュー(推奨)"
        },
        {
          label: "Last 50 commits / 直近50件",
          description: "Comprehensive review / 包括的なレビュー"
        },
        {
          label: "Since last review / 前回のレビュー以降",
          description: "Analyze all changes since last standards update / 前回の規約更新以降のすべての変更を分析"
        }
      ]
    }
  ]
})

let commitCount = 20
const answer = commitResponse.answers['0']
if (answer.includes('Last 10')) {
  commitCount = 10
} else if (answer.includes('Last 20')) {
  commitCount = 20
} else if (answer.includes('Last 50')) {
  commitCount = 50
} else if (answer.includes('Since last review')) {
  // Get last review date from standards files
  const lastReviewDate = await bash(`grep -h "Last Updated" ${skillsDir}/*/SKILL.md | sort -r | head -1 | cut -d':' -f2- | tr -d ' '`)
  if (lastReviewDate.output.trim()) {
    console.log(`   Last review: ${lastReviewDate.output.trim()}`)
    console.log(`   前回のレビュー: ${lastReviewDate.output.trim()}\n`)
  }
  commitCount = 100 // Fallback to 100 if date parsing fails
}

// Get recent commits
const gitLogResult = await bash(`git log -${commitCount} --pretty=format:"%H %s" --name-only`)

if (gitLogResult.exitCode !== 0) {
  console.log('⚠️  Git repository not found or no commits')
  console.log('   Gitリポジトリが見つからないか、コミットがありません\n')
  return
}

// Parse changed files
const changedFilesSet = new Set()
const lines = gitLogResult.output.split('\n')
for (const line of lines) {
  if (line && !line.match(/^[a-f0-9]{40}/) && !line.match(/^$/)) {
    // This is a file path
    changedFilesSet.add(line.trim())
  }
}

const changedFiles = Array.from(changedFilesSet)

console.log(`📝 Analyzed ${commitCount} commits`)
console.log(`   ${commitCount} 件のコミットを分析しました`)
console.log(`📁 Found ${changedFiles.length} changed files`)
console.log(`   ${changedFiles.length} 個の変更されたファイルを検出\n`)

Step 3: Launch Standards Review Agent / 規約レビューエージェントの起動

console.log('🤖 Launching standards review agent...')
console.log('   規約レビューエージェントを起動中...\n')

// Ask which standards to review
const standardsResponse = await AskUserQuestion({
  questions: [
    {
      question: "Which standards do you want to review? / どの規約をレビューしますか?",
      header: "Standards",
      multiSelect: true,
      options: existingStandards.map(std => ({
        label: std.label,
        description: `Review ${std.name} based on recent code changes / 最近のコード変更に基づいて ${std.name} をレビュー`
      }))
    }
  ]
})

const selectedStandards = []
const selectedLabels = standardsResponse.answers['0']

for (const std of existingStandards) {
  if (selectedLabels.includes(std.label)) {
    selectedStandards.push(std)
  }
}

if (selectedStandards.length === 0) {
  console.log('⏭️  No standards selected. Exiting.')
  console.log('   規約が選択されませんでした。終了します。\n')
  return
}

console.log(`\n🎯 Reviewing ${selectedStandards.length} standard(s)...`)
console.log(`   ${selectedStandards.length} 個の規約をレビュー中...\n`)

// Launch review agent for each selected standard
for (const standard of selectedStandards) {
  console.log(`\n📖 Reviewing ${standard.label}...`)
  console.log(`   ${standard.label} をレビュー中...\n`)

  // Determine relevant file patterns
  let filePatterns = '**/*.{ts,tsx,js,jsx}'
  if (standard.name.includes('typescript')) {
    filePatterns = '**/*.ts'
  } else if (standard.name.includes('react')) {
    filePatterns = '**/*.tsx'
  } else if (standard.name.includes('python')) {
    filePatterns = '**/*.py'
  } else if (standard.name.includes('go')) {
    filePatterns = '**/*.go'
  } else if (standard.name.includes('rust')) {
    filePatterns = '**/*.rs'
  } else if (standard.name.includes('test')) {
    filePatterns = '**/*.{test,spec}.{ts,tsx,js,jsx,py}'
  }

  // Filter changed files by pattern
  const relevantFiles = changedFiles.filter(file => {
    if (standard.name.includes('typescript') && file.endsWith('.ts') && !file.endsWith('.tsx')) return true
    if (standard.name.includes('react') && file.endsWith('.tsx')) return true
    if (standard.name.includes('python') && file.endsWith('.py')) return true
    if (standard.name.includes('go') && file.endsWith('.go')) return true
    if (standard.name.includes('rust') && file.endsWith('.rs')) return true
    if (standard.name.includes('test') && (file.includes('.test.') || file.includes('.spec.'))) return true
    if (standard.name.includes('security')) return true // All files relevant for security
    return false
  })

  if (relevantFiles.length === 0) {
    console.log(`   ⏭️  No relevant files changed for ${standard.label}`)
    console.log(`   ${standard.label} に関連するファイルの変更がありません\n`)
    continue
  }

  console.log(`   📁 Analyzing ${relevantFiles.length} relevant file(s)...`)
  console.log(`   ${relevantFiles.length} 個の関連ファイルを分析中...\n`)

  const reviewResult = await Task({
    subagent_type: 'general-purpose',
    model: 'sonnet',
    description: `Review ${standard.name}`,
    prompt: `You are a coding standards expert. Review and update coding standards based on recent code changes.

**Task**: Review ${standard.label} and detect pattern deviations

**Standard Path**: ${standard.path}
**Changed Files**: ${relevantFiles.slice(0, 20).join(', ')}${relevantFiles.length > 20 ? ` (and ${relevantFiles.length - 20} more)` : ''}

**Instructions**:

1. **Read Current Standard** (use Read tool):
   - Read ${standard.path}
   - Understand current naming conventions, patterns, and rules

2. **Analyze Changed Files** (use Read tool):
   - Read 5-10 representative files from the changed files list
   - Focus on recent patterns and conventions
   - Look for:
     - Naming convention changes
     - New error handling patterns
     - New file structure approaches
     - New testing patterns
     - New documentation styles

3. **Detect Deviations**:
   - Compare recent code patterns with current standards
   - Identify meaningful deviations (ignore minor variations)
   - Focus on patterns that appear in multiple files (not one-offs)

4. **Interactive Review with User** (use AskUserQuestion):
   - For each significant deviation, ask user:
     - Show the current standard
     - Show the new pattern detected
     - Show example files
     - Ask: "Update standard to include this pattern?"
   - Ask if user wants to add, modify, or skip each detected pattern

5. **Update Standard** (use Edit tool):
   - For approved changes:
     - Update the relevant sections in SKILL.md
     - Add new examples from the codebase
     - Update "Last Updated" timestamp
     - Add change log entry at the bottom
   - Preserve existing good patterns
   - Don't remove rules unless user explicitly requests

**Important**:
- Be conservative: Only suggest updates for clear, repeated patterns
- Ask user for confirmation before making changes
- Show concrete examples from the codebase
- Update "Last Updated" field to current date
- Add change history at the end of SKILL.md

**Current Date**: ${new Date().toISOString().split('T')[0]}
**Current Working Directory**: ${process.cwd()}
`
  })

  console.log(`   ✅ ${standard.label} review completed`)
  console.log(`   ${standard.label} のレビューが完了しました\n`)
}

console.log('\n✅ All standards reviewed!')
console.log('   すべての規約のレビューが完了しました!\n')

Step 4: Summary / まとめ

console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━')
console.log('📊 Standards Review Summary / 規約レビューのまとめ')
console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n')

console.log(`✅ Reviewed ${selectedStandards.length} standard(s)`)
console.log(`   ${selectedStandards.length} 個の規約をレビューしました\n`)

console.log('📁 Updated standards:')
console.log('   更新された規約:\n')

for (const standard of selectedStandards) {
  console.log(`   - ${standard.label}: ${standard.path}`)
}

console.log('\n💡 Next steps / 次のステップ:')
console.log('   1. Review the updated SKILL.md files')
console.log('      更新されたSKILL.mdファイルを確認')
console.log('   2. Commit the changes to git')
console.log('      変更をgitにコミット')
console.log('   3. Share updates with your team')
console.log('      チームに更新を共有')
console.log('   4. Run /review-standards regularly (monthly/quarterly)')
console.log('      定期的に /review-standards を実行(月次/四半期)\n')

console.log('🎉 Standards review complete!')
console.log('   規約レビュー完了!\n')

Notes / 注意事項

Frequency / 実行頻度:

  • Recommended / 推奨: Monthly or after each sprint / 月次またはスプリント終了後
  • Minimum / 最低: Quarterly / 四半期ごと
  • Ad-hoc / 臨時: After major refactoring or when adopting new patterns / 大規模リファクタリング後または新パターン採用時

What gets updated / 更新される内容:

  • Naming conventions / 命名規則
  • File structure patterns / ファイル構造パターン
  • Error handling approaches / エラー処理アプローチ
  • Testing patterns / テストパターン
  • Documentation styles / ドキュメントスタイル
  • Real code examples / 実際のコード例

What doesn't get updated / 更新されない内容:

  • Core principles (unless team decides) / コア原則(チーム決定時を除く)
  • Security rules (require explicit review) / セキュリティルール(明示的なレビューが必要)
  • One-off patterns (need repetition to become standard) / 一回限りのパターン(標準になるには繰り返しが必要)

For more information / 詳細情報:

  • Coding standards location / 規約の場所: .claude/skills/
  • Setup command / セットアップコマンド: /setup
  • EDAF documentation / EDAFドキュメント: .claude/skills/edaf-orchestration/

Score

Total Score

75/100

Based on repository quality metrics

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

+10
説明文

100文字以上の説明がある

+10
人気

GitHub Stars 100以上

0/15
最近の活動

1ヶ月以内に更新

+10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

+5

Reviews

💬

Reviews coming soon