coding-guidelines
Rustのコーディング規約やベストプラクティスについて、命名規則、フォーマット、コメントの書き方など、コードレビューで役立つ情報を分かりやすく提供し、より高品質なRustコード作成を支援するSkill。
📜 元の英語説明(参考)
Use when asking about Rust code style or best practices. Keywords: naming, formatting, comment, clippy, rustfmt, lint, code style, best practice, P.NAM, G.FMT, code review, naming convention, variable naming, function naming, type naming, 命名规范, 代码风格, 格式化, 最佳实践, 代码审查, 怎么命名
🇯🇵 日本人クリエイター向け解説
Rustのコーディング規約やベストプラクティスについて、命名規則、フォーマット、コメントの書き方など、コードレビューで役立つ情報を分かりやすく提供し、より高品質なRustコード作成を支援するSkill。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o coding-guidelines.zip https://jpskill.com/download/9248.zip && unzip -o coding-guidelines.zip && rm coding-guidelines.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/9248.zip -OutFile "$d\coding-guidelines.zip"; Expand-Archive "$d\coding-guidelines.zip" -DestinationPath $d -Force; ri "$d\coding-guidelines.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
coding-guidelines.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
coding-guidelinesフォルダができる - 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 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
Rust コーディング規約 (50のコアルール)
命名 (Rust固有)
| ルール | ガイドライン |
|---|---|
get_ プレフィックスは不要 |
fn name() で fn get_name() ではない |
| イテレータの慣例 | iter() / iter_mut() / into_iter() |
| 変換の命名 | as_ (安価な &), to_ (高価), into_ (所有権) |
| 静的変数のプレフィックス | static に対しては G_CONFIG、const に対してはプレフィックスなし |
データ型
| ルール | ガイドライン |
|---|---|
| newtype を使用 | ドメインセマンティクスのために struct Email(String) |
| スライスパターンを優先 | if let [first, .., last] = slice |
| 事前割り当て | Vec::with_capacity(), String::with_capacity() |
| Vec の乱用を避ける | 固定サイズには配列を使用 |
文字列
| ルール | ガイドライン |
|---|---|
| バイトを優先 | ASCII の場合は s.bytes() を s.chars() より優先 |
Cow<str> を使用 |
借用したデータを変更する可能性がある場合 |
format! を使用 |
+ を使用した文字列連結よりも |
| ネストされたイテレーションを避ける | 文字列に対する contains() は O(n*m) |
エラー処理
| ルール | ガイドライン |
|---|---|
? 伝播を使用 |
try!() マクロではない |
unwrap() より expect() |
値が保証されている場合 |
| 不変条件のアサーション | 関数エントリで assert! |
メモリ
| ルール | ガイドライン |
|---|---|
| 意味のあるライフタイム | 単なる 'a ではなく 'src, 'ctx |
RefCell に対して try_borrow() |
パニックを避ける |
| 変換のためのシャドーイング | let x = x.parse()? |
並行性
| ルール | ガイドライン |
|---|---|
| ロック順序を特定 | デッドロックを防ぐ |
| プリミティブにはアトミックを使用 | bool/usize に対して Mutex ではない |
| メモリ順序を慎重に選択 | Relaxed/Acquire/Release/SeqCst |
Async
| ルール | ガイドライン |
|---|---|
| CPUバウンドには Sync | Async は I/O 向け |
| await をまたいでロックを保持しない | スコープ付きガードを使用 |
マクロ
| ルール | ガイドライン |
|---|---|
| 必要でない限り避ける | 関数/ジェネリクスを優先 |
| Rust 構文に従う | マクロ入力は Rust のように見えるべき |
非推奨 → より良いもの
| 非推奨 | より良いもの | 開始 |
|---|---|---|
lazy_static! |
std::sync::OnceLock |
1.70 |
once_cell::Lazy |
std::sync::LazyLock |
1.80 |
std::sync::mpsc |
crossbeam::channel |
- |
std::sync::Mutex |
parking_lot::Mutex |
- |
failure/error-chain |
thiserror/anyhow |
- |
try!() |
? operator |
2018 |
クイックリファレンス
Naming: snake_case (fn/var), CamelCase (type), SCREAMING_CASE (const)
Format: rustfmt (just use it)
Docs: /// for public items, //! for module docs
Lint: #![warn(clippy::all)]
Claude は Rust の慣例をよく知っています。これらは、自明ではない Rust 固有のルールです。
📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
Rust Coding Guidelines (50 Core Rules)
Naming (Rust-Specific)
| Rule | Guideline |
|---|---|
No get_ prefix |
fn name() not fn get_name() |
| Iterator convention | iter() / iter_mut() / into_iter() |
| Conversion naming | as_ (cheap &), to_ (expensive), into_ (ownership) |
| Static var prefix | G_CONFIG for static, no prefix for const |
Data Types
| Rule | Guideline |
|---|---|
| Use newtypes | struct Email(String) for domain semantics |
| Prefer slice patterns | if let [first, .., last] = slice |
| Pre-allocate | Vec::with_capacity(), String::with_capacity() |
| Avoid Vec abuse | Use arrays for fixed sizes |
Strings
| Rule | Guideline |
|---|---|
| Prefer bytes | s.bytes() over s.chars() when ASCII |
Use Cow<str> |
When might modify borrowed data |
Use format! |
Over string concatenation with + |
| Avoid nested iteration | contains() on string is O(n*m) |
Error Handling
| Rule | Guideline |
|---|---|
Use ? propagation |
Not try!() macro |
expect() over unwrap() |
When value guaranteed |
| Assertions for invariants | assert! at function entry |
Memory
| Rule | Guideline |
|---|---|
| Meaningful lifetimes | 'src, 'ctx not just 'a |
try_borrow() for RefCell |
Avoid panic |
| Shadowing for transformation | let x = x.parse()? |
Concurrency
| Rule | Guideline |
|---|---|
| Identify lock ordering | Prevent deadlocks |
| Atomics for primitives | Not Mutex for bool/usize |
| Choose memory order carefully | Relaxed/Acquire/Release/SeqCst |
Async
| Rule | Guideline |
|---|---|
| Sync for CPU-bound | Async is for I/O |
| Don't hold locks across await | Use scoped guards |
Macros
| Rule | Guideline |
|---|---|
| Avoid unless necessary | Prefer functions/generics |
| Follow Rust syntax | Macro input should look like Rust |
Deprecated → Better
| Deprecated | Better | Since |
|---|---|---|
lazy_static! |
std::sync::OnceLock |
1.70 |
once_cell::Lazy |
std::sync::LazyLock |
1.80 |
std::sync::mpsc |
crossbeam::channel |
- |
std::sync::Mutex |
parking_lot::Mutex |
- |
failure/error-chain |
thiserror/anyhow |
- |
try!() |
? operator |
2018 |
Quick Reference
Naming: snake_case (fn/var), CamelCase (type), SCREAMING_CASE (const)
Format: rustfmt (just use it)
Docs: /// for public items, //! for module docs
Lint: #![warn(clippy::all)]
Claude knows Rust conventions well. These are the non-obvious Rust-specific rules.