Claude Code Plugins

Community-maintained marketplace

Feedback

cpp14-code-review

@SuperPyonchiX/VSCodeEnv
0
0

Guide for reviewing C++14 code against AUTOSAR C++14 and CERT C++ coding standards. Use this when performing code reviews, security audits, or quality assessments for safety-critical C++ systems.

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name cpp14-code-review
description AUTOSAR C++14およびCERT C++コーディング規約に準拠したC++14コードレビューのガイド。安全性重視のC++システムのコードレビュー、セキュリティ監査、品質評価を行う際に使用してください。

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-*: AUTOSAR C++14ルール
  • cert-*: CERT C++ルール
  • modernize-*: Modern C++への移行
  • cppcoreguidelines-*: C++ Core Guidelines

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件
- 推奨: マージ前に修正が必要

参考リソース

次のステップ

  1. 静的解析ツール設定をプロジェクトに適用
  2. レビューチェックリストを使用してレビュー実施
  3. CI/CD統合を設定
  4. レビュー結果を文書化

包括的なコードレビューが必要な場合は、関連エージェント review-cpp14-code またはプロンプト #review-cpp14-code を使用してください。