mcpField
R
rust-iterator-collections

rust-iterator-collections

github.com/lvtd-llc開発160 回インストール8 週間前に更新
リポジトリ

rust-iterator-collections について

明確なイテレーターおよびコレクションコードを書くための Rust スキルです。標準 API とレビュー項目を使い、所有権、割り当て、順序、エラー処理を明示します。

主な機能

  1. 01所有権に応じた反復方法の選択
  2. 02明瞭さを高める場合のアダプター利用
  3. 03失敗時に早期終了する反復処理
  4. 04entry API によるマップ更新
  5. 05アクセス方法に応じたコレクション選択
  6. 06順序の維持と余分な割り当ての回避

活用シーン

  1. 01コレクション処理ループのリファクタリング
  2. 02失敗しうるイテレーターパイプラインの処理
  3. 03マップの挿入または更新ロジックの実装
  4. 04順序と重複項目の動作確認

インストール

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

$npx skills add https://github.com/lvtd-llc/skills --skill rust-iterator-collections

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

同梱ファイルagents/openai.yamlreferences/iterator-collection-patterns.md

詳細

Rust のイテレーターとコレクション

コレクションのコードを、明確で慣用的な Rust に書き換える際にこのスキルを使います。処理を直接表現できるイテレーター API やコレクション API を優先しつつ、所有権、メモリアロケーション、エラーの挙動が分かるようにします。

基本的なワークフロー

  1. 入力の所有権モードを特定します。借用による反復、可変反復、または消費を伴う反復のいずれかです。
  2. 最も単純なイテレーターの形式を選びます。iter、iter_mut、into_iter、範囲、drain、またはコレクション固有のメソッドです。
  3. 結果のコードがより明確になる場合に限り、手動のループをアダプターに置き換えます。複雑な分岐、早期の変更、デバッグが必要な場合は、明示的なループを維持します。
  4. エラー発生時に処理を中断する必要がある場合は、collect::<Result<Vec<_>, _>>()、try_fold、try_for_each などの失敗しうるイテレーター処理を使います。
  5. 挿入または更新のロジックには、HashMap::entry または BTreeMap::entry を使います。
  6. 不要な中間 Vec は避けます。可能であれば、イテレーターを連結するか、既存のコレクションに追加します。
  7. 空の入力、要素が 1 つの入力、重複キー、順序に関する期待値、エラー発生時の処理中断をテストします。

イテレーターのルール

  • 関数で反復だけが必要な場合は、impl IntoIterator<Item = T> を受け取ります。
  • スライスの意味論で十分な場合は &[T] を使い、&Vec<T> は避けます。
  • map の後に None を破棄する場合は filter_map を使います。各要素を 0 個以上の要素に展開する場合は flat_map を使います。
  • 状態を持つ変換では、停止動作が明確になる場合に map_while または scan を使います。
  • 型注釈は collect の境界に追加し、パイプライン全体には追加しません。
  • イテレーターの要素を意図的に複製する場合は、map(|x| x.clone()) より cloned または copied を優先します。

コレクションのルール

ループをリファクタリングする場合、またはコレクションの変更をレビューする場合は、references/iterator-collection-patterns.md を読みます。

  • 順序付きの連続データには Vec、両端で push/pop するキューのような用途には VecDeque、優先度付きキューには BinaryHeap、順序なしの検索には HashMap、ソート済みの検索や範囲検索には BTreeMap を使います。
  • 借用した要素を別途反復しながらコレクションを変更するのではなく、retain、drain、splice、split_off を使います。
  • デフォルト値の構築コストが高い場合は Entry::or_insert_with を使います。
  • 順序を意図的に維持します。反復順序が動作の一部である場合は、BTreeMap を HashMap に置き換えないでください。
  • サイズが分かっている場合、またはプロファイリングで再アロケーションが重要だと分かった場合に限り、容量を事前確保します。

レビューチェックリスト

  • パイプラインから所有権とエラーの挙動が明確に読み取れます。
  • entry のほうが簡潔な場面で、contains_key の後に insert を使っていません。
  • 再度反復するだけの目的で、避けられる collect::<Vec<_>>() を使っていません。
  • インデックスは、インデックス自体が処理の対象である場合に限り使っています。
  • 必要に応じて、重複、空の入力、決定的な順序をテストしています。

コメント