ブログ1記事の修正でAIは何回ファイルを読む?68回のDB照会と丸読み破産の実測録
作成日:

ブログ1記事の修正でAIは何回ファイルを読む?68回のDB照会と丸読み破産の実測録


論旨

人間の感覚からすれば、「公開済みのレビュー記事に、あとから撮影した実測写真を 1 枚追加して数行の解説を足すだけ」 というのは、ほんの 3 分で終わりそうなごく小さな修正作業に見えます。しかし、数百本の記事と厳格な表記ルール・商品辞書・内部リンク網を抱えるブログ環境において、AI エージェントが「過去記事や型番、システム設計と 1 bit も矛盾を起こさずに」その 1 枚の写真を組み込もうとしたとき、裏側では一体何回ファイルが読み書きされているのでしょうか。

今回、サーモス「真空断熱コーヒーサーバー TTF-720」実機レビュー に「朝 8 時頃にドリップしたコーヒーが、約 8 時間半後の 16 時 38 分でも 48.6℃ を維持していた温度実測写真 1 枚」を追記し、その過程で見つかった SQLite 未対応の抜け穴 2 箇所まで改修したセッション(会話 ID 71d216f4)の稼働トランスクリプト(transcript.jsonl)を完全解剖しました。

結論からお伝えすると、このセッション(AI 純稼働 38.1分・Planner 推論 57回)の裏側で、AI エージェントは 合計 124回 のツール呼び出し(うち Pure Rust 製 kb-search による SQLite 照会が延べ 68件) を実行していました。もし SQLite によるミリ秒単位のピンポイント抽出が無く、一般的な AI 開発環境のように毎回ファイルを直接 grep や read_file で丸読みしていた場合、直接参照した管理文書・商品辞書・主要 Rust コードの原寸合計だけでも 約 2,380KB(約 2.3MB)、公開記事 756記事 の横断検索まで含めれば 約 12MB 超 の生テキストがコンテキストへ雪だるま式に流れ込み、深刻な速度低下と利用枠(クォータ)枯渇――すなわち 「見えない I/O 破産」 を引き起こしていたことが判明しました。本記事では、延べ 68 件の DB 照会の全内訳と、その場で塞いだ「最後の 2 つの丸読みの抜け穴(公開 MDX 全文格納+飛び地複数範囲 1 コール抽出:8.90ms)」の実測データをすべて公開します。

合わせて読みたい深まる関連情報
対象となる方
  • 「ちょっとした記事修正やコード変更を頼んだだけなのに、AI の応答がだんだん遅くなり、利用枠(クォータ)が急減する」と悩んでいる方

  • AI エージェントが裏側で 「何回ファイルを読み、何キロバイトのテキストをコンテキストへ積んでいるのか」 を実測ログで知りたい方

  • ルールファイル、商品辞書、プログラムコード、そして 公開記事の Markdown / MDX 全文 までを SQLite に一元化し、ミリ秒単位で飛び地抽出する具体的な設計を知りたい方

写真1枚の追記でAIは裏で何回動いたか

まずは、今回の検証の発端となった「人間側のリクエスト」と、それに対して AI エージェントが裏側で実行した生ログ(transcript.jsonl)の全体像から見ていきましょう。

発端は8時間半後48.6度の温度写真1枚

事の発端は、同日に公開したばかりの サーモス「真空断熱コーヒーサーバー TTF-720」実機レビュー に対する、とてもシンプルな追記作業でした。

朝の 8 時頃 に約 85℃ 前後のお湯でペーパーフィルターをリンスした際、うっかりそのお湯を捨て忘れたままサーモス TTF-720 の口元近く(約 750cc 満杯)までドリップし、日中に半分ほど飲んでフタを閉め室温に置いておいたところ、約 8 時間半が経過した夕方の 16 時 38 分 に防水デジタル温度計(タニタ TT-508N)のセンサー棒を差し込んで測っても、しっかり温かい 48.6℃ をキープしていました。「スマートフォンで撮影したこの温度実測写真 1 枚を WebP に変換して、記事の保温検証セクションへ追記しよう」というのが、最初のオーダーです。

質問するおじさん

写真を 1 枚 WebP に変換して、記事の途中に数行の文章と一緒に差し込むだけですよね。人間が手作業でやるなら、エディタで記事を開いてコピペして 3 分から 5 分くらいで終わりそうな作業に見えますが……。

解説ナビゲーター

ところが、AI エージェントは人間のように「さっき自分が書いた記事だから、何行目に何があるかだいたい覚えている」というわけにはいきません。既存の文脈や型番、アフィリエイト ID、前後の見出し文字数上限と 1 ミリも矛盾しないよう、徹底的な裏付け(エビデンス)照会を裏側で走らせるんです!

ちなみに、この保温テストで「8 時間半後でも 48.6℃・金属臭ゼロ」という実力を発揮した内面セラミック加工の『サーモス 真空断熱コーヒーサーバー TTF-720』と、0.5 秒間隔で液温を正確に測れる防水温度計『タニタ デジタル温度計 TT-508N』は、毎日のコーヒー環境を劇的に快適にしてくれる名コンビです。

サーモス (THERMOS) 真空断熱コーヒーサーバー 0.72L TTF-720(ブラック BK / カフェラテ CL・内面セラミック加工)

サーモス (THERMOS) 真空断熱コーヒーサーバー 0.72L TTF-720(ブラック BK / カフェラテ CL・内面セラミック加工)

タニタ (TANITA) デジタル温度計 TT-508N 防水(IPX7丸洗い対応・0.5秒高速更新スティック温度計)

タニタ (TANITA) デジタル温度計 TT-508N 防水(IPX7丸洗い対応・0.5秒高速更新スティック温度計)

稼働ログが暴いた124回のツール呼び出し

では、この「温度写真 1 枚の追記」と、その作業中に画面の読み込み表示(Analyzed)から発覚した「SQLite 未対応だった 2 つの抜け穴の改修」を終えるまでに、AI エージェントは一体どれだけ動いていたのでしょうか。

Pure Rust 製のログ解析コマンド(./scripts/run_kb_search.sh brain 71d216f4)を使って、セッション全体の稼働トランスクリプト(transcript.jsonl)を集計した一次実測データがこちらです。

📊 セッション 71d216f4(温度写真追記+SQLite抜け穴2点改修)の実測稼働データ
  • セッション所要時間と推論ステップ : 壁時計 40.8分(AI 純稼働時間 38.1分) / ユーザー入力 6ターン / Planner 推論ステップ 57回

  • ツール呼び出し総数(計 124回)の内訳 :

    1. kb-search(SQLite 知識ベース照会・検索・カルテ生成) : 延べ 68件(全体の約 55%)
    2. gemini-gate(4ms 機械検問・EXIF 解析・WebP 画像変換) : 9回
    3. read_file(ファイル・画像の直接読み込み) : 9回(うち実機写真・回転確認画像の目視チェックが 5回、初期ルール・記事読込等が 4回)
    4. edit_file / ビルド・本番転送・Playwright 検証等 : 残り 38回
  • API トークン消費量とキャッシュ効率(実測) :

    • 新規入力(Fresh Input) : 832,264 トークン
    • キャッシュ読込(Cached Input) : 6,891,184 トークン(キャッシュヒット率 89.2%)
    • AI 出力(Output) : 51,246 トークン
ノルウェージャンフォレストキャット

たった 6 回の会話ターンの裏で、AI は 57 回も思考を回し、合計 124 回もツールを叩いていた のかニャ!しかもそのうち 延べ 68 件が SQLite データベースへの照会 だったなんて、外からチャット画面を見ているだけでは絶対に気づかない運動量だニャ。

注目すべきは、124 回のツール呼び出しのうち、生の read_file がわずか 9 回(しかも半分以上の 5 回は、写真の上下向きや 48.6℃ の液晶表示を確認するための画像目視)に抑え込まれ、テキスト情報の取得のほぼすべてが延べ 68 件の SQLite 照会で処理されていた という事実です。

なぜ1記事の修正で68回もDBを引くのか

「なぜ記事を 1 本直してシステムを少し整えるだけで、68 回もデータベースを引く必要があるのか?」と不思議に思われるかもしれません。

しかし、公開記事総数 756記事(うち実機レビュー等の検証録 358記事)、ルール・設計書合算 1,347行 を超える当ラボの規模になると、1 箇所の修正が他の記事やシステムと矛盾しないかを確かめるために、以下の 5 つのレイヤー で膨大な照合が必要になります。

過去記事と型番と商品辞書の整合性照合

第 1 の理由は、「過去の関連記事で書いた製品スペックや型番、アフィリエイト ID との完全一致確認」 です。

たとえば「タニタの温度計で 48.6℃ を測った」と数行追記するだけでも、AI エージェントは以下の事実確認を裏側で実行します。

🔍 写真1枚の追記時に裏で走る「過去記事・商品辞書」の照合プロセス
  1. 過去記事での記述・型番の裏取り : 追記対象である サーモス「真空断熱コーヒーサーバー TTF-720」実機レビュー をはじめ、過去に同じ温度計(TT-508N)が登場したコーヒー検証記事群で、センサーの更新間隔(0.5 秒)や防水規格(IPX7)をどう記述していたかを横断検索します。もし全 756記事 の生 MDX ファイル(合計 約 10MB 超)を直接全文走査すれば巨大な負荷になりますが、SQLite FTS5 Extension 公式ドキュメント に基づく全文検索テーブルを使えば、実測 6.93〜7.73ms で該当する数行(約 3〜4KB)だけを抽出できます。

  2. アフィリエイト商品辞書(257商品)の ID 照合 : 記事内で <AffiliateCard> を呼び出す際、既存の TypeScript 定義ファイル群(全 257 本・合計 1,351.4KB)の中に tanita-thermometer-tt508n や thermos-coffee-server-ttf720 がすでに登録されているか、表記揺れや重複が無いかを確認します。これもファイルを grep するのではなく、SQLite の affiliates テーブルを引くことで実測 1.60〜3.41ms・わずか 約 0.8KB の出力で即座に確定します。

投稿ルールと逆リンク枠のミリ秒算出

第 2 の理由は、「執筆ルール(目次文字数・太字記法・画像配置)の確認と、関連記事との双方向リンク枠の計算」 です。

当ラボでは、目次の 2 行折り返しを防ぐ「H2 は 30 文字以内・H3 は 28 文字以内」といった書式規定や、孤立記事を作らないための双方向リンク規定を厳格に定めています。

📐 仕様書確認と編集前カルテ(prep edit)の実測スピード
  • フル仕様書・投稿ルールのピンポイント抽出 : フル仕様書 docs/GEMINI_MANUAL.md(1,051行・436.6KB)とレビュー記事規定 REVIEW_POST_RULES.md(233行・46.2KB)を丸読みすれば約 483KB になりますが、SQLite の manual サブコマンドなら実測 2.89〜18.54ms で必要な 1 節(約 3KB)だけを取り出せます。

  • 対象記事の構造&逆リンク空き枠の一括カルテ生成(prep edit) : 編集対象の thermos-ttf720 記事(追記前 359行 → 追記後 392行・10,306字)の見出し構造、物理行番号マップ、さらに強関連 6 記事の「合わせて読みたい枠」の現在の本数と挿入可能な行番号を、./scripts/run_kb_search.sh prep edit の 1 コール(実測 183.95ms)で一括算出しています。

  • Pure Rust システムコード(55本・計3,522.7KB)の関数行範囲抽出 : 後半の抜け穴改修で触った主要 Rust ファイル4本――db_sync.rs(4,571行・168.0KB)、workflow_prep.rs(4,302行・160.1KB)、doc_nav.rs(4,136行・152.8KB)、mdx_dissect.rs(2,015行・71.2KB)――も、ファイルを丸ごと read_file せず、SQLite の tree <file> L開始-L終了 --full を使うことで実測 3.31〜5.14ms で指定の 50〜100 行(約 2〜4KB)だけを取得しました。

丸読み約2.3MBとSQLite抽出の比較

ここで、もし SQLite(kb-search)が存在せず、一般的な AI エディタの標準動作のように「対象ファイルをその都度 read_file や全文 grep で読み込んでいた場合」と、今回の「SQLite ピンポイント抽出」で、データ量がどれだけ違うか を実測値で比較してみましょう。

ファイル原寸丸読み時 vs SQLite抽出時のデータサイズ比較(KB)
1記事の修正+システム改修で参照した5大リソースの原寸合計(約2,380KB)との対比
※桁差視認用・平方根スケール
① アフィリエイト商品辞書(原寸257本)TypeScript定義ファイルを直接探索・読込した場合
1,351.4 KB(原寸合計)丸読みの罠
① アフィリエイト商品辞書(SQLite抽出)kb-search affiliate(実測 1.60〜3.41ms)
約 0.8 KB(99.9%削減)1.60ms
② 主要Rustコード4本(原寸計15,024行)db_sync / workflow_prep / doc_nav / mdx_dissect の4ファイル合計
552.1 KB(4本原寸)
② 主要Rustコード(SQLite行範囲抽出)kb-search tree L開始-L終了 --full(実測 3.31〜5.14ms)
約 2〜4 KB / 回(99.4%削減)3.31ms
③ 執筆仕様書2冊(GEMINI_MANUAL+REVIEW規定)1,051行(436.6KB)+ 233行(46.2KB)を直接読んだ場合
482.8 KB(2冊原寸)
③ 執筆仕様書(SQLite 1節抽出)kb-search manual(実測 2.89〜18.54ms)
約 3.0 KB / 回(99.3%削減)2.89ms
※公開記事全756記事の横断検索(生MDX原寸合計:約10,000KB超 → SQLite抽出:約3〜4KB / 6.93ms)を含めると、原寸合計は約12MB超に達します

さらに、5 つの参照カテゴリーすべての「原寸ファイル容量」と「SQLite 抽出時の実測サイズ・応答速度」を一覧表にまとめると、その圧縮率は圧倒的です。

照会カテゴリー 従来のファイル直接参照(原寸サイズ) SQLite(kb-search)抽出時のサイズ SQLite 実測応答時間 削減率・効果
① 過去記事・型番の横断検索 公開 756記事 生 MDX 合計:約 10,000KB(10MB)超 該当セクション数行:約 3〜4KB 6.93〜7.73ms 99.9% 削減(全文走査ゼロ)
② アフィリエイト商品辞書 TS 定義 257 本合計:1,351.4KB 該当 1〜3 商品のみ:約 0.8KB 1.60〜3.41ms 99.9% 削減(型番・ID 即時確定)
③ 執筆ルール・フル仕様書 GEMINI_MANUAL(436.6KB)+ REVIEW(46.2KB)= 482.8KB 該当 1 章節のみ:約 3.0KB 2.89〜18.54ms 99.3% 削減(2 往復の read_file 消滅)
④ 編集対象記事+強関連6本カルテ 対象記事+関連 6 記事を個別 read_file:約 180KB prep edit 構造化カルテ:約 4.5KB 183.95ms 約 97% 削減(7 ファイル読込を 1 コール化)
⑤ 主要Rustコード4本の確認 主要 4 本合計:15,024行・552.1KB(全 55 本では 3,522.7KB) 指定 50〜100 行のみ:約 2〜4KB 3.31〜5.14ms 99.4% 削減(4,000 行超の丸読み遮断)
直接関わった管理文書・商品辞書・主要 Rust ファイル 4 本の原寸を足し合わせるだけでも 約 2,380KB(約 2.3MB)、公開記事全体の横断検索を含めれば 約 12MB 超 になります。SQLite のインデックス設計(The SQLite Query Planner 公式ドキュメント が解説する B-Tree 索引および FTS5 転置インデックス)を介することで、AI は毎回 わずか 0.8〜4KB・数ミリ秒 の軽量レスポンスだけで 68 回の裏取りを完遂していたのです。

画面の読込表示から発覚した2つの抜け穴

ところが、この温度写真の追記作業を進めている最中、チャット画面のツール実行ログに Analyzed .../review_post_rules.md および Analyzed .../thermos-ttf720.../index.mdx という、本来なら出るはずのない「直接ファイル読み込み(read_file)の表示」が 2 回現れました。

質問するおじさん

あれっ?仕様書もコードも全部 SQLite に入っているはずなのに、どうして AI はわざわざファイルを直接 read_file して Analyzed を出したのですか?

解説ナビゲーター

そこが今回の検証で一番面白い発見でした!「ほぼ完璧に SQLite 化したつもり」だったシステムの中に、まだ 2 つだけ見落とされていた『丸読みの抜け穴』 が残っていたんです。その場で原因を特定し、即座にプログラムを改修して塞ぎました!

条件付きルールが毎回13.1KBを読む罠

1 つ目の抜け穴は、AI エディタのルール設定フォルダ(.agents/rules/)に残っていた review_post_rules.md(13.1KB) という条件付きルールファイルでした。

このファイルにはフロントマターで trigger: model_decision(AI がレビュー記事に関係すると判断した時に読み込む設定)が指定されていました。その結果、せっかく SQLite 側に REVIEW_POST_RULES.md の全章節が入っているにもかかわらず、システムプロンプト側が「レビュー記事を触るなら、まずこの 13.1KB のファイルを read_file せよ」と毎回強制的に誘導していた のです。

🛠️ 抜け穴①の解決:条件付きルールファイルの全廃とSQLite一本化
  • 問題の本質 : trigger: model_decision の別ファイルが存在すると、AI は律儀にそのファイル全体を read_file で読み込み、毎セッション 13.1KB の固定コンテキスト枠を消費してしまいます。

  • 実装した恒久対策 : .agents/rules/review_post_rules.md を物理削除して廃止し、常時読み込まれるコア憲法(GEMINI.md)には わずか 2 行の要点 だけを残しました。そして詳細が必要な時だけ、SQLite の ./scripts/run_kb_search.sh manual "<節番号|語句>" から数ミリ秒で該当節を引く設計へ完全一本化しました。

公開MDXの全文格納と複数範囲1コール抽出

そして 2 つ目の、さらに重大な抜け穴が 「公開記事(index.mdx)の import 行の欠落と、飛び地行範囲の取得」 でした。

これまで当ラボの SQLite(kb-search)では、Rust や TypeScript などの「システムコード」については全文を DB に格納し、tree <file> L10-L50 --full で任意の行範囲を取り出せるようになっていました。しかし、肝心の 公開ブログ記事(src/content/blog/**/*.mdx)については、見出し構造(article_sections)しか DB に保存しておらず、MDX の生テキスト全文(特にフロントマター直下の import 文が並ぶ行)を SQLite から直接見る手段が無かった のです。

そのため、AI エージェントは「新しい画像 import を何行目に追加すべきか」と「本文後半の保温検証セクション(280 行目付近)がどう書かれているか」を確認するために、結局 index.mdx を直接 read_file していました。しかも、もし行範囲抽出ができたとしても、「冒頭の L40-L55(import 群)」と「後半の L278-L320(追記箇所)」を別々に呼べば、SQLite を 2 回叩く(2 往復する)無駄 が発生します。

そこで、その場で Pure Rust 製の kb-search(db_sync.rs および doc_nav.rs)を改修し、以下の新機能を実装しました。

🚀 抜け穴②の解決:スキーマ4.4(raw_mdx格納)+カンマ区切り飛び地1コール抽出
  1. SQLite スキーマ 4.4 で articles.raw_mdx カラムを新設 : 全 756記事 の公開 MDX ファイルの生テキスト全文を articles.raw_mdx に格納し、import 文の行番号一覧も kb-search tree <slug> imports で即座に引けるようにしました。

  2. カンマ区切りの飛び地行範囲(L40-L55,L278-L320)の 1 コール同時抽出 : ./scripts/run_kb_search.sh tree thermos-ttf720 L40-L55,L278-L320 のように、離れた複数の行範囲をカンマ(,)で繋いで指定すると、1 回のツール呼び出しで両方の行範囲を同時に抽出する機能 を実装しました。

  3. 実測わずか 8.90ms で edit_file の Target 文字列が完全確定 : 実際にこのコマンドを実行したところ、392 行の記事から「冒頭の import 行群」と「後半の保温テスト記述」の 2 箇所(計 58 行分)が 実測 8.90ms・1 ツールコール で出力され、index.mdx を 1 度も read_file せずに edit_file へ直行できるようになりました。

この「飛び地複数範囲の 1 コール抽出」がどのように往復回数を削り落とすのか、処理フローを図解すると次のようになります。

公開MDXの飛び地複数範囲(import行+本文追記箇所)1コール抽出フロー
STEP 1
編集カルテで構造把握

prep edit を呼び出し、記事全体の見出し行番号マップと関連リンク空き枠を 1 回で取得する。

STEP 2
飛び地範囲を1コール抽出

tree <slug> L40-L55,L278-L320 で、冒頭 import と後半本文を SQLite から同時抽出。

STEP 3
read_fileゼロで即編集

取得した正確な行テキストをそのまま edit_file の Target に渡し、最小トークンで修正完了。

離れた複数箇所の確認をカンマ区切り指定で1コール(8.90ms)に統合し、ファイルの直接read_fileと複数往復を同時にゼロ化

このように、AI の挙動ログ(Analyzed の有無や transcript.jsonl)を観察し、無駄なファイル読み込みを見つけたら即座に Rust で CLI 側を改修するサイクルこそが、自律開発の精度と速度を支える心臓部です。Pure Rust による高速 CLI ツールや SQLite 連携の実装を深く学びたい方には、以下の解説書が非常に参考になります。

オライリー・ジャパン『プログラミングRust 第2版』

オライリー・ジャパン『プログラミングRust 第2版』

見えないファイル丸読み破産を防ぐ経済合理性

ここまで見てきた「延べ 68 件の SQLite 照会」と「2 つの抜け穴潰し」は、単なるマニアックな高速化チューニングではありません。AI エージェントを実務で毎日使い倒す上での 「時間とコストの経済合理性」 に直結しています。

二乗で膨らむ文脈とキャッシュ89.2%の威力

大規模言語モデル(LLM)を使ったエージェント開発には、初心者が必ずと言っていいほど陥る罠があります。それが 「1 回のファイル丸読みは数千〜数万トークンでも、ステップが進むと O(N2)O(N^2)(ステップ数の二乗)で総通信量が膨れ上がる」 という構造です。

今回のセッションでは、Planner(AI の頭脳)が 57 回 推論を回しました。もし最初の 10 ステップで管理文書や商品辞書、Rust コードを計 2.3MB(約 60 万〜80 万トークン相当)丸読みしてコンテキストに載せてしまったらどうなるでしょうか。残りの 47 ステップすべてにおいて、毎回その巨大な過去ログが API へ再送信され続け、1 セッションだけで数千万トークンを浪費してしまいます。

1記事修正+小改修(57推論ステップ)におけるコンテキスト推移の比較
ファイル丸読み vs SQLite直結
2.3MB超が蓄積・破産
一般的なファイル直接丸読み運用
  • 毎回のファイル丸読みが文脈に残留 :仕様書(482KB)や商品辞書(1.35MB)、コード(552KB)を直接読むたびコンテキストが肥大化

  • 57 ステップの再送で二乗膨張 :膨らんだ履歴が毎ターン再送信され、後半ほど AI の応答待ち時間が長くなり注意力も散漫化

  • 利用枠(クォータ)の早期枯渇 :「写真を 1 枚足しただけなのに 5 時間制限の半分が溶けた」という見えない I/O 破産が発生

キャッシュ率89.2%
当ラボのSQLiteミリ秒抽出運用
  • 68 回照会しても1回あたり0.8〜4KB :必要な数行だけを SQLite から数ミリ秒で抜き出すため、57 ステップ進んでも履歴が極めてスリム

  • コンテキストキャッシュ 89.2% ヒット :不変のシステム指示とスリムな履歴により、6,891,184 トークンが高速キャッシュ読込で処理

  • 新規入力はわずか 83.2 万トークン :38 分間・124 ツールコールをフル稼働させても、新規入力トークンを最小限に抑制

初期ステップでの余分なファイル読込は、以降の全推論ステップに雪だるま式(二乗)で重くのしかかる

実際に、Context caching | Gemini API | Google AI for Developers の仕組みが最大限に機能した結果、今回のセッションでは総入力約 772 万トークンのうち 89.2%(6,891,184 トークン)がキャッシュヒット し、新規入力(Fresh Input)は 832,264 トークン に収まりました。余計な生ファイルをコンテキストに混ぜないことが、結果としてキャッシュ効率と応答速度を劇的に高めるのです。

待ち時間と手戻りを消す上位プランの投資対効果

さらに、この「SQLite によるミリ秒抽出」を Google AI Ultra(20x / 5x) のような大容量プランと組み合わせると、開発者にとって最大の資産である「自分の時間」を圧倒的に節約できます。

質問するおじさん

たしかに、ファイルを毎回丸読みさせて 1 ステップごとに 15 秒も 20 秒も待たされたあげく、コンテキストが溢れて型番ミスやリンク切れの手戻りが起きたら、人間の待ち時間とストレスがとんでもないことになりますね……。

解説ナビゲーター

そうなんです!仮に人間の作業時間を控えめに時給 3,000 円〜5,000 円と置いた場合(推論)、AI のファイル丸読みによる待ち時間や、過去記事との整合性ズレを手作業で直す手戻りが 1 日 30 分発生するだけで、月間 15 時間(約 45,000 円〜75,000 円相当)の損失になります。ローカルの SQLite 整備は API 代をケチるためではなく、「最上位モデルに一切の迷いも待ち時間も無く、一発で完璧な仕事をさせるため」 の投資なんです!

推論ですが、Google AI Ultra(20x:月額 36,000 円前後、または 5x:月額 14,500 円前後)を契約して 24 時間いつでも最上位モデル(Gemini 4 Carbon や Argon)を動かせる枠を確保した上で、ローカル側を Pure Rust と SQLite でミリ秒レスポンスに鍛え上げれば、「1 記事の写真追記で裏側 68 回の DB 照会とシステム改修までを自動完遂しても、利用枠の心配ゼロ・手戻りゼロで次の作業へ即座に進める」 という最高の開発体験が手に入ります。

まとめ:自環境へミリ秒抽出を導入する手順

今回の「温度実測写真 1 枚の追記セッション(会話 ID 71d216f4)」のトランスクリプト解剖と、その場で実装した SQLite 改修の要点を振り返ります。

📝 本記事のまとめ(1記事修正の裏側とSQLiteミリ秒抽出の要点)
  • 写真1枚の追記の裏で124ツールコール・68回のDB照会 : 過去記事の型番裏取り、257 商品のアフィリエイト辞書照合、1,051 行の仕様書確認、逆リンク枠の算出、システムコード確認など、1 bit の矛盾も防ぐために AI は裏側で 延べ 68件 の SQLite 照会 を行っていました。

  • 丸読み換算約2.3MB(全記事含め約12MB超)を数KBへ圧縮 : 直接関わった管理文書・辞書・主要 Rust コードだけでも原寸合計は 約 2,380KB(約 2.3MB) に達しますが、SQLite 抽出により 1 回あたり 約 0.8〜4KB・実測 1.60〜18.54ms へ 99% 以上圧縮し、キャッシュヒット率 89.2% を達成しました。

  • 最後の2つの抜け穴(条件付きルール&MDX複数範囲抽出)を完全解消 : 毎回 13.1KB の read_file を誘発していた条件付きルールファイルを廃止して SQLite manual へ一本化し、さらに公開記事全文(articles.raw_mdx)の格納と L40-L55,L278-L320 のようなカンマ区切り飛び地行範囲の 1 コール抽出(実測 8.90ms) を実装しました。

最後に、読者の皆さまがご自身のブログ運営・ソフトウェア開発環境(Antigravity / VS Code / Claude Code 等)へ、本記事で解説した「公開記事・コード・辞書の SQLite 全文格納+カンマ区切り複数行範囲の 1 コール抽出」を導入するための コピペ用プロンプト をご用意しました。

※既存の検索スクリプトや DB スキーマを壊さず、ご自身の環境に最適な形で一発構築させるため、必ず『Gemini 4 Argon』や『Gemini 4 Carbon』等の最上位推論モデルを選択した上で、以下のプロンプトを貼り付けて実行してください。

📋 コピペ用:最上位AIに本記事を読ませて「飛び地1コール抽出DB」を構築させるプロンプト
あなたは私の熟練した開発パートナーです。
まず以下の実機検証記事URLを読み込み、そこで解説されている「AIエージェントの見えないI/O破産(ファイル丸読み)の防止」と「SQLiteによるミリ秒単位のピンポイント抽出&カンマ区切り複数行範囲の1コール抽出」の設計思想を完全に理解してください。

【参照記事】
https://lab.chihouzakki.com/blog/review/ai-blog-single-edit-hidden-file-io-sqlite-anatomy/

【あなたに実行してほしい手順】
1. いきなりコードを書き換えたりファイルを生成したりせず、まず当プロジェクトの現在のディレクトリ構成、記事やドキュメントの形式(Markdown / MDX / コード等)、ルール設定ファイル(.agents/rules や CLAUDE.md / GEMINI.md 等)、および既存の検索スクリプトやDBの有無を事前調査してください。
2. 調査結果に基づき、以下の3点を当プロジェクトの環境に合わせて導入するための「具体的な実装計画(Implementation Plan)」を日本語で提示し、私の合意を得てください:
   - 毎回不要な read_file(Analyzed)を誘発する条件付きルールや巨大ファイルの丸読み箇所の特定とスリム化
   - 仕様書・商品/設定辞書・ソースコード・記事本文(raw_mdx等)をSQLiteへ同期し、数ミリ秒で検索できる仕組み
   - 1つのファイル内の離れた複数箇所(例:冒頭のimport群と後半の編集対象セクション)を「L40-L55,L278-L320」のようなカンマ区切り指定によって1ツールコールで同時抽出できるCLI機能の実装
3. 私の承認後、バックアップを取りながら安全に実装と動作テストを行ってください。

「ちょっとした修正なのに AI の動きが重い・枠が減る」と感じたときは、ぜひ AI が裏側でどんなファイルを何回読んでいるのかを覗いてみてください。小さな丸読みの抜け穴を 1 つ塞ぐたびに、相棒である AI エージェントは驚くほど軽快に、そして正確に動いてくれるようになります!

ぐっすり眠る猫