Claude-skill-registry cpp14-code-review
AUTOSAR C++14およびCERT C++コーディング規約に準拠したC++14コードレビュー。安全性重視のC++システムのコードレビュー、セキュリティ監査、品質評価、静的解析ツール設定を行う際に使用。
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/cpp14-code-review" ~/.claude/skills/majiayu000-claude-skill-registry-cpp14-code-review && rm -rf "$T"
manifest:
skills/data/cpp14-code-review/SKILL.mdsource content
C++14 Code Review with AUTOSAR and CERT Standards
このスキルは、AUTOSAR C++14およびCERT C++コーディング規約に基づいたC++14コードレビューを支援します。
いつこのスキルを使用するか
以下の場合に本スキルを活用してください:
- AUTOSAR C++14準拠のコードレビューを実行する
- CERT C++セキュアコーディング基準に基づくセキュリティ監査を行う
- 組込みシステムや安全性が重視されるコードを評価する
- Git差分レビュー(プルリクエスト)を効率的に実施する
- 静的解析ツール(Clang-Tidy、Cppcheck)の設定とCI/CD統合を行う
- メモリ安全性、スレッド安全性、例外安全性を検証する
コードレビュープロセス
ステップ1: レビュー準備
# Git差分の取得(プルリクエストレビュー) git diff <base-commit> <head-commit> > changes.diff # または特定ファイルのみ git diff <base-commit> <head-commit> -- src/core/*.cpp > core-changes.diff
ステップ2: 自動チェック実行
Clang-Tidyの使用
Clang-Tidy設定ファイルを参照してください。
# AUTOSAR/CERTチェック実行 clang-tidy --config-file=.clang-tidy src/**/*.cpp # または特定ファイル clang-tidy --checks='autosar-*,cert-*' src/core/Parser.cpp
Cppcheckの使用
# MISRA/CERT準拠チェック cppcheck --addon=misra --addon=cert --enable=all src/ # XML出力(CI/CD向け) cppcheck --addon=cert --xml --xml-version=2 src/ 2> report.xml
ステップ3: 手動レビュー観点
レビューチェックリストを参照してください。
優先度別レビュー基準
優先度1: Critical(即座に修正)
メモリ安全性違反
- バッファオーバーフロー(CERT ARR30-C, ARR38-C)
- Use-after-free(CERT MEM50-CPP)
- ダングリングポインタ(CERT EXP54-CPP)
- メモリリーク(AUTOSAR A18-5-2)
セキュリティ脆弱性
- 整数オーバーフロー(CERT INT50-CPP)
- SQLインジェクション、コマンドインジェクション
- 入力バリデーション欠如
未定義動作
- 初期化されていない変数の使用(AUTOSAR A8-5-2)
- ヌルポインタデリファレンス(CERT EXP34-C)
- 配列範囲外アクセス
優先度2: High(早急に修正)
AUTOSAR必須ルール違反
- A5-0-3: 明示的な型変換の使用
- A7-1-1: constexpr変数の使用
- A12-8-1: コピー制御(Rule of Five/Zero)
- A15-5-1: 例外のthrow by value, catch by reference
リソース管理
- RAIIパターンの未使用(AUTOSAR A15-1-2)
- スマートポインタの未使用(AUTOSAR A18-5-2)
- 例外安全性の欠如(CERT ERR50-CPP)
優先度3: Medium(計画的に修正)
AUTOSARアドバイザリールール違反
- A0-1-6: 未使用の値(戻り値の無視)
- A2-13-3: 型の不一致
- M5-0-21: ビット演算の優先順位
const correctness
- const修飾の不徹底(AUTOSAR A7-1-1)
- constexpr関数の未使用
- const参照の未使用(AUTOSAR A8-4-1)
優先度4: Low(改善推奨)
コード品質
- 命名規約の不統一
- コメント不足
- 循環的複雑度が高い(> 10)
Modern C++機能の未活用
- ラムダ式の活用可能箇所
- 範囲forループの使用可能箇所
- auto型推論の適用可能箇所
AUTOSAR C++14主要ルール
メモリ管理
A18-5-2: 動的メモリは例外的にのみ使用
// ❌ 悪い例 void process() { int* data = new int[100]; // 例外発生時にメモリリーク processData(data); delete[] data; } // ✅ 良い例 void process() { std::vector<int> data(100); // RAII processData(data.data()); } // 自動的に解放
A18-1-1: C言語メモリ管理関数を使用しない
// ❌ 悪い例 char* buffer = (char*)malloc(256); free(buffer); // ✅ 良い例 std::vector<char> buffer(256);
型安全性
A5-0-3: 明示的な型変換を使用
// ❌ 悪い例 double d = 3.14; int i = (int)d; // C言語スタイルキャスト // ✅ 良い例 int i = static_cast<int>(d);
A8-4-1: 関数パラメータは参照またはポインタで渡す
// ❌ 悪い例 void process(std::vector<int> data) { // コピー発生 // ... } // ✅ 良い例 void process(const std::vector<int>& data) { // 参照渡し // ... }
例外処理
A15-5-1: throw by value, catch by reference
// ❌ 悪い例 throw new std::runtime_error("Error"); // ポインタをthrow // ✅ 良い例 throw std::runtime_error("Error"); // 値をthrow // キャッチ try { // ... } catch (const std::exception& e) { // 参照でキャッチ // ... }
オブジェクト指向
A12-8-1: Rule of Five/Zero
// ✅ Rule of Zero(推奨) class Resource { std::unique_ptr<Data> data_; // スマートポインタを使用 // コピー・ムーブが自動生成される }; // ✅ Rule of Five(リソース管理が必要な場合) class CustomResource { public: ~CustomResource(); // デストラクタ CustomResource(const CustomResource&); // コピーコンストラクタ CustomResource& operator=(const CustomResource&); // コピー代入 CustomResource(CustomResource&&) noexcept; // ムーブコンストラクタ CustomResource& operator=(CustomResource&&) noexcept; // ムーブ代入 };
CERT C++主要ルール
セキュリティ
INT50-CPP: 整数オーバーフローを防ぐ
// ❌ 悪い例 int calculate(int a, int b) { return a * b; // オーバーフロー未チェック } // ✅ 良い例 #include <limits> int calculate(int a, int b) { if (a > 0 && b > std::numeric_limits<int>::max() / a) { throw std::overflow_error("Integer overflow"); } return a * b; }
STR50-CPP: 文字列リテラルを変更しない
// ❌ 悪い例 char* str = "Hello"; // 文字列リテラルへのポインタ str[0] = 'h'; // 未定義動作 // ✅ 良い例 const char* str = "Hello"; // 変更不可 // または std::string str = "Hello"; // 変更可能なコピー
メモリ管理
MEM51-CPP: 適切にメモリを解放
// ❌ 悪い例 void process() { Resource* res = new Resource(); if (someCondition) { return; // メモリリーク } delete res; } // ✅ 良い例 void process() { auto res = std::make_unique<Resource>(); if (someCondition) { return; // 自動的に解放 } }
静的解析ツール設定
Clang-Tidy設定
完全な設定ファイルを参照。
主要チェック:
: AUTOSAR C++14ルールautosar-*
: CERT C++ルールcert-*
: Modern C++への移行modernize-*
: C++ Core Guidelinescppcoreguidelines-*
CI/CD統合
GitHub Actions例
CI/CD設定例を参照。
name: C++ Code Review on: [pull_request] jobs: static-analysis: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Run Clang-Tidy run: | clang-tidy --checks='autosar-*,cert-*' src/**/*.cpp - name: Run Cppcheck run: | cppcheck --addon=cert --xml src/ 2> report.xml
Git差分レビューワークフロー
1. 変更ファイルの特定
# プルリクエストの変更ファイル一覧 git diff --name-only origin/main...HEAD # C++ファイルのみ抽出 git diff --name-only origin/main...HEAD | grep -E '\.(cpp|hpp|h)$'
2. 変更箇所の詳細確認
# 関数単位で変更を表示 git diff -U5 origin/main...HEAD -- src/core/Parser.cpp # 統計情報 git diff --stat origin/main...HEAD
3. レビューポイントの集中
変更箇所のみに以下を集中確認:
- 新規追加されたポインタ・動的メモリ割り当て
- 変更された例外処理
- 型変換の追加・変更
- ループ・条件分岐の変更
レビューレポートテンプレート
# コードレビューレポート ## ファイル: `src/core/Parser.cpp` ### Critical Issues (優先度1) - **Line 156**: バッファオーバーフロー(CERT ARR30-C) - 問題: 固定サイズバッファ使用 - 修正案: `std::vector<char>`または`std::string`を使用 ### High Issues (優先度2) - **Line 203**: AUTOSAR A18-5-2違反 - 問題: `new`の直接使用 - 修正案: `std::make_unique`を使用 ### Medium Issues (優先度3) - **Line 89**: const correctness - 問題: const参照で渡すべき - 修正案: `void process(const Data& data)` ## サマリー - Critical: 1件 - High: 1件 - Medium: 1件 - 推奨: マージ前に修正が必要
参考リソース
- AUTOSAR C++14 Guidelines
- CERT C++ Coding Standard
- C++ Core Guidelines
- Clang-Tidy Documentation
- 設定ファイル集
- チェックリスト
次のステップ
- 静的解析ツール設定をプロジェクトに適用
- レビューチェックリストを使用してレビュー実施
- CI/CD統合を設定
- レビュー結果を文書化