similarity-rs について
similarity-rsは、開発やレビューでRustコードの重複検出CLIを使うためのスキルです。先に検索する手順、CI設定、調整方法を扱い、ベータ版の検出結果は人手で確認するよう案内します。
主な機能
- 01類似するRustコードの検出
- 02先に検索するワークフローの案内
- 03Pre-commitとGitHub Actionsの設定例
- 04しきい値と最小行数の調整
- 05誤検出の確認に関する助言
活用シーン
- 01コミット前の重複チェック
- 02整理作業で統合候補を特定
- 03CIへの重複チェック追加
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ chrisgliddon/ bevy-skills --skill similarity-rsインストール後、Claude Code で/similarity-rsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/antipatterns.mdci-integration.mdfalse-positives.mdsearch-before-write.mdsibling-tools.mdtuning.md詳細
similarity-rs 0.5 — Rust の重複検出
ツールのステータス:ベータ版 — 上流の README によると、本番環境でのテストは行われていません。結果に基づいて対応する前に、検出内容を手動で評価してください。
このスキルを使うタイミング
アンチパターンの兆候(コードを書く前に対応してください):
- ユーティリティ関数を書こうとしている — まずコードベースを grep で検索してください。すでに存在するかもしれません。
- 「ここにインラインで書くだけでいい」と考えていることに気づいたとき。
- 既存の関数を少し変更して、コピー&ペーストしようとしている。
- 既存のものと重複する可能性がある enum や struct を追加しようとしている。
- 2 つの
Pluginセットアップに、定型コードの大きなブロックが共通している。 Queryのフィルターコンポーネントだけが異なる、類似した Bevy システムがある。Bundleにまとめるべきcommands.spawn((Mesh3d(...), MeshMaterial3d(...), ...))のパターンを繰り返している。
ツール統合の兆候(チェックを実行してください):
- コミットする前:ファイル間の重複を新たに持ち込んでいないことを確認します。
- 整理を集中的に行う期間中:統合候補を特定します。
- pre-commit フックや GitHub Actions のゲートを設定するとき。
- 出力が多すぎる、または少なすぎる場合に、
-t/--thresholdや--min-linesを調整するとき。
標準的なワークフロー
基本の流れは、先に検索 → 最小限のコードを書く → チェックを実行するです。
# 1. Search before writing — check whether the helper already exists
rg "fn <verb>" # e.g., rg "fn normalize" to find existing helpers
cargo doc --open --package <dep> # inventory what your deps already provide
# 2. Write only what's missing.
# 3. Before committing, check for accidental duplication
cargo install similarity-rs # one-time install
similarity-rs ./src # scan the src tree
# 4. If --cross-file output is needed (catches LLM's most common antipattern)
similarity-rs --cross-file ./src
# 5. Tighten or loosen if needed (see references/tuning.md)
similarity-rs -t 0.85 -m 5 --cross-file --skip-test ./src
その場しのぎのヘルパーに頼る前に、各依存関係について cargo doc --open を確認してください。LLM は、何もないところからよりも、標準ライブラリ、itertools、またはすでに宣言されているクレート依存関係にある関数を再現しがちです。
トピック
| トピック | リファレンス |
|---|---|
| LLM による重複パターンの例(変更前/変更後) | references/antipatterns.md |
| 書く前に検索するワークフロー(rg、cargo doc、CLAUDE.md のスキャン) | references/search-before-write.md |
| pre-commit フックと GitHub Actions CI のレシピ | references/ci-integration.md |
-t、--min-lines、--cross-file、--no-size-penalty の調整項目 | references/tuning.md |
| 類似コードが意図的な場合 — 対応しないでください | references/false-positives.md |
多言語リポジトリ向けの similarity-ts、similarity-py、similarity-generic | references/sibling-tools.md |
注意点
-
--cross-fileはデフォルトで無効です。 指定しない場合、報告されるのはファイル内のペアのみです。LLM が持ち込む重複の多くはファイル間にあります。ファイル内のみを対象としたい場合を除き、必ず--cross-fileを指定してください。 -
ベータ版ツールです。 上流の README では、
similarity-rsは本番環境でテストされていないと記されています。出力は判定ではなく手がかりとして扱ってください。リファクタリングする前に、フラグが付いた各ペアを確認してください。 -
CI では
--skip-testを指定します。 テストファイルには、設計上、構造が似たセットアップ用フィクスチャが含まれていることがよくあります。CI では--skip-testを指定して、想定されるテストフィクスチャの類似を除外してください。テストコードの重複はローカルで確認します。 -
しきい値の調整はプロジェクトごとに異なります。 デフォルトの
-t 0.85では、明らかなコピー&ペーストを検出します。整理を集中的に行う期間中は 0.75~0.80(検出数を増やす)、本番環境でのゲートには 0.90~0.95(誤検知を減らす)を使用してください。references/tuning.md を参照してください。 -
このスキルにはテスター用のスニペットがありません。
similarity-rsは CLI 専用ツールで、ライブラリ API がないため、検証用のcargo checkの例はありません。これはテスター用の例を持たないbevy-cargo-featuresとbevy-migration-0-17-to-0-18と同じ方針です。
関連項目
bevy-cargo-features—cargo installによるsimilarity-rsのインストールは、Cargo.tomlの feature の扱いと関連します。また、意図しない依存関係の重複を隠す可能性があるdefault-featuresの判断についても説明しています。bevy-core-concepts— 重複したPluginのセットアップやスケジュールの定型コードは、このツールが検出する Bevy 固有のアンチパターンとして最もよく見られるものです。bevy-ecs-components— 機能を統合せずに追加した場合、よく似たコンポーネントの struct や重複する enum が見つかることがあります。