2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Posted at

目次

  1. チェックツールの種類と役割
  2. 言語横断的なツール
  3. 言語別 推奨コードチェックツール
  4. CI/CDパイプラインへの組み込み例
  5. ツール選定のポイント

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. ツール選定のポイント

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?