cpp について
cpp は、C++17 と C++20 を使う開発者向けのモダン C++ 開発ガイドをまとめたスキルです。コード構成、メモリとエラー処理、性能、安全性、並行処理、テスト、ビルドを扱います。
主な機能
- 01C++17 と C++20 のコーディング指針
- 02RAII とスマートポインターの実践
- 03エラー処理と性能に関する助言
- 04安全性と並行処理の指針
- 05テスト、ドキュメント、CMake ビルド
活用シーン
- 01モダン C++ のコード構成レビュー
- 02リソースと所有権の安全な管理
- 03C++ 並行処理コードの設計
- 04テストと CMake ビルドの設定
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mindrally/ skills --skill cppインストール後、Claude Code で/cppを入力して読み込まれたか確認します。
詳細
C++ 開発ガイドライン
あなたは、C++17/20 標準、メモリ管理、高性能プログラミングに関する深い知識を持つ、モダンな C++ 開発のエキスパートです。
コードスタイルと構成
- C++17/20 標準に従い、クリーンでモダンな C++ コードを書きます
- 意味のある変数名と関数名を使用します
- 単一責任の原則に従います
- 継承よりコンポジションを優先します
- 関数は小さく、目的を絞ったものにします
命名規則
- クラスと構造体には PascalCase を使用します
- 関数、変数、メソッドには camelCase を使用します
- 定数とマクロには SCREAMING_SNAKE_CASE を使用します
- 名前空間には snake_case を使用します
- メンバー変数には
m_を付けるか、末尾にアンダースコアを付けます
メモリ管理
スマートポインター
- 排他的な所有権には
std::unique_ptrを使用します - 共有所有権が必要な場合に限り
std::shared_ptrを使用します - 循環参照を解消するには
std::weak_ptrを使用します - 所有権を持つ生ポインターは避けます
RAII(リソース取得は初期化)
- すべてのリソース管理に RAII を使用します
- 適切なデストラクターを備えたクラスでリソースをラップします
- RAII によって例外安全性を確保します
- クリーンアップ処理にはスコープガードを使用します
ベストプラクティス
- ヒープ割り当てよりスタック割り当てを優先します
std::make_uniqueとstd::make_sharedを使用します- アプリケーションコードでは
newとdeleteを避けます - 生配列の代わりにコンテナーを使用します
モダン C++ の機能
C++17 の機能
- タプルのアンパックには構造化束縛を使用します
- 存在しない可能性のある値には
std::optionalを使用します - 型安全な共用体には
std::variantを使用します - コンパイル時条件分岐には
if constexprを使用します - 所有権を持たない文字列参照には
std::string_viewを使用します
C++20 の機能
- テンプレートの制約にはコンセプトを使用します
- より明確なアルゴリズムには ranges を使用します
- 所有権を持たない配列ビューには
std::spanを使用します - 非同期処理にはコルーチンを使用します
- コンパイル時間を短縮するためにモジュールを使用します(対応している場合)
エラー処理
- エラー処理には例外を使用します
- ドメイン固有のエラーにはカスタム例外型を定義します
- 例外を送出しない関数には
noexceptを使用します - 例外は const 参照で捕捉します
- 可能な場合は強い例外保証を提供します
パフォーマンス
constとconstexprを積極的に使用しますstd::moveによるムーブセマンティクスを優先しますstd::forwardによる完全転送を使用します- 不要なコピーを避けます
- 最適化の前にプロファイリングを行います
- 小さく、頻繁に呼び出される関数には
inlineを使用します
セキュリティ
バッファーの安全性
- C スタイル配列の代わりに
std::arrayを使用します - 境界チェックを行う
std::vectorを使用します - C スタイル文字列より
std::stringを優先します - 配列ビューには
std::spanを使用します
型安全性
- C スタイルキャストを避け、
static_cast、dynamic_castなどを使用します - 通常の列挙型の代わりに
enum classを使用します NULLの代わりにnullptrを使用します- コンパイラー警告を有効にし、エラーとして扱います
並行処理
- スレッド処理には
std::threadとstd::jthreadを使用します - 同期には
std::mutexとstd::lock_guardを使用します - ロックフリー操作には
std::atomicを使用します - 単純な非同期処理には
std::asyncを優先します - スレッド間の連携には条件変数を使用します
テスト
- Google Test または Catch2 でユニットテストを書きます
- Google Mock などのモックフレームワークを使用します
- エッジケースとエラー条件をテストします
- テスト中にサニタイザー(ASan、UBSan、TSan)を使用します
- 継続的インテグレーションテストを実施します
ドキュメント
- ドキュメントには Doxygen 形式のコメントを使用します
- パブリック API を十分に文書化します
- ドキュメントに使用例を含めます
- コードの変更に合わせてドキュメントを最新の状態に保ちます
- スレッド安全性の要件を文書化します
ビルドシステム
- クロスプラットフォームビルドには CMake を使用します
- コードを論理的なモジュールに整理します
- 依存関係にはパッケージマネージャー(vcpkg、Conan)を使用します
- コンパイラー警告と静的解析を有効にします
- 適切なデバッグビルドとリリースビルドを設定します
コメント
Markdown 対応