moai-lang-cpp について
Claude Code エージェント向けのモダン C++ 開発スキルです。C++20 と C++23 に加え、メモリ管理、並行処理、CMake、テストを扱い、言語機能の例と実践的な構築・リソース管理パターンをまとめています。
主な機能
- 01C++20 と C++23 の機能
- 02RAII とスマートポインターのパターン
- 03Concepts、ranges、modules
- 04CMake 3.28+ のビルド解説
- 05並行処理とテストのパターン
活用シーン
- 01RAII による安全なリソース管理
- 02CMake を使った C++ プロジェクト構築
- 03コードへの ranges と concepts の適用
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ modu-ai/ moai-adk --skill moai-lang-cppインストール後、Claude Code で/moai-lang-cppを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
modules/advanced-patterns.mdreferences/examples.mdreference.md詳細
クイックリファレンス(30秒)
最新の C++(C++23/C++20)開発スペシャリスト — RAII、スマートポインター、コンセプト、レンジ、モジュール、CMake。
自動トリガー:.cpp、.hpp、.h、CMakeLists.txt、vcpkg.json、conanfile.txt、最新の C++ に関する議論
主な機能:
- C++23 の機能:std::expected、std::print、std::generator、deducing this
- C++20 の機能:コンセプト、レンジ、モジュール、コルーチン、std::format
- メモリー安全性:RAII、Rule of 5、スマートポインター(unique_ptr、shared_ptr、weak_ptr)
- STL:コンテナー、アルゴリズム、イテレーター、std::span、std::string_view
- ビルドシステム:CMake 3.28 以降、FetchContent、プリセット
- 並行処理:std::thread、std::jthread、std::async、アトミック、std::latch/std::barrier
- テスト:Google Test、Catch2
- パッケージ管理:vcpkg、Conan 2.0
クイックパターン
スマートポインターのファクトリーパターン:std::unique_ptr を返す静的ファクトリーメソッドを持つクラスを作成します。memory のヘッダーをインクルードし、int 型の value パラメーターを取る静的な create メソッドを持つ Widget クラスを定義します。create メソッドでは std::make_unique を使って Widget をインスタンス化し、返します。コンストラクターは explicit とし、value パラメーターを受け取り、プライベートメンバー変数に格納します。
コンセプトによる制約パターン:std::integral または std::floating_point の制約を組み合わせた Numeric という名前のコンセプトを定義します。T が Numeric コンセプトを満たすことを要求するテンプレート関数 square を作成します。この関数は value パラメーターを受け取り、value に自身を掛けた値を返します。
レンジパイプラインパターン:std::views::iota を使って 1 から 100 までのレンジを作成し、パイプでフィルターに渡して偶数を選び、次に各値を二乗する変換を適用し、最後に先頭の 10 個の結果を取得します。
実装ガイド(5分)
C++23 の新機能
エラー処理に使う std::expected:InvalidFormat と OutOfRange の値を持つ enum class ParseError を作成します。std::string_view を受け取り、int または ParseError のいずれかを含む std::expected を返す parse_int 関数を定義します。関数内で try-catch ブロックを使って std::stoi を呼び出します。std::invalid_argument をキャッチした場合は InvalidFormat を指定した std::unexpected を返し、std::out_of_range をキャッチした場合は OutOfRange を指定した std::unexpected を返します。成功時は、解析した値をそのまま返します。使用時には if(result) で結果を確認し、アスタリスク演算子で値にアクセスするか、エラーケースを処理します。
型安全な出力に使う std::print:print ヘッダーをインクルードし、波括弧のプレースホルダーを使った書式付き出力には std::println を使用します。コロンの後にハッシュ記号と x を指定する16進数用や、コロンの後に .2f を指定する浮動小数点数の精度指定などのフォーマット指定子に対応しています。
Deducing This(明示的オブジェクトパラメーター):data_ という string メンバーを持つ Builder クラスを定義します。Self をテンプレートパラメーターとする append テンプレートメソッドを作成します。このメソッドは this Self と string_view パラメーターを受け取ります。std::forward で self を転送し、Self&& を返します。これにより、左辺値と右辺値の両方のオブジェクトでチェーン呼び出しが可能になります。
C++20 の機能
コンセプトと制約:std::hash が std::size_t を生成できることを確認する requires 式を使って、Hashable コンセプトを定義します。requires 節を持つテンプレート関数を作成し、Container 型が std::ranges::range を満たすよう制約します。個々のパラメーターに簡単な制約を指定する場合は、std::integral auto を使った省略記法を使用します。
モジュール:拡張子が .cppm のモジュールインターフェースファイルを作成します。export module に続けてモジュール名を指定します。テンプレート関数を含む export namespace を定義します。利用側のファイルでは、include ディレクティブの代わりに import 文を使用します。モジュール対応コンパイラーで標準ライブラリーにアクセスするには、std をインポートします。
Ranges ライブラリー:name フィールドと age フィールドを持つ Person など、データ型の構造体を定義します。パイプ演算子を使い、条件をチェックするラムダを指定した views::filter と、フィールドを抽出する views::transform を連結します。範囲ベースの for ループで反復処理します。メンバーフィールドでソートする場合は、射影を指定して std::ranges::sort を使います。
RAII とリソース管理
Rule of Five:生ポインターとサイズを管理する Resource クラスを実装します。コンストラクターでは配列構文を使って new でメモリを確保します。デストラクターでは delete 配列を呼び出します。コピーコンストラクターでは新しいメモリを確保し、std::copy を使います。コピー代入演算子では、一時オブジェクトを作成して swap を呼び出す copy-and-swap イディオムを使います。ムーブコンストラクターでは std::exchange を使って所有権を取得し、ソースを null にします。ムーブ代入演算子では現在のデータを削除し、std::exchange を使います。swap メンバー関数では、ポインターとサイズの両方のメンバーを入れ替えます。
スマートポインターのパターン:一意の所有権には、std::make_unique を使って std::unique_ptr を返す静的ファクトリーメソッドを作成します。循環参照がある共有所有権には、std::enable_shared_from_this を基底クラスとして使います。子を std::shared_ptr の std::vector に格納し、参照サイクルを避けるため、親は std::weak_ptr として保持します。親子関係を設定するときは weak_from_this を使います。
CMake の最新パターン
C++23 用の CMakeLists.txt の構成:最初に cmake_minimum_required VERSION 3.28 とプロジェクト宣言を記述します。CMAKE_CXX_STANDARD を 23 に設定し、STANDARD_REQUIRED を ON にします。CMAKE_EXPORT_COMPILE_COMMANDS を有効にします。GNU、Clang、MSVC のいずれかを CXX_COMPILER_ID で確認し、ジェネレーター式を使ってコンパイラー固有の警告フラグを指定します。FetchContent を使い、GIT_REPOSITORY と GIT_TAG のパラメーターを指定して依存関係を宣言します。FetchContent_MakeAvailable を呼び出してダウンロードと構成を行います。add_library でライブラリを作成し、target_include_directories でインクルードディレクトリを設定し、target_link_libraries でリンクします。テストでは enable_testing を有効にし、テスト実行ファイルを追加して GTest::gtest_main をリンクし、gtest_discover_tests を使います。
並行処理
std::jthread と Stop Token:std::stop_token パラメーターを受け取るワーカー関数を定義します。stop_requested が false を返す間、作業とスリープを繰り返します。ワーカー関数を渡して std::jthread オブジェクトを作成します。request_stop を呼び出して終了を通知します。スレッドのデストラクターが自動的に join します。
同期プリミティブ:一度限りの同期には std::latch を使い、count_down を呼び出します。繰り返しの同期には std::barrier を使い、arrive_and_wait を呼び出します。リソースプールには std::counting_semaphore を使い、acquire と release を呼び出します。
高度な実装(10 分以上)
以下を含む包括的な解説については:
- テンプレートメタプログラミングのパターン
- 高度な並行処理(スレッドプール、ロックフリーデータ構造)
- メモリ管理とカスタムアロケーター
- パフォーマンス最適化(SIMD、キャッシュ効率の高いパターン)
- 本番環境向けのパターン(依存性注入、ファクトリー)
- Google Test と Catch2 を使った拡張テスト
こちらを参照してください:
- 高度なパターン - 高度なパターンの完全ガイド
Context7 ライブラリのマッピング
- /microsoft/vcpkg - パッケージマネージャー
- /conan-io/conan - Conan パッケージマネージャー
- /google/googletest - Google Test フレームワーク
- /catchorg/Catch2 - Catch2 テストフレームワーク
- /fmtlib/fmt - fmt フォーマットライブラリ
- /nlohmann/json - JSON for Modern C++
- /gabime/spdlog - 高速ロギングライブラリ
併用に適したツール
moai-lang-rust- システムプログラミングの比較と相互運用moai-domain-backend- バックエンドサービスのアーキテクチャmoai-workflow-testing- DDD とテスト戦略moai-essentials-debug- デバッグとプロファイリングmoai-foundation-quality- TRUST 5 品質原則
トラブルシューティング
バージョンの確認:g++ --version を実行して C++23 をサポートする GCC 13 以降であることを確認し、clang++ --version で Clang 17 以降、cmake --version で CMake 3.28 以降であることを確認します。
一般的なコンパイルフラグ:標準ビルドでは -std=c++23 と -Wall -Wextra -Wpedantic -O2 を使います。デバッグビルドでは -fsanitize=adddess,undefined -g を追加します。
vcpkg の統合:GitHub から vcpkg リポジトリをクローンし、bootstrap-vcpkg.sh を実行してから、vcpkg install を使って fmt、nlohmann-json、gtest などのパッケージをインストールします。vcpkg の buildsystems/vcpkg.cmake を指す -DCMAKE_TOOLCHAIN_FILE を指定して CMake を構成します。
最終更新日:2026-01-11 ステータス:アクティブ(v1.1.0)