memory-safety-patterns について
リソース管理やメモリ問題の調査に取り組むシステム開発者向けの、言語横断のメモリ安全ガイドです。RAII、所有権、スマートポインター、デバッグツールを扱います。
主な機能
- 01一般的なメモリバグの分類
- 02RAII とリソース寿命の管理
- 03所有権とスマートポインターの実践
- 04言語ごとの安全性の違い
- 05メモリデバッグツールの例
活用シーン
- 01メモリ安全なシステムコードの作成
- 02ファイル、ソケット、メモリの管理
- 03リーク、ダングリングポインター、データ競合の調査
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ wshobson/ agents --skill memory-safety-patternsインストール後、Claude Code で/memory-safety-patternsを入力して読み込まれたか確認します。
同梱ファイルreferences/details.md
詳細
メモリ安全性パターン
RAII、所有権、スマートポインタ、リソース管理など、メモリ安全なプログラミングのための言語横断的パターンです。
このスキルを使う場面
- メモリ安全なシステムコードを書くとき
- リソース(ファイル、ソケット、メモリ)を管理するとき
- use-after-free やリークを防ぐとき
- RAII パターンを実装するとき
- 安全性の観点で言語を選ぶとき
- メモリの問題をデバッグするとき
中核となる概念
1. メモリバグのカテゴリ
| バグの種類 | 説明 | 防止策 |
|---|---|---|
| Use-after-free | 解放済みメモリにアクセスする | 所有権、RAII |
| Double-free | 同じメモリを二度解放する | スマートポインタ |
| メモリリーク | メモリを決して解放しない | RAII、GC |
| バッファオーバーフロー | バッファの終端を越えて書き込む | 境界チェック |
| ダングリングポインタ | 解放済みメモリへのポインタ | ライフタイム追跡 |
| データ競合 | 同期されない並行アクセス | 所有権、Sync |
2. 安全性のスペクトラム
Manual (C) → Smart Pointers (C++) → Ownership (Rust) → GC (Go, Java)
Less safe More safe
More control Less control
詳細なパターンと実例
詳細なパターンのドキュメントは references/details.md にあります。上記のナビゲーション階層では不十分な場合、そのファイルを読んでください。
ベストプラクティス
やるべきこと
- RAII を優先する - リソースのライフタイムをスコープに結び付ける
- スマートポインタを使う - C++ では生ポインタを避ける
- 所有権を理解する - 誰が何を所有しているかを把握する
- 境界をチェックする - 安全なアクセス方法を使う
- ツールを使う - AddressSanitizer、Valgrind、Miri
やってはいけないこと
- 生ポインタを使わない - C と連携する場合を除く
- ローカル参照を返さない - ダングリングポインタになる
- コンパイラの警告を無視しない - 警告はバグを検出する
unsafeを不注意に使わない - Rust では最小限にする- スレッド安全性を仮定しない - 明示する
デバッグツール
# AddressSanitizer (Clang/GCC)
clang++ -fsanitize=address -g source.cpp
# Valgrind
valgrind --leak-check=full ./program
# Rust Miri (undefined behavior detector)
cargo +nightly miri run
# ThreadSanitizer
clang++ -fsanitize=thread -g source.cpp
コメント
Markdown 対応