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

# 根拠レポート：nu_plugin_query.csv

## 本レポートについて

### 目的
本レポートは、生成された設計書・ドキュメントの信頼性を検証し、人間レビュアーが効率的にレビューできるようにすることを目的としています。

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

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

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

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

---

## 1) サマリー（まず見るところ）
- 総合信頼度（derived）：**0.98**
  - 根拠あり：118 / 120、根拠なし：2
- 優先レビュー（高）
  1. **C-61 (inspect_modeのeprintln出力確認)**：実行時の標準エラー出力を検証する必要あり
  2. **C-72 (無効HTML検出)**：webpageクレートの内部エラー仕様に依存

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

- E-01: `crates/nu_plugin_query/src/lib.rs` - モジュール構成の定義
- E-02: `crates/nu_plugin_query/src/main.rs` - エントリポイント
- E-03: `crates/nu_plugin_query/src/query.rs` - Query構造体とPluginトレイト実装（11-60行目）
- E-04: `crates/nu_plugin_query/src/query_json.rs` - QueryJson実装とexecute_json_query関数（1-218行目）
- E-05: `crates/nu_plugin_query/src/query_xml.rs` - QueryXml実装とexecute_xpath_query関数（1-587行目）
- E-06: `crates/nu_plugin_query/src/query_web.rs` - QueryWeb実装とセレクタ関連関数（1-557行目）
- E-07: `crates/nu_plugin_query/src/query_webpage_info.rs` - QueryWebpageInfo実装とserde変換（1-470行目）
- E-08: `crates/nu_plugin_query/src/web_tables.rs` - WebTable構造体とRow構造体（1-1291行目）
- E-09: `crates/nu_plugin_query/src/query_json.rs` 180-218行目 - 既存ユニットテスト
- E-10: `crates/nu_plugin_query/src/query_xml.rs` 283-587行目 - 既存ユニットテスト
- E-11: `crates/nu_plugin_query/src/query_web.rs` 428-557行目 - 既存ユニットテスト
- E-12: `crates/nu_plugin_query/src/query_webpage_info.rs` 456-470行目 - 既存ユニットテスト
- E-13: `crates/nu_plugin_query/src/web_tables.rs` 348-1291行目 - 既存ユニットテスト

## 3) Claims と根拠の対応（レビューの主戦場）
| Claim ID | 主張 | Evidence | 状態 |
|---|---|---|---|
| C-01 | Query::newでデフォルトインスタンス生成 | E-03 (12-14行目: `Default::default()`) | ○ |
| C-02 | Query::versionでCARGO_PKG_VERSION返却 | E-03 (18-20行目) | ○ |
| C-03 | Query::commandsで5つのコマンド登録 | E-03 (22-30行目: vec![Box::new(QueryCommand), ...]) | ○ |
| C-04 | QueryCommand::nameで"query"返却 | E-03 (39-41行目) | ○ |
| C-05 | QueryCommand::runでヘルプメッセージ返却 | E-03 (51-59行目: `engine.get_help()?`) | ○ |
| C-06 | QueryJson::nameで"query json"返却 | E-04 (14-16行目) | ○ |
| C-07 | QueryJson::signatureにqueryパラメータ | E-04 (25-29行目: `.required("query", ...)`) | ○ |
| C-08 | execute_json_queryで基本JSONクエリ | E-04 (88-125行目), E-09 (192-196行目: answer_from_get_age) | ○ |
| C-09 | ネストJSONクエリ | E-04 (31-73行目: examples), E-09 | ○ |
| C-10 | 配列クエリ | E-04 (31-41行目: children example), E-09 (198-203行目) | ○ |
| C-11 | 配列カウント | E-04 (63-66行目: children.# example), E-09 (205-209行目) | ○ |
| C-12 | @reverseモディファイア | E-04 (67-71行目: @reverse example) | ○ |
| C-13 | @uglyモディファイア | E-04 (119-124行目), E-04 (127-135行目: query_contains_modifiers) | ○ |
| C-14 | @prettyモディファイア | E-04 (127-135行目: query_contains_modifiers) | ○ |
| C-15 | 無効JSONエラー | E-04 (109-115行目: `if !is_valid_json`) | ○ |
| C-16 | クエリ文字列Noneエラー | E-04 (100-106行目) | ○ |
| C-17 | 入力変換エラー | E-04 (93-98行目: `input.coerce_str()`) | ○ |
| C-18 | Null→Value::nothing変換 | E-04 (157行目) | ○ |
| C-19 | True→Value::bool(true)変換 | E-04 (168行目) | ○ |
| C-20 | False→Value::bool(false)変換 | E-04 (158行目) | ○ |
| C-21 | 整数→Value::int変換 | E-04 (164行目: `Value::int(v.i64(), span)`) | ○ |
| C-22 | 浮動小数点→Value::float変換 | E-04 (162行目: `Value::float(v.f64(), span)`) | ○ |
| C-23 | String→Value::string変換 | E-04 (167行目) | ○ |
| C-24 | Array→Value::list変換 | E-04 (148-156行目) | ○ |
| C-25 | Object→Value::record変換 | E-04 (169-176行目) | ○ |
| C-26 | @ugly含有検出 | E-04 (135行目: `query.contains("@ugly")`) | ○ |
| C-27 | @pretty含有検出 | E-04 (135行目: `query.contains("@pretty")`) | ○ |
| C-28 | モディファイアなし検出 | E-04 (127-135行目) | ○ |
| C-29 | QueryXml::nameで"query xml"返却 | E-05 (15-17行目) | ○ |
| C-30 | QueryXml::signatureパラメータ | E-05 (33-61行目) | ○ |
| C-31 | XPath count関数 | E-05 (112-183行目), E-10 (289-310行目: position_function_in_predicate) | ○ |
| C-32 | XPath型変換 | E-10 (312-333行目: functions_implicitly_coerce_argument_types) | ○ |
| C-33 | 名前空間サポート | E-05 (144-161行目), E-10 (335-371行目: namespaces_are_used) | ○ |
| C-34 | 数値結果→Value::float | E-05 (169行目), E-10 (373-391行目: number_returns_float) | ○ |
| C-35 | Boolean結果→Value::bool | E-05 (169行目), E-10 (393-411行目: boolean_returns_bool) | ○ |
| C-36 | 文字列結果→Value::string | E-05 (171行目), E-10 (413-431行目: string_returns_string) | ○ |
| C-37 | ノードセット→テーブル | E-05 (172-178行目), E-10 (433-458行目: nodeset_returns_table) | ○ |
| C-38 | output-typeフラグ | E-05 (198-211行目), E-10 (460-485行目) | ○ |
| C-39 | output-namesフラグ | E-05 (213-238行目), E-10 (522-564行目) | ○ |
| C-40 | xml名前空間自動登録 | E-05 (146-153行目), E-10 (566-586行目) | ○ |
| C-41 | クエリNoneエラー | E-05 (118-125行目) | ○ |
| C-42 | 無効XMLエラー | E-05 (133-137行目) | ○ |
| C-43 | 無効XPathエラー | E-05 (179-181行目) | ○ |
| C-44 | build_xpath正常 | E-05 (243-252行目) | ○ |
| C-45 | 空XPathエラー | E-05 (247-249行目) | ○ |
| C-46 | 無効XPath構文エラー | E-05 (250行目) | ○ |
| C-47 | NodeOutputOptionsデフォルト | E-05 (261-280行目: from_call) | ○ |
| C-48 | output-typeオプション | E-05 (261-280行目) | ○ |
| C-49 | Element型出力 | E-05 (202行目: `"element"`) | ○ |
| C-50 | Attribute型出力 | E-05 (203行目: `"attribute"`) | ○ |
| C-51 | QueryWeb::nameで"query web"返却 | E-06 (13-15行目) | ○ |
| C-52 | QueryWeb::signatureパラメータ | E-06 (21-53行目) | ○ |
| C-53 | parse_selector_params文字列入力 | E-06 (109-143行目), E-11 (453-481行目) | ○ |
| C-54 | parse_selector_params非文字列エラー | E-06 (140-142行目) | ○ |
| C-55 | CSSセレクタクエリ | E-06 (368-397行目), E-11 (453-481行目: test_first_child) | ○ |
| C-56 | as_html=true出力 | E-06 (377-381行目) | ○ |
| C-57 | ネストテキスト取得 | E-11 (483-511行目: test_nested_text_nodes) | ○ |
| C-58 | 単一属性取得 | E-06 (313-332行目) | ○ |
| C-59 | 複数属性取得 | E-06 (334-366行目), E-11 (513-556行目) | ○ |
| C-60 | テーブル取得 | E-06 (184-233行目) | ○ |
| C-61 | inspect_mode診断出力 | E-06 (200-203行目: `eprintln!`) | △ |
| C-62 | テーブル未検出時空テーブル | E-06 (212行目: `WebTable::empty()`) | ○ |
| C-63 | CSSセレクタパース | E-06 (399-418行目: fallible_css) | ○ |
| C-64 | inspect時htmlセレクタ | E-06 (403-410行目) | ○ |
| C-65 | 無効CSSセレクタエラー | E-06 (411-416行目) | ○ |
| C-66 | cssパース(panic版) | E-06 (420-426行目) | ○ |
| C-67 | QueryWebpageInfo::name | E-07 (11-13行目) | ○ |
| C-68 | QueryWebpageInfo::signature | E-07 (19-23行目) | ○ |
| C-69 | Webページ情報抽出 | E-07 (29-42行目), E-12 (464-469行目) | ○ |
| C-70 | 非文字列入力エラー | E-07 (39-41行目) | ○ |
| C-71 | タイトル抽出 | E-07 (53-61行目), E-12 (464-469行目) | ○ |
| C-72 | 無効HTMLエラー | E-07 (53-55行目: `webpage::HTML::from_string`) | △ |
| C-73 | bool→Value::bool | E-07 (99-101行目) | ○ |
| C-74 | i8→Value::int | E-07 (103-105行目) | ○ |
| C-75 | i64→Value::int | E-07 (115-117行目) | ○ |
| C-76 | f64→Value::float | E-07 (141-143行目) | ○ |
| C-77 | str→Value::string | E-07 (149-151行目) | ○ |
| C-78 | bytes→Value::binary | E-07 (153-155行目) | ○ |
| C-79 | None→Value::nothing | E-07 (157-159行目) | ○ |
| C-80 | Some→Value | E-07 (161-166行目) | ○ |
| C-81 | Vec→Value::list | E-07 (212-214行目: serialize_seq) | ○ |
| C-82 | struct→Value::record | E-07 (242-248行目: serialize_struct) | ○ |
| C-83 | u64オーバーフローエラー | E-07 (131-135行目) | ○ |
| C-84 | MapSerializer::serialize_key | E-07 (327-337行目) | ○ |
| C-85 | 非文字列keyエラー | E-07 (332-335行目) | ○ |
| C-86 | WebTable::find_first正常 | E-08 (15-18行目), E-13 (686-690行目) | ○ |
| C-87 | find_first_None(テーブルなし) | E-13 (670-675行目) | ○ |
| C-88 | find_first_None(空文字列) | E-13 (672行目) | ○ |
| C-89 | 空テーブル取得 | E-13 (677-684行目) | ○ |
| C-90 | find_all_tables | E-08 (20-30行目), E-13 (851-858行目) | ○ |
| C-91 | find_all_tables_None | E-08 (26-28行目) | ○ |
| C-92 | find_by_id正常 | E-08 (33-42行目), E-13 (704-707行目) | ○ |
| C-93 | find_by_id_None | E-13 (692-701行目) | ○ |
| C-94 | find_by_id空ID | E-13 (699行目) | ○ |
| C-95 | find_by_headers正常 | E-08 (49-80行目), E-13 (752-768行目) | ○ |
| C-96 | find_by_headers空ヘッダー | E-08 (57-59行目), E-13 (709-722行目) | ○ |
| C-97 | find_by_headers_None | E-13 (724-749行目) | ○ |
| C-98 | headers(thあり) | E-13 (782-803行目) | ○ |
| C-99 | headers(thなし) | E-13 (775-780行目) | ○ |
| C-100 | iter正常 | E-08 (96-101行目), E-13 (811-821行目) | ○ |
| C-101 | iter空テーブル | E-13 (805-809行目) | ○ |
| C-102 | WebTable::empty | E-08 (103-108行目) | ○ |
| C-103 | WebTable::new(th+td) | E-08 (129-171行目) | ○ |
| C-104 | WebTable::new(行ヘッダー) | E-08 (145-166行目) | ○ |
| C-105 | Row::len | E-08 (216-218行目), E-13 (838-848行目) | ○ |
| C-106 | Row::is_empty(空) | E-08 (221-223行目), E-13 (823-836行目) | ○ |
| C-107 | Row::is_empty(非空) | E-08 (221-223行目), E-13 (823-836行目) | ○ |
| C-108 | Row::get正常 | E-08 (229-238行目), E-13 (887-898行目) | ○ |
| C-109 | Row::get_None(ヘッダーなし) | E-13 (873-885行目) | ○ |
| C-110 | Row::get_None(範囲外) | E-08 (234-237行目) | ○ |
| C-111 | Row::get_header_at正常 | E-08 (240-253行目) | ○ |
| C-112 | Row::get_header_at_None | E-08 (248-251行目) | ○ |
| C-113 | Row::as_slice | E-08 (256-258行目), E-13 (992-999行目) | ○ |
| C-114 | Row::iter | E-08 (261-263行目), E-13 (1084-1093行目) | ○ |
| C-115 | select_cells(タグ除去) | E-08 (275-299行目) | ○ |
| C-116 | select_cells(タグ保持) | E-08 (296-298行目) | ○ |
| C-117 | cell_content | E-08 (301-318行目) | ○ |
| C-118 | cell_content(ネストHTML) | E-08 (305-308行目) | ○ |
| C-119 | contains_str(true) | E-08 (321-346行目) | ○ |
| C-120 | contains_str(false) | E-08 (336行目: `slice.iter().any(...)`) | ○ |

## 4) 不足情報（Unknown / Missing）
- **C-61 (inspect_mode診断出力)**: `eprintln!`による標準エラー出力の検証は実行時テストでのみ確認可能。ソースコード上は該当処理が存在するが、出力内容の正確性は動的テストが必要。
  - 候補：統合テスト / 手動実行確認 / キャプチャテスト
- **C-72 (無効HTMLエラー)**: `webpage`クレートの内部エラーハンドリングに依存。どのようなHTMLが「無効」と判定されるかは外部クレートの仕様による。
  - 候補：webpageクレートのドキュメント / 統合テスト

## 5) リスクフラグ（レビュー観点）
- **リスク0（低）**: 大部分のテストケースはソースコード内の既存テストと一致しており、信頼性が高い
- **リスク1（中）**: C-61, C-72は外部要因（標準エラー出力、外部クレート）に依存するため、統合テストでの確認を推奨
- **リスク0（低）**: Serde変換関連のテストケース（C-73〜C-85）はValueSerializer実装と直接対応

## 6) レビュアーチェックリスト（最小）
- [ ] execute_json_query のエラーハンドリングが網羅されているか確認
- [ ] execute_xpath_query のノードセット出力オプションが正しくテストされているか確認
- [ ] WebTable のヘッダー解析ロジック（行ヘッダー対応含む）が網羅されているか確認
- [ ] Serde変換のエッジケース（u64オーバーフロー等）が適切に考慮されているか確認
- [ ] inspect_mode のテストは実行時確認が必要であることを認識
