# 実験素材：ファイルは動かさず、目録で探せるか

記事「ファイルは動かさなくていい。AIに『目録』を作らせるだけで、必要な資料はちゃんと見つかる」の実験で使ったコードとデータです。実施日は2026-10-18。Claude Code 2.1.301の `claude -p` で、モデルは Claude Haiku 4.5（claude-haiku-4-5-20251001）と Claude Sonnet 5.5（claude-sonnet-5-5）。

## 何を測ったか

架空の小さな制作会社「港デザイン事務所」の散らかったフォルダ（276ファイル）で、13個の探しものをAIに頼み、正しい資料を挙げて答えの値も合っているかを採点しました。

| 条件 | 中身 |
|---|---|
| A そのまま | 散らかったフォルダを、そのまま探す |
| B 目録を作る | 同じフォルダに、AIが作った目録（`inventory.csv`）を添える。ファイルは動かさない |
| C AIが整理 | AIに分類・改名・移動をさせたフォルダ（`reorg_tree.txt` が整理後の一覧）を探す |

13問 × 5回 × 3条件 × 2モデル = 390回。追加で、整理前の名前で聞く3問（5回 × 3条件 × 2モデル = 90回）、目録を作ったあとに資料が増える2問（8回 × 4条件 × 2モデル = 128回。条件の中身は下の表）。合計608回。

| 追加条件 | 中身 |
|---|---|
| D | 目録を添え、「目録は古くなっていることがある。実際のファイル一覧と突き合わせて」と伝える |
| E | 目録を添え、「最初に `find docs -type f -newer inventory.csv` を実行して」と伝える |

## 中身

| ファイル | 内容 |
|---|---|
| `corpus_spec.py` / `corpus_fill.py` | 資料の定義（すべて架空）。spec が答えになる資料と手書きの資料、fill が固定シードで作るまぎれ込み資料 |
| `build_corpus.py` | 定義から実ファイルを作る（macOS、Pillow、reportlab、LibreOffice が必要） |
| `corpus/docs/` | 作った276ファイル（zipの中だけにあります） |
| `questions.py` | 質問と正解（13問、旧名3問、目録が古くなる2問） |
| `prep.py` | 目録づくりと「AIが整理」の実行。AIに渡した依頼文がそのまま入っている |
| `run_search.py` / `harness.py` | 検索の実行。探す依頼文はここ |
| `scoring.py` / `rescore.py` / `summarize.py` / `verify_inputs.py` | 採点・集計・元資料が無事かの確認 |
| `inventory.csv` | AIが作った目録（276行） |
| `reorg_tree.txt` | AIが整理したあとのファイル一覧 |
| `results.json` | 608回の結果（答え、道具の呼び出し回数、時間、トークン、換算額） |
| `make_figures.py` | 記事の図版を作るコード |

スクリプトは作業場所を `/tmp/afi/` に固定しています。使うときは書き換えてください。

## 採点

- 正解 = 答えとして挙げた資料が、正解の資料と中身（SHA-256）で一致し、かつ答えの値が正規表現に合う。空白とカンマは除いて照合しました。
- 整理後のフォルダでは名前が変わるので、名前でなく中身のハッシュで資料を照合しています。
- 「存在しない資料」を聞く質問（q13）は、`NONE`（見つからない）と答えれば正解です。
- 目録のあとに増えた資料の質問（s1・s2）は、ファイル名で照合しています。

## 実験で起きたこと（記録）

- 最初は50ファイルで1回ずつ試しました。Sonnetは3条件とも答えが全部合って差が出なかったため、規模を276ファイルに増やしました。この予備実験は集計に入れていません。
- Haikuの目録あり・q04の1回は「2027年3月1日まで」と、満了の30日前を日付に直して答えました。内容は正しいので、正解に数えています（採点の正規表現に追加）。
- 採点の最初の版は、答えの前後に付く太字記号（`**`）と、`docs/` の有無で、合っている回答を誤りにしていました。両方を直して、保存済みの回答を採点し直しています（`rescore.py`）。
- 「AIが整理」のHaikuの1回（C-q05-3）は、答えが空で終わりました（背景の処理を待って870秒かかった）。無効にせず、不正解として数えています。
- 元の資料を変更・削除した試行は0回でした（`verify_inputs.py`）。作業用の一時フォルダを資料フォルダに作った試行が2回あります。Haikuです。
- 検索の608回で、作業フォルダの外を指すツール呼び出しは0回でした。一方、目録づくりと「AIが整理」の実行では、AIが読み取った文章やスクリプトの置き場として `/tmp` に作業用の一時ファイルを作りました（資料フォルダの中身には影響していません）。整理の実行でAIは旧名→新名の対応表も作りましたが、それも `/tmp` に置かれ、資料フォルダには残りませんでした。依頼文に「対応表を残して」と入れていなかったためです。
- 費用は、Claude Code が出す換算額（API料金の目安）です。実際の請求額ではありません。
- 条件ごとの試行数が少ない（質問ごとに5回）ので、BとCのような小さな差（Haikuの65/65と60/65）は、誤差の範囲かもしれません。
