mcpField
C
coding-guidelines

coding-guidelines

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

coding-guidelines について

命名、型、文字列、エラー処理、メモリ、並行処理、非同期コード、マクロを扱う50項目の Rust コーディングガイドです。一般的な規則より気付きにくい Rust 固有の慣習を示します。

主な機能

  1. 0150項目の Rust コーディング規則
  2. 02命名とデータ型の指針
  3. 03文字列とエラー処理の規則
  4. 04メモリ・並行処理・非同期の助言
  5. 05非推奨パターンと代替案

活用シーン

  1. 01Rust の命名と変換規則の確認
  2. 02Rust のエラー処理方針のレビュー
  3. 03非同期コードとロック使用の点検

インストール

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

$npx skills add https://github.com/actionbook/rust-skills --skill coding-guidelines

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

同梱ファイルclippy-lints/_index.mdindex/rules-index.md

詳細

Rust コーディングガイドライン(主要ルール50項目)

命名(Rust 固有)

ルールガイドライン
get_ 接頭辞を付けないfn get_name() ではなく fn 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.chars() より s.bytes()
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

非同期処理

ルールガイドライン
CPU 負荷の高い処理には同期処理を使うAsync は I/O 用
await をまたいでロックを保持しないスコープ付きガードを使う

マクロ

ルールガイドライン
必要な場合以外は避ける関数やジェネリクスを優先する
Rust の構文に従うマクロの入力は Rust のコードのように見える形にする

非推奨 → より良い代替

非推奨より良い代替以降
lazy_static!std::sync::OnceLock1.70
once_cell::Lazystd::sync::LazyLock1.80
std::sync::mpsccrossbeam::channel-
std::sync::Mutexparking_lot::Mutex-
failure/error-chainthiserror/anyhow-
try!()? 演算子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 固有のルールです。

コメント