m14-mental-model
Rustの所有権や借用チェッカーといった概念を、メモリレイアウトの可視化やJava/Python経験者向けの分かりやすい例えを用いて、直感的に理解できるよう支援するSkill。
📜 元の英語説明(参考)
Use when learning Rust concepts. Keywords: mental model, how to think about ownership, understanding borrow checker, visualizing memory layout, analogy, misconception, explaining ownership, why does Rust, help me understand, confused about, learning Rust, explain like I'm, ELI5, intuition for, coming from Java, coming from Python, 心智模型, 如何理解所有权, 学习 Rust, Rust 入门, 为什么 Rust
🇯🇵 日本人クリエイター向け解説
Rustの所有権や借用チェッカーといった概念を、メモリレイアウトの可視化やJava/Python経験者向けの分かりやすい例えを用いて、直感的に理解できるよう支援するSkill。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o m14-mental-model.zip https://jpskill.com/download/9272.zip && unzip -o m14-mental-model.zip && rm m14-mental-model.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/9272.zip -OutFile "$d\m14-mental-model.zip"; Expand-Archive "$d\m14-mental-model.zip" -DestinationPath $d -Force; ri "$d\m14-mental-model.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
m14-mental-model.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
m14-mental-modelフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
メンタルモデル
レイヤー2: 設計の選択
中核となる質問
この Rust の概念について、どのように考えるのが正しいか?
Rust を学習したり説明したりする際:
- 正しいメンタルモデルは何か?
- 避けるべき誤解は何か?
- 理解を助けるアナロジーは何か?
主要なメンタルモデル
| 概念 | メンタルモデル | アナロジー |
|---|---|---|
| Ownership | ユニークキー | 家の鍵を持っているのは一人だけ |
| Move | キーの引き渡し | 鍵を譲り渡す |
&T |
読み取りのための貸し出し | 本を貸す |
&mut T |
排他的な編集 | ドキュメントを編集できるのはあなただけ |
Lifetime 'a |
有効なスコープ | 「〜まで有効なチケット」 |
Box<T> |
ヒープポインタ | テレビのリモコン |
Rc<T> |
共有所有権 | 複数のリモコン、最後の人が電源を切る |
Arc<T> |
スレッドセーフな Rc | どの部屋からでも使えるリモコン |
他の言語からの移行
| From | 主要な変化 |
|---|---|
| Java/C# | 値は所有され、デフォルトでは参照ではない |
| C/C++ | コンパイラが安全ルールを強制する |
| Python/Go | GC なし、決定的な破棄 |
| Functional | 可変性は所有権によって安全になる |
| JavaScript | null はなく、代わりに Option を使用する |
思考を促すプロンプト
Rust について混乱した場合:
-
所有権モデルはどうなっているか?
- 誰がこのデータを所有しているか?
- どのくらいの期間生きるか?
- 誰がアクセスできるか?
-
Rust はどのような保証を提供しているか?
- データ競合がない
- ダングリングポインタがない
- use-after-free がない
-
コンパイラは何を言っているか?
- エラー = 安全ルールの違反
- 解決策 = ルールに従って作業する
トレースアップ ↑
理解を設計するために(レイヤー2):
"なぜ Rust で X ができないのか?"
↑ 質問: どの安全性の保証が破られるか?
↑ 確認: 強制されているルールについて m01-m07 を確認
↑ 質問: 意図されている設計パターンは何か?
トレースダウン ↓
実装のために(レイヤー1):
"概念は理解できた。では、どのように実装すればよいか?"
↓ m01-ownership: 所有権パターン
↓ m02-resource: スマートポインタの選択
↓ m07-concurrency: スレッド安全性
よくある誤解
| エラー | 間違ったモデル | 正しいモデル |
|---|---|---|
| E0382 use after move | GC がクリーンアップする | 所有権 = ユニークキーの譲渡 |
| E0502 borrow conflict | 複数の書き込み者が OK | 一度に一人の書き込み者のみ |
| E0499 multiple mut borrows | エイリアスされたミューテーション | ミューテーションのための排他的アクセス |
| E0106 missing lifetime | スコープを無視している | 参照には有効範囲がある |
E0507 cannot move from &T |
暗黙のクローン | 参照はデータを所有していない |
非推奨の考え方
| 非推奨 | より良い |
|---|---|
| "Rust は C++ のようなもの" | 異なる所有権モデル |
| "ライフタイムは GC" | コンパイル時の有効範囲 |
| "Clone はすべてを解決する" | 所有権を再構築する |
| "ボローチェッカーと戦う" | コンパイラと連携する |
"unsafe でルールを回避する" |
まず安全なパターンを理解する |
所有権の可視化
Stack Heap
+----------------+ +----------------+
| main() | | |
| s1 ─────────────────────> │ "hello" |
| | | |
| fn takes(s) { | | |
| s2 (moved) ─────────────> │ "hello" |
| } | | (s1 invalid) |
+----------------+ +----------------+
After move: s1 is no longer valid
参照の可視化
+----------------+
| data: String |────────────> "hello"
+----------------+
↑
│ &data (immutable borrow)
│
+------+------+
| reader1 reader2 (multiple OK)
+------+------+
+----------------+
| data: String |────────────> "hello"
+----------------+
↑
│ &mut data (mutable borrow)
│
+------+
| writer (only one)
+------+
学習パス
| ステージ | 焦点 | スキル |
|---|---|---|
| Beginner | 所有権の基礎 | m01-ownership, m14-mental-model |
| Intermediate | スマートポインタ、エラー処理 | m02, m06 |
| Advanced | 並行性、unsafe | m07, unsafe-checker |
| Expert | 設計パターン | m09-m15, domain-* |
関連スキル
| When | See |
|---|---|
| 所有権エラー | m01-ownership |
| スマートポインタ | m02-resource |
| 並行性 | m07-concurrency |
| アンチパターン | m15-anti-pattern |
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
Mental Models
Layer 2: Design Choices
Core Question
What's the right way to think about this Rust concept?
When learning or explaining Rust:
- What's the correct mental model?
- What misconceptions should be avoided?
- What analogies help understanding?
Key Mental Models
| Concept | Mental Model | Analogy |
|---|---|---|
| Ownership | Unique key | Only one person has the house key |
| Move | Key handover | Giving away your key |
&T |
Lending for reading | Lending a book |
&mut T |
Exclusive editing | Only you can edit the doc |
Lifetime 'a |
Valid scope | "Ticket valid until..." |
Box<T> |
Heap pointer | Remote control to TV |
Rc<T> |
Shared ownership | Multiple remotes, last turns off |
Arc<T> |
Thread-safe Rc | Remotes from any room |
Coming From Other Languages
| From | Key Shift |
|---|---|
| Java/C# | Values are owned, not references by default |
| C/C++ | Compiler enforces safety rules |
| Python/Go | No GC, deterministic destruction |
| Functional | Mutability is safe via ownership |
| JavaScript | No null, use Option instead |
Thinking Prompt
When confused about Rust:
-
What's the ownership model?
- Who owns this data?
- How long does it live?
- Who can access it?
-
What guarantee is Rust providing?
- No data races
- No dangling pointers
- No use-after-free
-
What's the compiler telling me?
- Error = violation of safety rule
- Solution = work with the rules
Trace Up ↑
To design understanding (Layer 2):
"Why can't I do X in Rust?"
↑ Ask: What safety guarantee would be violated?
↑ Check: m01-m07 for the rule being enforced
↑ Ask: What's the intended design pattern?
Trace Down ↓
To implementation (Layer 1):
"I understand the concept, now how do I implement?"
↓ m01-ownership: Ownership patterns
↓ m02-resource: Smart pointer choice
↓ m07-concurrency: Thread safety
Common Misconceptions
| Error | Wrong Model | Correct Model |
|---|---|---|
| E0382 use after move | GC cleans up | Ownership = unique key transfer |
| E0502 borrow conflict | Multiple writers OK | Only one writer at a time |
| E0499 multiple mut borrows | Aliased mutation | Exclusive access for mutation |
| E0106 missing lifetime | Ignoring scope | References have validity scope |
E0507 cannot move from &T |
Implicit clone | References don't own data |
Deprecated Thinking
| Deprecated | Better |
|---|---|
| "Rust is like C++" | Different ownership model |
| "Lifetimes are GC" | Compile-time validity scope |
| "Clone solves everything" | Restructure ownership |
| "Fight the borrow checker" | Work with the compiler |
"unsafe to avoid rules" |
Understand safe patterns first |
Ownership Visualization
Stack Heap
+----------------+ +----------------+
| main() | | |
| s1 ─────────────────────> │ "hello" |
| | | |
| fn takes(s) { | | |
| s2 (moved) ─────────────> │ "hello" |
| } | | (s1 invalid) |
+----------------+ +----------------+
After move: s1 is no longer valid
Reference Visualization
+----------------+
| data: String |────────────> "hello"
+----------------+
↑
│ &data (immutable borrow)
│
+------+------+
| reader1 reader2 (multiple OK)
+------+------+
+----------------+
| data: String |────────────> "hello"
+----------------+
↑
│ &mut data (mutable borrow)
│
+------+
| writer (only one)
+------+
Learning Path
| Stage | Focus | Skills |
|---|---|---|
| Beginner | Ownership basics | m01-ownership, m14-mental-model |
| Intermediate | Smart pointers, error handling | m02, m06 |
| Advanced | Concurrency, unsafe | m07, unsafe-checker |
| Expert | Design patterns | m09-m15, domain-* |
Related Skills
| When | See |
|---|---|
| Ownership errors | m01-ownership |
| Smart pointers | m02-resource |
| Concurrency | m07-concurrency |
| Anti-patterns | m15-anti-pattern |