目次
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ツールとの親和性
- カスタマイズ性: 必要なルールのみを適用できるか