rust-unsafe-boundaries について
Rust 開発者向けのスキルです。unsafe コードを小さく、文書化され、テスト可能な境界に閉じ込め、不変条件、安全契約、境界ケースのテストを重視します。
主な機能
- 01安全な Rust 設計を先に検討
- 02不変条件と安全契約の記述
- 03unsafe ブロックの縮小
- 04パニック、境界、ドロップ経路のテスト
- 05対応プロジェクトでの Miri 利用
活用シーン
- 01unsafe Rust コードのレビュー
- 02安全な API による unsafe 内部実装の隔離
- 03初期化と所有権の境界ケースのテスト
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ lvtd-llc/ skills --skill rust-unsafe-boundariesインストール後、Claude Code で/rust-unsafe-boundariesを入力して読み込まれたか確認します。
同梱ファイルagents/openai.yamlreferences/safety-invariants.md
詳細
Rust の unsafe 境界
このスキルは、unsafe な Rust コードを小さく、ドキュメント化され、テスト可能な境界の内側に隔離するために使用します。必要な操作を、許容できる正確性とパフォーマンスで安全な API では表現できない場合に限り、unsafe コードを使用できます。
基本的なワークフロー
- まず安全な設計を試します。標準 API、所有権の再構成、イテレーター、同期プリミティブ、既存のクレートを確認します。
- 安全な Rust では証明できない不変条件を明示します。不変条件を書き出せない場合は、まだ unsafe コードを書かないでください。
- unsafe ブロックは極小に保ちます。ブロックに入る前に、安全なコードでランタイムチェックとセットアップを行います。
- 各 unsafe ブロックの直前に
// SAFETY:コメントを記述し、その中の各 unsafe 操作が有効である理由を説明します。 - 呼び出し元に追加の条件を満たす責任がある場合に限り、関数を
unsafe fnとしてマークします。その条件は# Safetyセクションに記載します。 unsafe_op_in_unsafe_fnを有効にするか、その設定に従います。unsafe 関数内の unsafe 操作も、明示的な unsafe ブロックで囲みます。- 通常の動作、境界ケース、パニック経路、ドロップ時の動作をテストします。プロジェクトが対応している場合は Miri を実行します。
境界ルール
unsafe コードを追加または承認する前に、references/safety-invariants.md を読んでください。
- private な unsafe 内部実装と、安全な公開ラッパーを優先します。
- 非推奨または場当たり的な未初期化メモリのパターンより、
MaybeUninit<T>を優先します。 - 妥当性、アラインメント、初期化、エイリアシング、ライフタイムのすべてを証明できない限り、raw ポインターから参照を作成しないでください。
- 容量、初期化、所有権を証明せずに、
set_len、ポインター演算、from_raw_partsを使用しないでください。 - 部分的に初期化された値、手動でのドロップ、または長さの変更が関わる場合は、パニック安全性を明確にします。
static mutは避け、OnceLock、LazyLock、アトミック、またはロックされた状態を優先します。
ドキュメントのパターン
/// # Safety
///
/// `ptr` must be non-null, aligned for `T`, initialized, and valid for reads
/// for the returned lifetime. No mutable reference may alias the same value.
pub unsafe fn read_ref<'a, T>(ptr: *const T) -> &'a T {
// SAFETY: The caller guarantees `ptr` satisfies the documented contract.
unsafe { &*ptr }
}
レビューチェックリスト
- すべての unsafe ブロックに、その箇所の
SAFETYの説明があります。 - すべての
unsafe fnまたは unsafe トレイトに、# Safety契約があります。 - 公開されている安全な API から内部不変条件に違反できません。
- ドロップ、パニック、早期リターンの各経路で、初期化と所有権が保たれます。
- テストまたは Miri で、正常なケースだけでなく危険な境界も確認しています。
コメント
Markdown 対応