rust について
rustは、Rust開発タスクを該当するサブシステムの資料へ振り分け、ワークスペース固有のシステムプログラミング規約を適用するスキルです。必要な指針と検証手順を求めるRust開発者向けです。
主な機能
- 01Rustサブシステム別のタスク振り分け
- 02関連資料のみを読み込み
- 03安全なRustとエラー処理の規則
- 04非同期処理、テスト、検証の指針
活用シーン
- 01Rustサブシステムの変更実装
- 02unsafeコードとエラー設計のレビュー
- 03プロパティテストや統合テストの追加
- 04対象を絞ったCargo検証コマンドの選択
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ ulpi-io/ skills --skill rustインストール後、Claude Code で/rustを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/arena-graph.mdasync-concurrency.mdbinary-formats.mddatafusion-arrow.mderror-unsafe.mdgeo-rtree.mdsearch-vector.mdstack.mdstorage-engine.mdtesting.mdtype-system.mdwire-protocols.md詳細
このスキルは Rust リファレンス群を案内するルーティング用シェルであり、システム全体のハンドブックではありません。
譲れないルール:
- コーディングの前にサブシステムを特定してください。関連するリファレンスのみを読み込んでください。
- デフォルトでは安全な Rust を使用してください。
unsafeは正当な理由がある場合に限ります。すべてのunsafeブロックに// SAFETY:コメントを付けてください。 - 可能な限りゼロコピーにしてください。 mmap されたセグメント、ページ内を参照する
&str/&[u8]を使用してください。理由なくデータをコピーしないでください。 - クレートごとにエラー型を定義してください。 ライブラリークレートでは
thiserrorの enum を使用してください。ライブラリーでanyhowを使わないでください。バイナリーやテストでのみ使用してください。 - 非同期処理には tokio を使用してください。 すべての I/O は非同期にします。CPU 負荷の高い処理は
spawn_blockingで実行してください。tokio ランタイムをブロックしないでください。 - ワークスペースのクレート構成に従ってください。 サブシステムごとに 1 つのクレートを使用します。依存関係は下位方向に限定し、循環依存を避けてください。
- 不変条件にはプロパティテストを使用してください。 ラウンドトリップ、型強制、バイナリー解析には
proptestを使用してください。
rust
入力
$request:対象となるクレート、サブシステム、バグ、機能、またはレビュー対象
目標
Rust の作業を適切なサブシステムの規約に沿って進め、汎用的な Rust の既定値ではなく、ワークスペースのシステムプログラミングのパターンに従って変更を行えるようにします。
ステップ 0:サブシステムを特定する
Rust のどの領域がタスクに関係するか判断してください。
- ストレージエンジン
- バイナリー形式
- 型システム
- Arrow または DataFusion
- ワイヤープロトコル
- 検索またはベクトル
- アリーナまたはグラフのコード
- 地理空間インデックス
- 非同期処理または並行処理
- テスト
- unsafe またはエラー設計
成功基準:リファレンスを読み込む前に、タスクが適切なサブシステムに割り当てられていること。
ステップ 1:関連するリファレンスのみを読み込む
ルーティングテーブルから、一致するファイルを選んでください。リファレンスツリー全体をまとめて読み込まないでください。
| タスク/領域 | 読むファイル |
|---|---|
| ツールチェーン、ワークスペースの構成、主要クレート、Cargo の規約 | references/stack.md |
| WAL、mmap、セグメント、MVCC、コンパクション、io_uring、バックエンド | references/storage-engine.md |
| カスタムのディスク上の形式、ゼロコピー解析、パック構造体 | references/binary-formats.md |
| データベースの型システム、ディスク/実行時の型、Arrow 連携 | references/type-system.md |
| DataFusion のテーブルプロバイダー、UDF、Arrow RecordBatch、プランニング | references/datafusion-arrow.md |
| pgwire サーバー、MySQL プロトコル、方言のマッピング、ORM 互換性 | references/wire-protocols.md |
| tantivy FTS、HNSW ベクトル、SIMD 距離、ハイブリッド検索 | references/search-vector.md |
| bumpalo アリーナ、グラフ隣接関係、走査アルゴリズム | references/arena-graph.md |
| R-tree 空間インデックス、地理空間述語、WGS84 距離 | references/geo-rtree.md |
| tokio 非同期処理、io_uring、crossbeam、ロックフリー構造、MVCC | references/async-concurrency.md |
| proptest、決定論的テスト、統合テストのパターン | references/testing.md |
| thiserror の階層、unsafe のパターン、安全性の不変条件 | references/error-unsafe.md |
複数のタスクがある場合は、複数のファイルを読んでください。
成功基準:関連するサブシステムの Rust ガイダンスのみが有効になっていること。
ステップ 2:Rust の基本的なガードレールに従って実装する
以下のルールを常に適用してください。
- デフォルトでは安全な Rust を使用し、
unsafeは// SAFETY:で正当化できる場合に限る - エラー型はクレートの境界に合わせる(ライブラリーでは
thiserror、anyhowはバイナリー/テストでのみ使用) - 非同期コードでランタイムをブロックしない。CPU 処理には
spawn_blockingを使用する - 所有データと借用データを意図的に選択し、シグネチャでは
Vec<u8>より&[u8]を優先する - 明示的な
useインポートを使用する。テストモジュール以外での glob インポートは禁止 Resultまたは計算値を返す関数には#[must_use]を付ける#[inline]はホットループ内の小さな関数にのみ使用し、公開 API には使用しない- 非同期境界をまたぐトレイトオブジェクトには
Send + Syncの境界を付ける - すべての公開型に
#[derive(Debug)]を付ける。#[derive(Clone)]は安価な場合にのみ付ける - 任意のクレート依存関係にはフィーチャーフラグを使用する(
#[cfg(feature = "...")]) - リスクに応じたテストを選択する:ユニット、統合、プロパティ、スナップショット、またはドメイン固有の検証
成功基準:実装がワークスペースのシステムレベルの品質基準を満たしていること。
ステップ 3:変更を検証する
関連性が最も高い、必要最小限の検証ループを使用します。
cargo fmtcargo clippy -- -D warnings- 対象を絞ったクレートのテスト
- 必要に応じて、proptest やスナップショットなど、サブシステム固有のテスト
成功基準:このワークスペースで想定されている方法で、Rust のサーフェスが検証されています。
ガードレール
SKILL.mdに Rust ハンドブック全体を埋め込まないでください。- サブシステムの特定を省略しないでください。
- プロジェクトで特に許可されている場合を除き、ライブラリクレートで
anyhowを使用しないでください。 - 通常のドメインスキルであるため、
disable-model-invocationを追加しないでください。 unsafeの不変条件に関する説明を残さないままにしないでください。
参照を読み込むタイミング
-
references/stack.mdワークスペースやツールチェーンのコンテキストを確認するために使用します。 -
その後は、
references/内のタスクに関連するサブシステムファイルのみを読み込みます。
出力要件
次の内容を報告してください。
- 読み込んだ Rust の参照資料
- 適用したサブシステムのパターン
- 行った変更
- 実行した検証
コメント
Markdown 対応