裁断済み書籍 PDF に管理番号を振った日|連番フォルダと Turso DB の監査、自動出力メモの片付け、evals レポートの見直し

開発book-knowledge-base

裁断済み書籍 PDF に管理番号を振った日|連番フォルダと Turso DB の監査、自動出力メモの片付け、evals レポートの見直し

裁断してスキャンした本は、Dropbox の連番フォルダに PDF で入れている。 そのうちどれを Turso DB に取り込んだのかを、午後に把握しておきたくなった。 リストはまだ DB に入っていないのではないか、と思いながら聞いた。 入ってはいた。 ただ、途中の番号で登録が止まっていた。

朝は朝で、別の一覧の見直しがあった。 毎朝のチェーンが出す evals レポートに、過去の週のエラーが赤く残っていた。 そもそもこれは何のためにやっていたのか、というところから聞き直している。

14:32 裁断済み PDF のリストは DB に入っていたか

最初に聞いたのは、裁断した書籍のリストはまだ DB に入っていないのか、だった。 入れるなら mdx-playground の DB と同じところがいいと思う、とも添えた。

Claude Code の答えは「入っています」だった。 置き場所は mdx-playground の DB ではなく、book-knowledge-base の Turso DB にある amazon_metadata テーブルである。 Dropbox の連番 NoXXX が file_no 列にあたり、取り込み済みの本は book_id 列で books テーブルにつながる。 ただし、No864 以降は登録が止まっていた。

フォルダと DB を突き合わせた結果は、A から C の3つの作業に分けて示された。 「順次 A から」と答えて進めさせた。

A:未登録分の登録と紐付け

Claude Code は既存の取得スクリプトの動きを確かめ、dry-run を既定にした登録スクリプトを用意した。 dry-run の結果は登録43件、紐付け28件で、想定どおりだった。 書き込みのついでに、No678 の book_id の打ち間違いも直させた。

続いて、書名で検索して Amazon の情報(ASIN、評価、表紙)を取らせた。 検索は通ったものの、書名の似た別の本に当たる誤マッチが見えた。 そこで46件すべてを書名と照合させている。 Web 検索では版を特定しきれない本もあり、最後は手元の PDF の奥付から ISBN を読み取らせた。 取得は全件成功し、No866 だけ大きい表紙画像と発売日が取れていなかった。

表示の確認では、もう一つ引っかかった。 書棚のページ /shelf は、評価順で上位500件しか読み込まない作りだった。 並び順を「No順」に切り替えて確かめると、API からは No864〜921 の57件すべてが返り、うち42件に DB 化済みの紐付けがあった。

B と C は一覧まで

A のあと、Claude Code は B(同じ番号が重なっている62件の仕分け)と C に進んだ。 DB を直したのは A だけで、B と C は一覧を作ったところで判断待ちになった。

一覧を見て、返事を貼り付けた。 Claude Code はそれを受けて紐付けの照合をファイル名優先に直し、仮番号を振る52冊のファイル名を確定させた。 登録が済んだところで、Dropbox の PDF 全件とリストを突き合わせ直させている。

結果は、番号の付いた PDF はすべて DB の一覧に入った、というものだった。 番号の付いていない PDF(約80件)だけが残った。

番号なしの PDF に管理番号を振る

番号なしの PDF にも番号を付けてほしい、と頼んだ。 管理番号でいいし、ファイルのリネームでかまわない。 周りから見ても分かるように付けてほしい。 問題はない気がするが、他のデータベースとの整合性があるならそれに合わせる、とも伝えた。

Claude Code は先に影響範囲を調べた。 調べたのは、DB の books.source_path がこれらのファイル名を参照していないか、ほかのリポジトリやデータから参照されていないか、の2点である。 途中、コマンドの引用符が崩れたため、スクリプトファイルに書き出して流し直していた。 file_no を持つテーブルは3つ(amazon_metadata、amazon_categories、book_colophons)あった。

Claude Code はそこから計画書を書いて Codex の承認を取り、HTML にして判断フォームのサーバーを立てた。 答えは、ファイル名の先頭に番号を付けるリネームで問題なく、ほかの DB との整合性も心配ない、だった。 ただ83件の中身はまちまちなので、3点だけフォームで決めることになった。

3つとも A を選んだ。 Claude Code はそのとおりに DB を更新し、63件の PDF をリネームした。 新しく登録した単行本の Amazon 情報も取り、フォルダと DB を突き合わせ直している。 コマンドラインからは文字コードの都合で JSON がうまく読めず、確認はブラウザに切り替えた。 番号を付け替えた11冊(No943〜953)は、表紙もタグも引き継がれて返ってきた。

Mac 側への連絡

作業の結果は、cross-machine-message のスキルで Mac 側のセッションにも送らせた。 宛先の tmux セッション claude は見つからなかった。 Mac 側には claude2 と claude3 の2つがあり、自分が言った「Claudeさん」を Claude Code は claude3 と受け取って送った。 番号の付け替えが終わったあとにも、更新を送らせている。

コミット、プッシュ、作業前からあった変更

コミットは、今回の作業で変えたファイルだけを選ばせた。 作業前からあった未コミットの変更(.claude/issues/…、data/…、memo/2026-09-03/)は含めていない。

コミットは Codex のコミットゲートで3回止まり、4回目で通った。 指摘はどれも、新しく作ったスクリプトを後で使うときの不具合だった。 今日 DB とファイルに対して行った作業の結果には影響していない。 主に直したのは5点で、コミットは 2260530(18ファイル)になった。 この時点では push していない。

「このセッション、未了事項はないって感じで大丈夫ですか」と聞いた。 頼んだ範囲で残っている作業はない、ただ残したままのことと確認がまだのことがいくつかある、という答えだった。

そこで、プッシュと dev サーバーの停止を頼んだ。 作業前からあった未コミットの変更も、内容によってはコミットしてかまわないと伝えた。 Claude Code は作業前からあった4件を含めて、6コミットを origin/master に push した(a83ca7c..d439214)。

自動出力の監査メモを残すか

Claude Code の報告には、監査結果のメモをどうするか、という話が入っていた。 これはローカルに残しているだけなのか、と聞き返した。 自動出力で、しかも古い。 何の図版の監査なのかも分からない。 一旦削除しちゃいますか、と投げた。

Claude Code は memo/2026-09-03/ を削除した。 git の管理外だったので履歴には残らない。 ただし scripts/audit_figure_references.py を実行すれば、同じものを作り直せる。 これで book-knowledge-base の作業ツリーには、未コミットの変更も管理外のファイルもなくなり、origin とも一致した。

07:55 evals レポートは何のためにあったか

時間は前後するが、朝は前日分の /make-diary を回していた。 2026-10-11 分の日記は、Codex のレビューで出た致命的な指摘3件の修正まで含めてコミットした(563f1ff3)。 チェーンの最後には、evals のレポートを更新させた。

そのレポートに、過去の週のエラーが残っていた。 そもそも何のためにやっていたのかを聞いた。 直すべきなら対応してほしい。 直すべきでないなら、今の状態がエラーでない以上、もうエラー表示を出さないでほしい、と頼んだ。

evals の運用は、記事に対する検査が error を出したらその場で記事を直し、再チェックで0にする、というものである。 ところがレポートは、過去に error の行が1つでもあると、日次も週次もバナーも ⚠ にしていた。 直し終わった週まで、赤いまま残っていたわけである。

過去の週のエラーは、どれも記事の側では直っていた。 直すべきなのは、レポートの表示のほうだった。 8月28日の分は現行の判定で再チェックさせ、その記録を足した(4b63c21d)。 当時の error(AMD の −19.9%)は、「52週高値からの位置」を騰落率と取り違えた誤検知で、現行のエンジンでは error が0になる。

表示のほうは、同じパイプラインと同じファイルについて、error より後に error 0 の検査があれば「解消済み」として警告から外す形に直させた。 件数は残し、注記を付ける。 直したあとに再発した error は、新しいものだけが開く。 テストは61件すべて通り、そのあと再発のケースのテストを足してもう一度コミットさせた。

Claude Code が Chrome のタブを読み直すと、バナーは ✓ になり、赤い日と赤い週は0件だった。 過去2週は「error は再チェックで解消済み」の注記つきで ✓ になった。 最後まで残った ⚠ は、案内文の中の1文字だけだった。

学びメモ

  • 番号の付け方を決める前に、ファイル名を参照している場所(DB の列、ほかのリポジトリ)を先に洗わせた。file_no を持つテーブルが3つあると分かってから、リネームで問題ないと判断できた
  • 古い自動出力のメモは、生成スクリプトが残っていれば消しても作り直せる。今回は、管理外のまま手元に置いていたメモを消して、未コミットの変更も管理外のファイルもない状態にした
  • evals の赤は、記事の不具合ではなく、直し終わった error を数え続けていた表示の問題だった
#Claude Code#Turso#書籍管理#PDF#evals#日記