---
generated_at: 2026-03-01 10:30:00
metrics:
  claims_total: 80
  claims_with_evidence: 78
  claims_without_evidence: 2
confidence_derived: 0.98
---

# 根拠レポート: nu-cmd-plugin.csv

## 本レポートについて

### 目的
本レポートは、生成された単体テストケース一覧の信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

### チェック方法
以下の観点でドキュメントの内容（Claim: 主張）を検証しています：

1. **根拠の有無確認**: 各主張に対して、ソースコード・既存設計書・要件定義書などの根拠（Evidence）が存在するか
2. **根拠との整合性**: 主張の内容が根拠と矛盾していないか
3. **網羅性**: 参照すべき情報源を適切にカバーしているか

### 信頼度スコアの算出
- **confidence_derived** = 根拠あり件数 / 総主張件数
- 状態「○」: 根拠あり、「△」: 根拠不足または要確認

### 本レポートの使い方
1. まず「サマリー」で全体の信頼度と優先レビュー項目を確認
2. 「Claims と根拠の対応」で △ の項目を重点的にレビュー
3. 「不足情報」で補完が必要な情報源を確認

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）: **0.98**
  - 根拠あり: 78 / 80、根拠なし: 2
- 優先レビュー（高）
  1. **C-19**: add_plugin_command_contextのエラーハンドリング - delta mergeのエラーケースは実装上想定困難
  2. **C-32**: PluginAddの通信エラー - プラグイン起動失敗の具体的なシナリオは外部依存

## 2) 参照した情報（Evidence一覧）
> ここに「実在するもの」だけ列挙。抽出フェーズで付けたIDをそのまま出す。

- E-01: `crates/nu-cmd-plugin/src/util.rs` - ユーティリティ関数群（get_plugin_registry_file_path, read_plugin_file, modify_plugin_file, canonicalize_possible_filename_arg, get_plugin_dirs）
- E-02: `crates/nu-cmd-plugin/src/default_context.rs` - add_plugin_command_context関数
- E-03: `crates/nu-cmd-plugin/src/commands/plugin/mod.rs` - PluginCommand構造体とCommandトレイト実装
- E-04: `crates/nu-cmd-plugin/src/commands/plugin/add.rs` - PluginAdd構造体とCommandトレイト実装
- E-05: `crates/nu-cmd-plugin/src/commands/plugin/rm.rs` - PluginRm構造体とCommandトレイト実装
- E-06: `crates/nu-cmd-plugin/src/commands/plugin/stop.rs` - PluginStop構造体とCommandトレイト実装
- E-07: `crates/nu-cmd-plugin/src/commands/plugin/list.rs` - PluginList構造体、PluginInfo構造体、get_plugins_in_engine, get_plugins_in_registry, merge_plugin_info関数
- E-08: `crates/nu-cmd-plugin/src/commands/plugin/use_.rs` - PluginUse構造体とCommandトレイト実装
- E-09: `crates/nu-cmd-plugin/src/lib.rs` - モジュール公開定義

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | get_plugin_registry_file_path: カスタムパス指定時にパス展開 | E-01 (L20-25) | ○ |
| C-02 | get_plugin_registry_file_path: plugin_path設定時にクローン返却 | E-01 (L26-28) | ○ |
| C-03 | get_plugin_registry_file_path: plugin_path未設定時にShellError | E-01 (L29-36) | ○ |
| C-04 | read_plugin_file: 正常系ファイル読み込み | E-01 (L51-56) | ○ |
| C-05 | read_plugin_file: デフォルト値返却 | E-01 (L64) | ○ |
| C-06 | read_plugin_file: ファイル不在エラー | E-01 (L57-62) | ○ |
| C-07 | read_plugin_file: ファイルサイズ0の処理 | E-01 (L51 is_ok_and条件) | ○ |
| C-08 | modify_plugin_file: 既存ファイル更新 | E-01 (L68-114) | ○ |
| C-09 | modify_plugin_file: 新規ファイル作成 | E-01 (L87-88, L107-110) | ○ |
| C-10 | modify_plugin_file: 親ディレクトリ作成 | E-01 (L96-103) | ○ |
| C-11 | modify_plugin_file: operate関数エラー伝播 | E-01 (L92) | ○ |
| C-12 | canonicalize_possible_filename_arg: 相対パス解決 | E-01 (L123) | ○ |
| C-13 | canonicalize_possible_filename_arg: NU_PLUGIN_DIRS検索 | E-01 (L125) | ○ |
| C-14 | canonicalize_possible_filename_arg: cwd取得失敗時フォールバック | E-01 (L129) | ○ |
| C-15 | get_plugin_dirs: 定数からの取得 | E-01 (L139-146) | ○ |
| C-16 | get_plugin_dirs: 環境変数からの取得 | E-01 (L148-154) | ○ |
| C-17 | get_plugin_dirs: チェイン結合 | E-01 (L156) | ○ |
| C-18 | add_plugin_command_context: コマンド登録 | E-02 (L14-21) | ○ |
| C-19 | add_plugin_command_context: エラーメッセージ出力 | E-02 (L26-28) | △ |
| C-20 | PluginCommand: name()が"plugin"返却 | E-03 (L19-21) | ○ |
| C-21 | PluginCommand: シグネチャ定義 | E-03 (L23-27) | ○ |
| C-22 | PluginCommand: ヘルプテキスト返却 | E-03 (L33-41) | ○ |
| C-23 | PluginAdd: name()が"plugin add"返却 | E-04 (L13-15) | ○ |
| C-24 | PluginAdd: filename必須引数 | E-04 (L33-37) | ○ |
| C-25 | PluginAdd: plugin-configオプション | E-04 (L21-26) | ○ |
| C-26 | PluginAdd: shellオプション | E-04 (L27-32) | ○ |
| C-27 | PluginAdd: プラグイン追加成功 | E-04 (L76-140) | ○ |
| C-28 | PluginAdd: カスタム設定ファイル | E-04 (L117, L132) | ○ |
| C-29 | PluginAdd: shellオプション指定 | E-04 (L84, L99-104) | ○ |
| C-30 | PluginAdd: ファイル不在エラー | E-04 (L88-97) | ○ |
| C-31 | PluginAdd: 無効ファイル名エラー | E-04 (L107-115) | ○ |
| C-32 | PluginAdd: 通信エラー | E-04 (L128-130) | △ |
| C-33 | PluginRm: name()が"plugin rm"返却 | E-05 (L9-11) | ○ |
| C-34 | PluginRm: name必須引数 | E-05 (L28-32) | ○ |
| C-35 | PluginRm: forceスイッチ | E-05 (L22-26) | ○ |
| C-36 | PluginRm: 名前による削除 | E-05 (L90-96) | ○ |
| C-37 | PluginRm: ファイル名による削除 | E-05 (L88, L94) | ○ |
| C-38 | PluginRm: 存在しないプラグインエラー | E-05 (L100-107) | ○ |
| C-39 | PluginRm: forceオプション成功 | E-05 (L98-99) | ○ |
| C-40 | PluginRm: カスタム設定ファイル | E-05 (L85, L90) | ○ |
| C-41 | PluginStop: name()が"plugin stop"返却 | E-06 (L9-11) | ○ |
| C-42 | PluginStop: name必須引数 | E-06 (L15-19) | ○ |
| C-43 | PluginStop: 名前による停止 | E-06 (L60-66) | ○ |
| C-44 | PluginStop: ファイル名による停止 | E-06 (L57, L62) | ○ |
| C-45 | PluginStop: 存在しないプラグインエラー | E-06 (L71-77) | ○ |
| C-46 | PluginStop: 停止処理エラー | E-06 (L63) | ○ |
| C-47 | PluginList: name()が"plugin list"返却 | E-07 (L11-13) | ○ |
| C-48 | PluginList: 出力タイプTable | E-07 (L17-30) | ○ |
| C-49 | PluginList: engineスイッチ | E-07 (L38-42) | ○ |
| C-50 | PluginList: registryスイッチ | E-07 (L43-47) | ○ |
| C-51 | PluginList: デフォルトモード統合 | E-07 (L126-131) | ○ |
| C-52 | PluginList: engineモード | E-07 (L137) | ○ |
| C-53 | PluginList: registryモード | E-07 (L138) | ○ |
| C-54 | PluginList: 両オプション指定 | E-07 (L126) | ○ |
| C-55 | PluginList: plugin_path未設定時 | E-07 (L132-135) | ○ |
| C-56 | get_plugins_in_engine: プラグイン情報取得 | E-07 (L173-222) | ○ |
| C-57 | get_plugins_in_engine: Runningステータス | E-07 (L200-203) | ○ |
| C-58 | get_plugins_in_engine: Loadedステータス | E-07 (L200-203) | ○ |
| C-59 | get_plugins_in_engine: 空の場合 | E-07 (L181-221) | ○ |
| C-60 | get_plugins_in_registry: プラグイン情報取得 | E-07 (L224-265) | ○ |
| C-61 | get_plugins_in_registry: Addedステータス | E-07 (L239, L246-247) | ○ |
| C-62 | get_plugins_in_registry: Invalidステータス | E-07 (L256-257) | ○ |
| C-63 | get_plugins_in_registry: 空の場合 | E-07 (L232-262) | ○ |
| C-64 | merge_plugin_info: エンジンのみ存在 | E-07 (L280-288) | ○ |
| C-65 | merge_plugin_info: レジストリのみ存在 | E-07 (L289-290) | ○ |
| C-66 | merge_plugin_info: Running優先 | E-07 (L294-295) | ○ |
| C-67 | merge_plugin_info: Invalid優先 | E-07 (L297-298) | ○ |
| C-68 | merge_plugin_info: Modified検出 | E-07 (L300) | ○ |
| C-69 | merge_plugin_info: Loaded一致時 | E-07 (L301-302) | ○ |
| C-70 | merge_plugin_info: 両方空 | E-07 (L274-308) | ○ |
| C-71 | PluginInfo.is_modified: 名前変更検出 | E-07 (L315) | ○ |
| C-72 | PluginInfo.is_modified: ファイル名変更検出 | E-07 (L316) | ○ |
| C-73 | PluginInfo.is_modified: シェル変更検出 | E-07 (L317) | ○ |
| C-74 | PluginInfo.is_modified: コマンド変更検出 | E-07 (L318) | ○ |
| C-75 | PluginInfo.is_modified: 変更なし | E-07 (L315-318) | ○ |
| C-76 | PluginUse: name()が"plugin use"返却 | E-08 (L8-10) | ○ |
| C-77 | PluginUse: name必須引数 | E-08 (L25-29) | ○ |
| C-78 | PluginUse: plugin-configオプション | E-08 (L19-24) | ○ |
| C-79 | PluginUse: CommandType::Keyword | E-08 (L56-58) | ○ |
| C-80 | PluginUse: run()がempty返却 | E-08 (L60-67) | ○ |

## 4) 不足情報（Unknown / Missing）
- **C-19**: `add_plugin_command_context`のdelta merge失敗ケースはコード上`engine_state.merge_delta(delta)`の戻り値がErrの場合だが、現実的にどのような状況で発生するかは外部依存（EngineStateの内部実装）のため検証困難
  - 候補: nu-engine / nu-protocol のエラーケースドキュメント / 統合テスト
- **C-32**: プラグインとの通信エラーは`PersistentPlugin::get_plugin()`, `interface.get_metadata()`, `interface.get_signature()`のいずれかが失敗するケースだが、これらはnu-plugin-engineモジュールの実装に依存
  - 候補: nu-plugin-engine / nu-plugin-core の単体テスト / 統合テスト

## 5) リスクフラグ（レビュー観点）
- **0 (低リスク)**: 大部分のテストケースは直接ソースコードから導出可能であり、根拠が明確
- **1 (中リスク)**: ファイルI/O関連のエラーケース（権限不足、ディスクフル等）は環境依存であり、実際のテスト実行時に追加検討が必要
- **1 (中リスク)**: プラグイン通信関連のテストケースは外部プロセスとの連携が必要なため、モック/スタブの設計が必要

## 6) レビュアーチェックリスト（最小）
- [ ] 各コマンド（add, rm, stop, list, use）の正常系テストケースが網羅されているか
- [ ] エラーメッセージのフォーマットがShellError定義と一致しているか確認
- [ ] merge_plugin_infoのステータス優先順位ロジックが正しいか確認
- [ ] PluginUseがパーサーキーワードである点を考慮し、実行時テストの範囲を確認
- [ ] get_plugin_dirsの定数と環境変数の両方からの取得が正しくチェインされているか確認
