目次
1. チェックツールの種類と役割
| 種類 | 主な役割 | 自動修正 | 例 |
|---|---|---|---|
| Linter | 潜在的バグ、コード品質問題の検出 | 一部可能 | ESLint, Pylint |
| Formatter | コードの見た目を一貫して整える | 常に実施 | Prettier, Black |
| Style Checker | 特定のコーディング規約への準拠確認 | 一部可能 | Checkstyle, RuboCop |
| Static Analysis | 深い解析によるバグ・脆弱性・設計問題の検出 | 一部提案 | SonarQube, PMD |
| Type Checker | コード内の型の一貫性検証 | 通常なし | TypeScript, Mypy |
2. 言語横断的なツール
| ツール | 対応言語 | 主な機能 | インストール方法 (Windows) |
|---|---|---|---|
| SonarQube | 25+言語 | 包括的静的解析 | Windows用インストーラー |
| CodeClimate | 多言語 | 品質モニタリング | SaaS(インストール不要)またはDocker |
| DeepSource | 多言語 | AI支援解析 | SaaS(インストール不要) |
| GitHub CodeQL | 多言語 | セキュリティ検出 | GitHub Actionsで利用可能 |
3. 言語別 推奨コードチェックツール
Java
小規模プロジェクト向け
| ツール | 種類 | 特徴 |
|---|---|---|
| Checkstyle | Style Checker | コーディング規約準拠確認 |
| SpotBugs | Linter | バグパターン検出 |
中・大規模プロジェクト向け
基本セット(必須)
| ツール | 種類 | 特徴 |
|---|---|---|
| Checkstyle | Style Checker | コーディング規約準拠確認 |
| SpotBugs | Linter | バグパターン検出 |
| PMD | Static Analysis | 複雑度分析、未使用変数検出 |
目的別に選択
| ツール | 種類 | 追加する目的 |
|---|---|---|
| SonarQube | 総合分析 | コード品質指標の可視化、長期的な品質管理 |
| Google Java Format | Formatter | チーム間のフォーマット一貫性確保 |
TypeScript/JavaScript
小規模プロジェクト向け
| ツール | 種類 | 特徴 |
|---|---|---|
| ESLint | Linter | カスタマイズ可能なリンター |
| Prettier | Formatter | 意見の余地なしのフォーマッター |
中・大規模プロジェクト向け
基本セット(必須)
| ツール | 種類 | 特徴 |
|---|---|---|
| ESLint | Linter | カスタマイズ可能なリンター |
| Prettier | Formatter | 意見の余地なしのフォーマッター |
| TypeScript Compiler | Type Checker | 型チェック(TSのみ) |
目的別に選択
| ツール | 種類 | 追加する目的 |
|---|---|---|
| SonarJS | Static Analysis | セキュリティ向上、高度なバグ検出 |
| Jest | Test Coverage | テストカバレッジによる品質担保 |
Python
小規模プロジェクト向け
| ツール | 種類 | 特徴 |
|---|---|---|
| Flake8 | Linter | 複数ツール統合の軽量リンター |
| Black | Formatter | 自動フォーマッター |
中・大規模プロジェクト向け
基本セット(必須)
| ツール | 種類 | 特徴 |
|---|---|---|
| Ruff | Linter | 高速パフォーマンス |
| Black | Formatter | 自動フォーマッター |
| Mypy | Type Checker | 静的型チェック |
目的別に選択
| ツール | 種類 | 追加する目的 |
|---|---|---|
| Pylint | Linter | より厳格なコード分析(Ruffと併用またはRuffの代わり) |
| Bandit | Security | セキュリティ重視の場合 |
Ruby
小規模プロジェクト向け
| ツール | 種類 | 特徴 |
|---|---|---|
| RuboCop | Linter/Style | 多機能リンター&スタイルチェッカー |
中・大規模プロジェクト向け
基本セット(必須)
| ツール | 種類 | 特徴 |
|---|---|---|
| RuboCop | Linter/Style | 多機能リンター&スタイルチェッカー |
| Brakeman | Security | Rails脆弱性スキャン(Railsの場合) |
目的別に選択
| ツール | 種類 | 追加する目的 |
|---|---|---|
| Sorbet | Type Checker | 型安全性を高めたい場合 |
| Reek | Code Smell | コードの臭いを検出したい場合 |
C#
小規模プロジェクト向け
| ツール | 種類 | 特徴 |
|---|---|---|
| .NET Analyzers | Linter | 組込み解析 |
| dotnet format | Formatter | 自動フォーマット |
中・大規模プロジェクト向け
基本セット(必須)
| ツール | 種類 | 特徴 |
|---|---|---|
| .NET Analyzers | Linter | 組込み解析 |
| StyleCop | Style | スタイル規約チェック |
| dotnet format | Formatter | 自動フォーマット |
目的別に選択
| ツール | 種類 | 追加する目的 |
|---|---|---|
| Security Code Scan | Security | セキュリティ重視の場合 |
| NDepend | Architecture | 大規模なアーキテクチャ分析が必要な場合 |
Go
小規模プロジェクト向け
| ツール | 種類 | 特徴 |
|---|---|---|
| gofmt | Formatter | 標準フォーマッター |
| go vet | Linter | 一般的誤り検出 |
中・大規模プロジェクト向け
基本セット(必須)
| ツール | 種類 | 特徴 |
|---|---|---|
| golangci-lint | Linter | 多機能リンター(govetを含む) |
| gofmt | Formatter | 標準フォーマッター |
目的別に選択
| ツール | 種類 | 追加する目的 |
|---|---|---|
| staticcheck | Static Analysis | より高度な静的解析(golangci-lintに含まれていない場合) |
| gosec | Security | セキュリティ重視の場合 |
PHP
小規模プロジェクト向け
| ツール | 種類 | 特徴 |
|---|---|---|
| PHP_CodeSniffer | Linter/Style | 規約チェック |
| PHP-CS-Fixer | Formatter | 自動修正 |
中・大規模プロジェクト向け
基本セット(必須)
| ツール | 種類 | 特徴 |
|---|---|---|
| PHP_CodeSniffer | Linter/Style | 規約チェック |
| PHP-CS-Fixer | Formatter | 自動修正 |
| PHPStan | Static Analysis | 高度静的解析 |
目的別に選択
| ツール | 種類 | 追加する目的 |
|---|---|---|
| Psalm | Type Checker | より厳格な型チェックが必要な場合 |
| PHPMD | Code Smell | コードの複雑さを検出したい場合 |
Swift (iOS/macOS)
小規模プロジェクト向け
| ツール | 種類 | 特徴 |
|---|---|---|
| SwiftLint | Linter | 規約チェック |
| SwiftFormat | Formatter | 自動フォーマット |
中・大規模プロジェクト向け
基本セット(必須)
| ツール | 種類 | 特徴 |
|---|---|---|
| SwiftLint | Linter | 規約チェック |
| SwiftFormat | Formatter | 自動フォーマット |
| Xcode Analyzer | Static Analysis | Xcode組込み静的解析 |
目的別に選択
| ツール | 種類 | 追加する目的 |
|---|---|---|
| Periphery | Analysis | デッドコード削減が必要な場合 |
| SwiftGen | Generator | リソースへの型安全アクセスを重視する場合 |
Kotlin
小規模プロジェクト向け
| ツール | 種類 | 特徴 |
|---|---|---|
| ktlint | Linter/Formatter | 規約チェック&フォーマット |
中・大規模プロジェクト向け
基本セット(必須)
| ツール | 種類 | 特徴 |
|---|---|---|
| ktlint | Linter/Formatter | 規約チェック&フォーマット |
| detekt | Static Analysis | 複雑コード検出 |
目的別に選択
| ツール | 種類 | 追加する目的 |
|---|---|---|
| Android Lint | Linter | Android開発の場合 |
| diktat | Style | より厳格なスタイルルールが必要な場合 |
Rust
小規模プロジェクト向け
| ツール | 種類 | 特徴 |
|---|---|---|
| Clippy | Linter | 公式リンター |
| rustfmt | Formatter | 公式フォーマッター |
中・大規模プロジェクト向け
基本セット(必須)
| ツール | 種類 | 特徴 |
|---|---|---|
| Clippy | Linter | 公式リンター |
| rustfmt | Formatter | 公式フォーマッター |
| cargo-audit | Security | 脆弱性チェック |
目的別に選択
| ツール | 種類 | 追加する目的 |
|---|---|---|
| cargo-udeps | Analysis | 未使用依存を削減したい場合 |
| Rust Analyzer | Intelligence | より高度なコード解析が必要な場合 |
C/C++
小規模プロジェクト向け
| ツール | 種類 | 特徴 |
|---|---|---|
| Cppcheck | Linter | バグ検出 |
| clang-format | Formatter | 自動整形 |
中・大規模プロジェクト向け
基本セット(必須)
| ツール | 種類 | 特徴 |
|---|---|---|
| Clang-Tidy | Linter | LLVM系リンター |
| clang-format | Formatter | 自動整形 |
| Cppcheck | Linter | バグ検出 |
目的別に選択
| ツール | 種類 | 追加する目的 |
|---|---|---|
| PVS-Studio | Static Analysis | より深い静的解析が必要な場合 |
| Valgrind | Memory Check | メモリ問題が懸念される場合 |
4. CI/CDパイプラインへの組み込み例
GitHub Actions例(マルチ言語)
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. ツール選定のポイント
- チームの規模と経験: 大規模チームには厳格なルール、小規模チームには柔軟性を
- プロジェクト要件: セキュリティ重視か、速度重視か
- 既存コードベース: 既存コードに適用しやすいツールを選択
- 開発環境統合: IDEやCIツールとの親和性
- カスタマイズ性: 必要なルールのみを適用できるか