Claude Codeのスラッシュコマンド + 画像認識でスキャンしたPDFを自動リネームする
結論
裁断した本をスキャンしてPDF化した後のリネーム作業は、Claude Codeのスラッシュコマンド /rename-pdf で自動化できる。pymupdfでPDFのページを画像として抽出し、Claudeの画像認識でタイトルを判断する方式が最も精度が高い。サブエージェント並列処理により、PDF数に関わらず約1-2分で完了する。
/rename-pdf C:\Fi7260読み取り
背景・課題
裁断した本をスキャンしてPDF化した後、手動でタイトルを付けるのが面倒だった。
- PDFを開いてタイトルをコピー&ペーストするだけの作業
- Acrobatが重くて時間がかかる
- 1ファイルずつ処理するのが億劫
試行錯誤の経緯
1. 最初のアプローチ:Pythonスクリプト + ディレクトリ監視
watchdog でディレクトリを監視し、新しいPDFが入った瞬間に自動リネームするスクリプトを最初に検討した。
# 常駐型スクリプト
from watchdog.observers import Observer
# PDFが入ったら検知 → タイトル抽出 → リネーム
問題点:
- 常駐プロセスが必要
- タイトル抽出がヒューリスティック(最初の意味のある行を採用)
- 「新版」「改訂版」などがタイトルになる誤認識
2. 都度実行型に変更
常駐型をやめて、batファイルにドラッグ&ドロップで実行する方式に変更。
@echo off
cd /d "%~dp0"
uv run rename_pdf.py %*
uv run を使うことで環境を汚さずに実行できる。
3. スラッシュコマンドへの移行
Pythonのヒューリスティック判定に限界を感じ、Claude Codeのスラッシュコマンドに移行。
作成したコマンド:
- プロジェクトレベル:
.claude/commands/rename-pdf.md(並列処理版)
4. テキスト抽出から画像認識への移行
最初はpymupdfでテキスト抽出を試したが、スキャンPDFはOCR処理されていないためテキストが取得できない場合が多かった。
解決策: PDFページを画像として抽出し、Claudeの画像認識でタイトルを判断
import fitz
doc = fitz.open('スキャンPDF.pdf')
page = doc[0]
pix = page.get_pixmap(dpi=150)
pix.save('/tmp/page1.png')
画像認識により、OCR処理されていないスキャンPDFでも正確にタイトルを抽出できるようになった。
5. 分冊スキャン対応
スキャナーの性質上、300ページの本を150ページずつ分割してスキャンすることがある。
- 前半PDF: 1ページ目(表紙)にタイトルがある
- 後半PDF: 1ページ目は本文の途中、タイトルがない
→ 最後のページ(奥付)にタイトルが記載されているので、表紙にタイトルがなければ奥付を確認するようにした。
6. サブエージェント並列処理
複数PDFを高速に処理するため、サブエージェントを並列起動する方式を採用。各サブエージェントはhaiku modelで起動し、タイトル取得のみを担当。リネーム処理はメインエージェントが一括で行う。
Running 27 Task agents...
├─ Rename Color0067.pdf · 0 tool uses
│ └─ Initializing...
├─ Rename Color0068.pdf · 0 tool uses
│ └─ Initializing...
...
ポイント:
- サブエージェントはタイトル取得のみ、リネームは行わない
- プロジェクト固有コマンド(
.claude/commands/)として定義し、許可設定を適用
7. ナンバリング管理
蔵書管理のため、リネーム時にファイル名の先頭に No{番号}_ を付与する仕組みを追加。次回の開始番号はコマンドファイル内で管理し、処理完了後に自動更新される。
Doc0283.pdf → No855_プログラミング入門.pdf
Doc0284.pdf → No856_データベース設計の基礎.pdf
最終的な解決策
スラッシュコマンド /rename-pdf
# PDF タイトルリネームコマンド
## ナンバリング管理
次回の開始番号: No855_
## 手順(サブエージェント並列処理版)
### Step 1: 対象PDFの収集
- ディレクトリなら中の.pdfを全て対象に
- `renamed_` や `No[0-9]+_` で始まるファイルはスキップ
### Step 2: サブエージェントでタイトル取得(並列実行)
- pymupdfで最初と最後のページを画像抽出
- Claudeの画像認識でタイトルを判断
- 書籍以外(契約書、名簿など)はスキップ
### Step 3: メインエージェントで一括リネーム
- 連番を付けてリネーム
- バックアップ作成
### Step 4: 結果報告
使い方
# 単一ファイル
/rename-pdf C:\Fi7260読み取り\Doc0283.pdf
# ディレクトリ(中のPDF全部)
/rename-pdf C:\Fi7260読み取り
結果報告形式
## 結果報告
### 成功(リネーム完了): 15件
| 元ファイル | 新ファイル名 |
|-----------|-------------|
| Doc0283.pdf | No855_プログラミング入門.pdf |
| Doc0284.pdf | No856_データベース設計の基礎.pdf |
### スキップ(書籍ではない): 3件
- Color0067.pdf: 賃貸借契約書
- Color0068.pdf: 名簿
### 失敗: 1件
- Doc0285.pdf: タイトル抽出失敗
まとめ
- 当初はPythonスクリプトでテキスト抽出を試みたが、スキャンPDFには不向きだった
- pymupdfで画像抽出し、Claudeの画像認識でタイトルを判断する方式が最も精度が高い
- サブエージェント並列処理(haiku model)により、PDF数に関わらず約1-2分で完了
- ナンバリング管理により蔵書の整理も容易に