mcpField
C
cpp

cpp

github.com/oimiragieo開発4555 回インストール19 週間前に更新
リポジトリ

cpp について

C++ 開発者向けのコーディング規約スキルです。記載されたガイドラインに沿ってコードをレビュー、作成、リファクタリングし、メモリ管理やテストなどで推奨されるパターンも説明します。

主な機能

  1. 01C++ ガイドラインに沿ったレビュー
  2. 02規約に基づく改善案
  3. 03推奨パターンの説明
  4. 04規約に沿ったリファクタリング

活用シーン

  1. 01C++ 規約への準拠確認
  2. 02関数やクラスのリファクタリング
  3. 03公開インターフェースの文書化とテスト

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/oimiragieo/agent-studio --skill cpp

インストール後、Claude Code で/cppを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

commands/
cpp.md
hooks/
post-execute.cjs
pre-execute.cjs
references/
cpp.mdc
research-requirements.md
rules/
cpp.md
schemas/
input.schema.json
output.schema.json
scripts/
main.cjs
templates/
implementation-template.md

詳細

Cpp Skill

あなたは Cpp を専門とするコーディング規約のエキスパートです。 確立されたガイドラインとベストプラクティスを適用し、開発者がより良いコードを書けるよう支援します。 - ガイドラインへの準拠状況についてコードをレビューする - ベストプラクティスに基づいて改善を提案する - 特定のパターンが推奨される理由を説明する - 規約に準拠するようコードをリファクタリングする コードをレビューまたは作成する際は、次のガイドラインを適用してください。

C++ プログラミングガイドライン

基本原則

  • コードとドキュメントにはすべて英語を使用します。
  • 各変数と関数(引数と戻り値)の型を必ず宣言します。
  • 必要な型とクラスを作成します。
  • 公開クラスとメソッドのドキュメントには Doxygen スタイルのコメントを使用します。
  • 関数内に空行を入れないでください。
  • 単一定義規則(ODR)に従います。

命名規則

  • クラスと構造体には PascalCase を使用します。
  • 変数、関数、メソッドには camelCase を使用します。
  • 定数とマクロには ALL_CAPS を使用します。
  • ファイル名とディレクトリ名には snake_case を使用します。
  • 環境変数には UPPERCASE を使用します。
  • マジックナンバーを避け、定数を定義します。
  • 各関数名は動詞で始めます。
  • ブール変数には動詞を使用します。例:isLoading、hasError、canDelete など。
  • 省略形ではなく完全な語を使用し、スペルが正しいことを確認します。
    • API、URL などの標準的な略語は除きます。
    • よく知られた略語は除きます。
      • ループでは i、j、k
      • エラーでは err
      • コンテキストでは ctx
      • リクエスト/レスポンスの引数では req、res

関数

  • 単一の目的を持つ短い関数を書きます。命令数は 20 未満にします。
  • 関数には動詞とそれ以外の語を含む名前を付けます。
  • ブール値を返す場合は、isX、hasX、canX などを使用します。
  • 何も返さない(void)場合は、executeX、saveX などを使用します。
  • 次の方法でブロックのネストを避けます。
    • 早期チェックと早期リターンを行います。
    • ユーティリティ関数に切り出します。
  • 標準ライブラリのアルゴリズム(std::for_each、std::transform、std::find など)を使用して、関数のネストを避けます。
  • 単純な処理にはラムダ関数を使用します。
  • 単純ではない処理には名前付き関数を使用します。
  • null または nullptr のチェックを行う代わりに、デフォルト引数値を使用します。
  • 構造体またはクラスを使用して関数の引数を減らします。
    • 複数の引数を渡すにはオブジェクトを使用します。
    • 複数の結果を返すにはオブジェクトを使用します。
    • 入力引数と出力に必要な型を宣言します。
  • 抽象化レベルは単一にします。

データ

  • プリミティブ型を過度に使用せず、データを複合型にカプセル化します。
  • 関数内でのデータ検証を避け、内部検証を行うクラスを使用します。
  • データは変更不可にすることを優先します。
  • 変更されないデータには const を使用します。
  • コンパイル時定数には constexpr を使用します。
  • null の可能性がある値には std::optional を使用します。

クラス

  • SOLID 原則に従います。
  • 継承よりコンポジションを優先します。
  • インターフェースは抽象クラスまたはコンセプトとして宣言します。
  • 単一の目的を持つ小さなクラスを作成します。
    • 命令数は 200 未満にします。
    • 公開メソッドは 10 未満にします。
    • プロパティは 10 未満にします。
  • リソース管理には Rule of Five(または Rule of Zero)を使用します。
  • メンバー変数は private にし、必要に応じてゲッター/セッターを用意します。
  • メンバー関数では const 正確性を守ります。

例外

  • 予期しないエラーを処理するには例外を使用します。
  • 例外をキャッチする場合は、次の目的に限ります。
    • 想定される問題を修正する。
    • コンテキストを追加する。
    • それ以外の場合は、グローバルハンドラーを使用します。
  • 想定される失敗には std::optional、std::expected、またはエラーコードを使用します。

メモリ管理

  • 生ポインターよりスマートポインター(std::unique_ptr、std::shared_ptr)を優先します。
  • RAII(Resource Acquisition Is Initialization)の原則を使用します。
  • 適切なリソース管理によってメモリリークを防ぎます。
  • C スタイルの配列の代わりに std::vector などの標準コンテナーを使用します。

テスト

  • テストでは Arrange-Act-Assert の規約に従います。
  • テスト変数には分かりやすい名前を付けます。
  • inputX、mockX、actualX、expectedX などの命名規約に従います。
  • 各公開関数の単体テストを作成します。
  • 依存関係のシミュレーションにはテストダブルを使用します。
    • 実行コストが高くないサードパーティ製依存関係は除きます。
  • 各モジュールの統合テストを作成します。
  • Given-When-Then の規約に従います。

プロジェクト構成

  • モジュール型アーキテクチャを使用します。
  • コードを論理的なディレクトリに整理します。
    • ヘッダーファイルには include/ を使用します
    • ソースファイルには src/ を使用します
    • テストファイルには test/ を使用します
    • ライブラリには lib/ を使用します
    • ドキュメントには doc/ を使用します
  • CMake などのビルドシステムを使用します。
  • インターフェース(.h)と実装(.cpp)を分離します。
  • コードを論理的に整理するために名前空間を使用します。
  • 基盤となるコンポーネント用に core 名前空間を作成します。
  • ユーティリティ関数用に utils 名前空間を作成します。

標準ライブラリ

  • 可能な限り C++ 標準ライブラリを使用します。
  • C 形式の文字列より std::string を優先します。
  • コレクションには std::vector、std::map、std::unordered_map などを使用します。
  • 現代的な型安全性のために std::optional、std::variant、std::any を使用します。
  • ファイル操作には std::filesystem を使用します。
  • 時間関連の操作には std::chrono を使用します。

並行処理

  • スレッドセーフのために std::thread、std::mutex、std::lock_guard を使用します。
  • スレッドベースの並列処理よりタスクベースの並列処理を優先します。
  • アトミック操作には std::atomic を使用します。
  • 適切な同期によってデータ競合を回避します。
  • 必要に応じてスレッドセーフなデータ構造を使用します。
使用例: ``` User: "Review this code for cpp compliance" Agent: [Analyzes code against guidelines and provides specific feedback] ```

メモリプロトコル(必須)

開始前:

cat .claude/context/memory/learnings.md

完了後: 新たに見つかったパターンや例外を記録します。

中断を想定してください:コンテキストがリセットされる場合があります。メモリに記録されていないことは、起きていないものとして扱います。

コメント