static-analysis
C/C++ コードベースに対する静的解析スキルです。コード品質の強化、ビルドエラーのトリアージ、clang-tidy・cppcheck・scan-build の実行、チェックカテゴリの解釈、誤検知の抑制、または CI への静的解析の組み込みを行う際に使用します。clang-tidy チェック、cppcheck、scan-build、compile_commands.json、コード堅牢化、静的解析の警告に関するクエリで有効になります。
description の原文を見る
Static analysis skill for C/C++ codebases. Use when hardening code quality, triaging noisy builds, running clang-tidy, cppcheck, or scan-build, interpreting check categories, suppressing false positives, or integrating static analysis into CI. Activates on queries about clang-tidy checks, cppcheck, scan-build, compile_commands.json, code hardening, or static analysis warnings.
SKILL.md 本文
静的解析
目的
エージェントに対して、C/C++ 用の静的解析ツール(clang-tidy、cppcheck、scan-build)の選択、実行、トリアージを案内します。抑制戦略と CI 統合も含みます。
トリガー
- 「プロジェクトで clang-tidy を実行するにはどうすればよいですか?」
- 「有効にすべき clang-tidy チェックは何ですか?」
- 「cppcheck が誤検知を報告しています。どのように抑制すればよいですか?」
- 「scan-build でより深い解析を設定するにはどうすればよいですか?」
- 「静的解析の警告でビルドが騒々しいです」
- 「clang-tidy 用に compile_commands.json を生成するにはどうすればよいですか?」
ワークフロー
1. compile_commands.json を生成
clang-tidy はコンパイレーション・データベースが必要です:
# CMake (推奨)
cmake -S . -B build -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
ln -s build/compile_commands.json .
# Bear (Make ベースのプロジェクト向け)
bear -- make
# compiledb (Make の代替手段)
pip install compiledb
compiledb make
2. clang-tidy を実行
# 単一ファイル
clang-tidy src/foo.c -- -std=c11 -I include/
# compile_commands.json 経由でプロジェクト全体
run-clang-tidy -p build/ -j$(nproc)
# 特定チェックを有効にして実行
clang-tidy -checks='bugprone-*,modernize-*,performance-*' src/foo.cpp
# 自動修正を適用
clang-tidy -checks='modernize-use-nullptr' -fix src/foo.cpp
3. チェックカテゴリの判定樹
目的?
├── 実際のバグを見つける → bugprone-*, clang-analyzer-*
├── C++ コードを最新化する → modernize-*
├── コアガイドラインに従う → cppcoreguidelines-*
├── パフォーマンスの問題を捕捉する → performance-*
├── セキュリティをハードニング → cert-*, hicpp-*
└── 可読性 / スタイル → readability-*, llvm-*
| カテゴリ | 主要チェック | 検出内容 |
|---|---|---|
bugprone-* | use-after-move, integer-division, suspicious-memset-usage | 疑わしいバグ |
modernize-* | use-nullptr, use-override, use-auto | C++11/14/17 のイディオム |
cppcoreguidelines-* | avoid-goto, pro-bounds-*, no-malloc | C++ コアガイドライン |
performance-* | unnecessary-copy-initialization, avoid-endl | パフォーマンス低下 |
clang-analyzer-* | core.*, unix.*, security.* | パス依存バグ |
cert-* | err34-c, str51-cpp | CERT コーディング標準 |
4. .clang-tidy 設定ファイル
# .clang-tidy — プロジェクトルートに配置
Checks: >
bugprone-*,
modernize-*,
performance-*,
-modernize-use-trailing-return-type,
-bugprone-easily-swappable-parameters
WarningsAsErrors: 'bugprone-*,clang-analyzer-*'
HeaderFilterRegex: '^(src|include)/.*'
CheckOptions:
- key: modernize-loop-convert.MinConfidence
value: reasonable
- key: readability-identifier-naming.VariableCase
value: camelCase
5. 誤検知を抑制
// 単一行を抑制
int result = riskyOp(); // NOLINT(bugprone-signed-char-misuse)
// ブロックを抑制
// NOLINTNEXTLINE(cppcoreguidelines-avoid-magic-numbers)
constexpr int BUFFER_SIZE = 4096;
// 関数全体を抑制
[[clang::suppress("bugprone-*")]]
void legacy_code() { /* ... */ }
または .clang-tidy で:
# サードパーティディレクトリを除外
HeaderFilterRegex: '^(src|include)/.*'
# 特定チェックを無効化
Checks: '-bugprone-easily-swappable-parameters'
6. cppcheck を実行
# 基本的な実行
cppcheck --enable=all --std=c11 src/
# compile_commands.json を使用
cppcheck --project=build/compile_commands.json
# 特定チェックを含めノイズを抑制
cppcheck --enable=warning,performance,portability \
--suppress=missingIncludeSystem \
--suppress=unmatchedSuppression \
--error-exitcode=1 \
src/
# CI 向けに XML レポートを生成
cppcheck --xml --xml-version=2 src/ 2> cppcheck-report.xml
--enable= の値 | チェック内容 |
|---|---|
warning | 未定義の動作、悪いプラクティス |
performance | 冗長な操作、非効率なパターン |
portability | 非ポータブルな構造 |
information | 設定と使用に関する注記 |
all | 上記すべて |
7. scan-build でのパス依存解析
# Make ビルドをインターセプト
scan-build make
# CMake ビルドをインターセプト
scan-build cmake --build build/
# HTML レポートを表示
scan-view /tmp/scan-build-*/
# 特定のチェッカーを指定
scan-build -enable-checker security.insecureAPI.gets \
-enable-checker alpha.unix.cstring.BufferOverlap \
make
scan-build は clang-tidy よりも深いバグを見つけます: 関数間の use-after-free、ロジックエラーから生じたデッドストア、複雑なパス上の null 逆参照。
8. CI 統合
# GitHub Actions
- name: Static analysis
run: |
cmake -S . -B build -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
run-clang-tidy -p build -j$(nproc) -warnings-as-errors '*'
- name: cppcheck
run: |
cppcheck --enable=warning,performance \
--suppress=missingIncludeSystem \
--error-exitcode=1 \
src/
clang-tidy チェックの詳細は references/clang-tidy-checks.md を参照してください。
関連スキル
- Clang ツールチェーンと診断フラグについては
skills/compilers/clangを使用してください - GCC の警告を補完解析として使用する場合は
skills/compilers/gccを使用してください - 静的解析と並行してランタイムバグ検出を行う場合は
skills/runtimes/sanitizersを使用してください CMAKE_EXPORT_COMPILE_COMMANDSセットアップについてはskills/build-systems/cmakeを使用してください
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- mohitmishra786
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/mohitmishra786/low-level-dev-skills / ライセンス: MIT
関連スキル
superpowers-streamer-cli
SuperPowers デスクトップストリーマーの npm パッケージをインストール、ログイン、実行、トラブルシューティングできます。ユーザーが npm から `superpowers-ai` をセットアップしたい場合、メールまたは電話でサインインもしくはアカウント作成を行いたい場合、ストリーマーを起動したい場合、表示されたコントロールリンクを開きたい場合、後で停止したい場合、またはソースコードへのアクセスなしに npm やランタイムの一般的な問題から復旧したい場合に使用します。
catc-client-ops
Catalyst Centerのクライアント操作・監視機能 - 有線・無線クライアントのリスト表示・フィルタリング、MACアドレスによる詳細なクライアント検索、クライアント数分析、時間軸での分析、SSIDおよび周波数帯によるフィルタリング、無線トラブルシューティング機能を提供します。MACアドレスやIPアドレスでのクライアント検索、サイト別やSSID別のクライアント数集計、無線周波数帯の分布分析、Wi-Fi信号の問題調査が必要な場合に活用できます。
ci-cd-and-automation
CI/CDパイプラインの設定を自動化します。ビルドおよびデプロイメントパイプラインの構築または変更時に使用できます。品質ゲートの自動化、CI内のテストランナー設定、またはデプロイメント戦略の確立が必要な場合に活用します。
shipping-and-launch
本番環境へのリリース準備を行います。本番環境へのデプロイ準備が必要な場合、リリース前チェックリストが必要な場合、監視機能の設定を行う場合、段階的なロールアウトを計画する場合、またはロールバック戦略が必要な場合に使用します。
linear-release-setup
Linear Releaseに向けたCI/CD設定を生成します。リリース追跡の設定、LinearのCIパイプライン構築、またはLinearリリースとのデプロイメント連携を実施する際に利用できます。GitHub Actions、GitLab CI、CircleCIなど複数のプラットフォームに対応しています。
tracking-application-response-times
API エンドポイント、データベースクエリ、サービスコール全体にわたるアプリケーションのレスポンスタイムを追跡・最適化できます。パフォーマンス監視やボトルネック特定の際に活用してください。「レスポンスタイムを追跡する」「API パフォーマンスを監視する」「遅延を分析する」といった表現で呼び出せます。