ソースコードチェックツール完全ガイド

## 目次
1. [チェックツールの種類と役割](#1-チェックツールの種類と役割)
2. [言語横断的なツール](#2-言語横断的なツール)
3. [言語別 推奨コードチェックツール](#3-言語別-推奨コードチェックツール)
   - [Java](#java)
   - [TypeScript/JavaScript](#typescriptjavascript)
   - [Python](#python)
   - [Ruby](#ruby)
   - [C#](#c)
   - [Go](#go)
   - [PHP](#php)
   - [Swift (iOS/macOS)](#swift-iosmacOS)
   - [Kotlin](#kotlin)
   - [Rust](#rust)
   - [C/C++](#cc)
4. [CI/CDパイプラインへの組み込み例](#4-cicdパイプラインへの組み込み例)
5. [ツール選定のポイント](#5-ツール選定のポイント)

## 1. チェックツールの種類と役割

| 種類 | 主な役割 | 自動修正 | 例 |
|------|---------|---------|-----|
| **Linter** | 潜在的バグ、コード品質問題の検出 | 一部可能 | ESLint, Pylint |
| **Formatter** | コードの見た目を一貫して整える | 常に実施 | Prettier, Black |
| **Style Checker** | 特定のコーディング規約への準拠確認 | 一部可能 | Checkstyle, RuboCop |
| **Static Analysis** | 深い解析によるバグ・脆弱性・設計問題の検出 | 一部提案 | SonarQube, PMD |
| **Type Checker** | コード内の型の一貫性検証 | 通常なし | TypeScript, Mypy |

## 2. 言語横断的なツール

| ツール | 対応言語 | 主な機能 | インストール方法 (Windows) |
|--------|----------|---------|----------------------------|
| [SonarQube](https://www.sonarqube.org/) | 25+言語 | 包括的静的解析 | [Windows用インストーラー](https://docs.sonarqube.org/latest/setup/install-server/) |
| [CodeClimate](https://codeclimate.com/) | 多言語 | 品質モニタリング | SaaS（インストール不要）またはDocker |
| [DeepSource](https://deepsource.io/) | 多言語 | AI支援解析 | SaaS（インストール不要） |
| [GitHub CodeQL](https://github.com/github/codeql) | 多言語 | セキュリティ検出 | GitHub Actionsで利用可能 |

## 3. 言語別 推奨コードチェックツール
## Java

### 小規模プロジェクト向け
| ツール | 種類 | 特徴 |
|--------|------|------|
| [Checkstyle](https://checkstyle.org/) | Style Checker | コーディング規約準拠確認 |
| [SpotBugs](https://spotbugs.github.io/) | Linter | バグパターン検出 |

### 中・大規模プロジェクト向け
**基本セット（必須）**
| ツール | 種類 | 特徴 |
|--------|------|------|
| [Checkstyle](https://checkstyle.org/) | Style Checker | コーディング規約準拠確認 |
| [SpotBugs](https://spotbugs.github.io/) | Linter | バグパターン検出 |
| [PMD](https://pmd.github.io/) | Static Analysis | 複雑度分析、未使用変数検出 |

**目的別に選択**
| ツール | 種類 | 追加する目的 |
|--------|------|------------|
| [SonarQube](https://www.sonarqube.org/) | 総合分析 | コード品質指標の可視化、長期的な品質管理 |
| [Google Java Format](https://github.com/google/google-java-format) | Formatter | チーム間のフォーマット一貫性確保 |

## TypeScript/JavaScript

### 小規模プロジェクト向け
| ツール | 種類 | 特徴 |
|--------|------|------|
| [ESLint](https://eslint.org/) | Linter | カスタマイズ可能なリンター |
| [Prettier](https://prettier.io/) | Formatter | 意見の余地なしのフォーマッター |

### 中・大規模プロジェクト向け
**基本セット（必須）**
| ツール | 種類 | 特徴 |
|--------|------|------|
| [ESLint](https://eslint.org/) | Linter | カスタマイズ可能なリンター |
| [Prettier](https://prettier.io/) | Formatter | 意見の余地なしのフォーマッター |
| [TypeScript Compiler](https://www.typescriptlang.org/) | Type Checker | 型チェック（TSのみ） |

**目的別に選択**
| ツール | 種類 | 追加する目的 |
|--------|------|------------|
| [SonarJS](https://www.sonarsource.com/js/) | Static Analysis | セキュリティ向上、高度なバグ検出 |
| [Jest](https://jestjs.io/) | Test Coverage | テストカバレッジによる品質担保 |

## Python

### 小規模プロジェクト向け
| ツール | 種類 | 特徴 |
|--------|------|------|
| [Flake8](https://flake8.pycqa.org/) | Linter | 複数ツール統合の軽量リンター |
| [Black](https://black.readthedocs.io/) | Formatter | 自動フォーマッター |

### 中・大規模プロジェクト向け
**基本セット（必須）**
| ツール | 種類 | 特徴 |
|--------|------|------|
| [Ruff](https://github.com/charliermarsh/ruff) | Linter | 高速パフォーマンス |
| [Black](https://black.readthedocs.io/) | Formatter | 自動フォーマッター |
| [Mypy](http://mypy-lang.org/) | Type Checker | 静的型チェック |

**目的別に選択**
| ツール | 種類 | 追加する目的 |
|--------|------|------------|
| [Pylint](https://www.pylint.org/) | Linter | より厳格なコード分析（Ruffと併用またはRuffの代わり） |
| [Bandit](https://bandit.readthedocs.io/) | Security | セキュリティ重視の場合 |

## Ruby

### 小規模プロジェクト向け
| ツール | 種類 | 特徴 |
|--------|------|------|
| [RuboCop](https://rubocop.org/) | Linter/Style | 多機能リンター＆スタイルチェッカー |

### 中・大規模プロジェクト向け
**基本セット（必須）**
| ツール | 種類 | 特徴 |
|--------|------|------|
| [RuboCop](https://rubocop.org/) | Linter/Style | 多機能リンター＆スタイルチェッカー |
| [Brakeman](https://brakemanscanner.org/) | Security | Rails脆弱性スキャン（Railsの場合） |

**目的別に選択**
| ツール | 種類 | 追加する目的 |
|--------|------|------------|
| [Sorbet](https://sorbet.org/) | Type Checker | 型安全性を高めたい場合 |
| [Reek](https://github.com/troessner/reek) | Code Smell | コードの臭いを検出したい場合 |

## C#

### 小規模プロジェクト向け
| ツール | 種類 | 特徴 |
|--------|------|------|
| [.NET Analyzers](https://docs.microsoft.com/ja-jp/dotnet/fundamentals/code-analysis/overview) | Linter | 組込み解析 |
| [dotnet format](https://github.com/dotnet/format) | Formatter | 自動フォーマット |

### 中・大規模プロジェクト向け
**基本セット（必須）**
| ツール | 種類 | 特徴 |
|--------|------|------|
| [.NET Analyzers](https://docs.microsoft.com/ja-jp/dotnet/fundamentals/code-analysis/overview) | Linter | 組込み解析 |
| [StyleCop](https://github.com/DotNetAnalyzers/StyleCopAnalyzers) | Style | スタイル規約チェック |
| [dotnet format](https://github.com/dotnet/format) | Formatter | 自動フォーマット |

**目的別に選択**
| ツール | 種類 | 追加する目的 |
|--------|------|------------|
| [Security Code Scan](https://security-code-scan.github.io/) | Security | セキュリティ重視の場合 |
| [NDepend](https://www.ndepend.com/) | Architecture | 大規模なアーキテクチャ分析が必要な場合 |

## Go

### 小規模プロジェクト向け
| ツール | 種類 | 特徴 |
|--------|------|------|
| [gofmt](https://golang.org/cmd/gofmt/) | Formatter | 標準フォーマッター |
| [go vet](https://golang.org/cmd/vet/) | Linter | 一般的誤り検出 |

### 中・大規模プロジェクト向け
**基本セット（必須）**
| ツール | 種類 | 特徴 |
|--------|------|------|
| [golangci-lint](https://golangci-lint.run/) | Linter | 多機能リンター（govetを含む） |
| [gofmt](https://golang.org/cmd/gofmt/) | Formatter | 標準フォーマッター |

**目的別に選択**
| ツール | 種類 | 追加する目的 |
|--------|------|------------|
| [staticcheck](https://staticcheck.io/) | Static Analysis | より高度な静的解析（golangci-lintに含まれていない場合） |
| [gosec](https://github.com/securego/gosec) | Security | セキュリティ重視の場合 |

## PHP

### 小規模プロジェクト向け
| ツール | 種類 | 特徴 |
|--------|------|------|
| [PHP_CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer) | Linter/Style | 規約チェック |
| [PHP-CS-Fixer](https://github.com/FriendsOfPHP/PHP-CS-Fixer) | Formatter | 自動修正 |

### 中・大規模プロジェクト向け
**基本セット（必須）**
| ツール | 種類 | 特徴 |
|--------|------|------|
| [PHP_CodeSniffer](https://github.com/squizlabs/PHP_CodeSniffer) | Linter/Style | 規約チェック |
| [PHP-CS-Fixer](https://github.com/FriendsOfPHP/PHP-CS-Fixer) | Formatter | 自動修正 |
| [PHPStan](https://phpstan.org/) | Static Analysis | 高度静的解析 |

**目的別に選択**
| ツール | 種類 | 追加する目的 |
|--------|------|------------|
| [Psalm](https://psalm.dev/) | Type Checker | より厳格な型チェックが必要な場合 |
| [PHPMD](https://phpmd.org/) | Code Smell | コードの複雑さを検出したい場合 |

## Swift (iOS/macOS)

### 小規模プロジェクト向け
| ツール | 種類 | 特徴 |
|--------|------|------|
| [SwiftLint](https://github.com/realm/SwiftLint) | Linter | 規約チェック |
| [SwiftFormat](https://github.com/nicklockwood/SwiftFormat) | Formatter | 自動フォーマット |

### 中・大規模プロジェクト向け
**基本セット（必須）**
| ツール | 種類 | 特徴 |
|--------|------|------|
| [SwiftLint](https://github.com/realm/SwiftLint) | Linter | 規約チェック |
| [SwiftFormat](https://github.com/nicklockwood/SwiftFormat) | Formatter | 自動フォーマット |
| [Xcode Analyzer](https://developer.apple.com/library/archive/documentation/DeveloperTools/Conceptual/debugging_with_xcode/chapters/static_analyzer.html) | Static Analysis | Xcode組込み静的解析 |

**目的別に選択**
| ツール | 種類 | 追加する目的 |
|--------|------|------------|
| [Periphery](https://github.com/peripheryapp/periphery) | Analysis | デッドコード削減が必要な場合 |
| [SwiftGen](https://github.com/SwiftGen/SwiftGen) | Generator | リソースへの型安全アクセスを重視する場合 |

## Kotlin

### 小規模プロジェクト向け
| ツール | 種類 | 特徴 |
|--------|------|------|
| [ktlint](https://github.com/pinterest/ktlint) | Linter/Formatter | 規約チェック＆フォーマット |

### 中・大規模プロジェクト向け
**基本セット（必須）**
| ツール | 種類 | 特徴 |
|--------|------|------|
| [ktlint](https://github.com/pinterest/ktlint) | Linter/Formatter | 規約チェック＆フォーマット |
| [detekt](https://github.com/detekt/detekt) | Static Analysis | 複雑コード検出 |

**目的別に選択**
| ツール | 種類 | 追加する目的 |
|--------|------|------------|
| [Android Lint](https://developer.android.com/studio/write/lint) | Linter | Android開発の場合 |
| [diktat](https://github.com/cqfn/diktat) | Style | より厳格なスタイルルールが必要な場合 |

## Rust

### 小規模プロジェクト向け
| ツール | 種類 | 特徴 |
|--------|------|------|
| [Clippy](https://github.com/rust-lang/rust-clippy) | Linter | 公式リンター |
| [rustfmt](https://github.com/rust-lang/rustfmt) | Formatter | 公式フォーマッター |

### 中・大規模プロジェクト向け
**基本セット（必須）**
| ツール | 種類 | 特徴 |
|--------|------|------|
| [Clippy](https://github.com/rust-lang/rust-clippy) | Linter | 公式リンター |
| [rustfmt](https://github.com/rust-lang/rustfmt) | Formatter | 公式フォーマッター |
| [cargo-audit](https://github.com/rustsec/rustsec) | Security | 脆弱性チェック |

**目的別に選択**
| ツール | 種類 | 追加する目的 |
|--------|------|------------|
| [cargo-udeps](https://github.com/est31/cargo-udeps) | Analysis | 未使用依存を削減したい場合 |
| [Rust Analyzer](https://rust-analyzer.github.io/) | Intelligence | より高度なコード解析が必要な場合 |

## C/C++

### 小規模プロジェクト向け
| ツール | 種類 | 特徴 |
|--------|------|------|
| [Cppcheck](http://cppcheck.sourceforge.net/) | Linter | バグ検出 |
| [clang-format](https://clang.llvm.org/docs/ClangFormat.html) | Formatter | 自動整形 |

### 中・大規模プロジェクト向け
**基本セット（必須）**
| ツール | 種類 | 特徴 |
|--------|------|------|
| [Clang-Tidy](https://clang.llvm.org/extra/clang-tidy/) | Linter | LLVM系リンター |
| [clang-format](https://clang.llvm.org/docs/ClangFormat.html) | Formatter | 自動整形 |
| [Cppcheck](http://cppcheck.sourceforge.net/) | Linter | バグ検出 |

**目的別に選択**
| ツール | 種類 | 追加する目的 |
|--------|------|------------|
| [PVS-Studio](https://www.viva64.com/en/pvs-studio/) | Static Analysis | より深い静的解析が必要な場合 |
| [Valgrind](https://valgrind.org/) | Memory Check | メモリ問題が懸念される場合 |

## 4. CI/CDパイプラインへの組み込み例

### GitHub Actions例（マルチ言語）

```yaml
name: Code Quality Check

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  quality:
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v3
      
      # JavaScriptチェック
      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '18'
      - run: npm ci
      - run: npm run lint
      
      # Pythonチェック
      - name: Setup Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.10'
      - run: pip install flake8 black
      - run: flake8 .
      - run: black --check .
      
      # Javaチェック
      - name: Setup Java
        uses: actions/setup-java@v3
        with:
          java-version: '17'
          distribution: 'temurin'
      - run: ./gradlew checkstyle
```

## 5. ツール選定のポイント

1. **チームの規模と経験**: 大規模チームには厳格なルール、小規模チームには柔軟性を
2. **プロジェクト要件**: セキュリティ重視か、速度重視か
3. **既存コードベース**: 既存コードに適用しやすいツールを選択
4. **開発環境統合**: IDEやCIツールとの親和性
5. **カスタマイズ性**: 必要なルールのみを適用できるか