mcpField
M
m02-resource

m02-resource

github.com/actionbook開発1.6k3.4k 回インストール9 週間前に更新
リポジトリ

m02-resource について

m02-resourceは、所有権とスマートポインターのパターンを選ぶRust開発者向けの学習スキルです。単独・共有所有権、スレッド環境、循環参照、メモリー確保の必要性を検討できます。

主な機能

  1. 01所有権パターンの判断問い
  2. 02Box、Rc、Arcの使用指針
  3. 03スレッド環境別のポインター比較
  4. 04循環参照向けWeak参照
  5. 05よくあるリソースエラーの案内

活用シーン

  1. 01共有データ用ポインターの選択
  2. 02循環参照によるメモリーリークの防止
  3. 03ヒープ確保が必要かの判断

インストール

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

$npx skills add https://github.com/actionbook/rust-skills --skill m02-resource

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

詳細

リソース管理

レイヤー 1:言語の仕組み

基本的な問い

このリソースにはどの所有パターンが必要ですか?

スマートポインターを選ぶ前に、次の点を確認してください。

  • 所有者は単一ですか、それとも共有されますか?
  • アクセスは単一スレッドですか、それともマルチスレッドですか?
  • 循環参照が発生する可能性はありますか?

エラー → 設計上の問い

エラーただ言うだけではなく代わりに尋ねる
「ヒープ割り当てが必要」「Box を使う」なぜスタックに置けないのですか?
Rc のメモリリーク「Weak を使う」設計上、その循環参照は必要ですか?
RefCell のパニック「try_borrow を使う」実行時チェックは適切な方法ですか?
Arc のオーバーヘッドへの不満「受け入れる」本当にマルチスレッドアクセスが必要ですか?

考えるためのプロンプト

スマートポインターを選ぶ前に、次の点を確認してください。

  1. 所有モデルはどのようなものですか?

    • 単一所有者 → Box または所有値
    • 共有所有 → Rc/Arc
    • 弱参照 → Weak
  2. スレッドの状況はどうなっていますか?

    • シングルスレッド → Rc、Cell、RefCell
    • マルチスレッド → Arc、Mutex、RwLock
  3. 循環参照はありますか?

    • はい → 一方向は Weak にする必要があります
    • いいえ → 通常の Rc/Arc で問題ありません

上へたどる ↑

ポインターの選択がはっきりしない場合は、設計までたどってください。

"Should I use Arc or Rc?"
    ↑ Ask: Is this data shared across threads?
    ↑ Check: m07-concurrency (thread model)
    ↑ Check: domain-* (performance constraints)
状況たどる先質問
Rc と Arc のどちらにするか迷うm07-concurrency並行処理モデルはどのようなものですか?
RefCell のパニックm03-mutabilityここで内部可変性を使うのは適切ですか?
メモリリークm12-lifecycleクリーンアップはどこで行うべきですか?

下へたどる ↓

設計から実装へ:

"Need single-owner heap data"
    ↓ Use: Box<T>

"Need shared immutable data (single-thread)"
    ↓ Use: Rc<T>

"Need shared immutable data (multi-thread)"
    ↓ Use: Arc<T>

"Need to break reference cycle"
    ↓ Use: Weak<T>

"Need shared mutable data"
    ↓ Single-thread: Rc<RefCell<T>>
    ↓ Multi-thread: Arc<Mutex<T>> or Arc<RwLock<T>>

クイックリファレンス

型所有権スレッドセーフ使用する場面
Box<T>単一はいヒープ割り当て、再帰型
Rc<T>共有いいえシングルスレッドでの共有所有
Arc<T>共有はいマルチスレッドでの共有所有
Weak<T>弱参照Rc/Arc と同じ参照サイクルを断つ
Cell<T>単一いいえ内部可変性(Copy 型)
RefCell<T>単一いいえ内部可変性(実行時チェック)

判断フローチャート

Need heap allocation?
├─ Yes → Single owner?
│        ├─ Yes → Box<T>
│        └─ No → Multi-thread?
│                ├─ Yes → Arc<T>
│                └─ No → Rc<T>
└─ No → Stack allocation (default)

Have reference cycles?
├─ Yes → Use Weak for one direction
└─ No → Regular Rc/Arc

Need interior mutability?
├─ Yes → Thread-safe needed?
│        ├─ Yes → Mutex<T> or RwLock<T>
│        └─ No → T: Copy? → Cell<T> : RefCell<T>
└─ No → Use &mut T

よくあるエラー

問題原因修正方法
Rc の循環参照によるリーク相互に強参照している一方向に Weak を使う
RefCell のパニック実行時の借用競合try_borrow を使うか、構成を見直す
Arc のオーバーヘッドホットパスでのアトミック操作シングルスレッドなら Rc を検討する
Box が不要データがスタックに収まるBox を取り除く

アンチパターン

アンチパターン問題点より良い方法
どこでも Arc を使う不要なアトミック操作のオーバーヘッドシングルスレッドでは Rc を使う
どこでも RefCell を使う実行時パニック所有関係を明確に設計する
小さな型に Box を使う不要な割り当てスタック割り当て
循環参照で Weak を使わないメモリリークWeak を使った親子関係を設計する

関連スキル

場合参照先
所有権エラーm01-ownership
内部可変性の詳細m03-mutability
マルチスレッドの状況m07-concurrency
リソースのライフサイクルm12-lifecycle

コメント