「GTDストレスフリーの仕事術」で検索してヒットした。しかし中身を開くと、タイトルとタグのみ。本文はない。
前の記事でENEX+yarleでEvernoteのテキストノートをGrepできるようにしたが、スキャンして保存していたPDFには本文テキストが存在しなかった。yarleはEvernoteのテキストをMarkdown化するツールで、画像からテキストを起こすOCR機能は持っていない。
「このPDF群にもOCRをかけられないか」——その答えが、意外なところにあった。
.resources/ に眠っていた34件
yarle変換後のフォルダを見ると、.resources/ というサブディレクトリにPDFファイルが格納されていた。自炊ノートブックに23件、クルマノートブックに14件(重複bundle2件スキップ)、合計34件のPDFがGrepの届かない場所に眠っていた。
中身を見ると、こんなファイルが入っていた。
- 自炊本: 「ひとつ上のGTD」「ようこそ断捨離へ」「ライフハッカー日本版」「リファクタリング・ウェットウェア」など
- フォレスター取扱説明書・アイサイト説明書・車検証・注文書
- ETCマイレージ領収書 6件(2014年)
- VWバス検討資料
ETCの領収書まで保存していたのか、という驚きはあった。ライフログブームの2012〜2013年ごろ、「なんでも記録しよう」と思っていた時期の産物だ。
Google Drive MCPをOCRエンジンとして使う
「PDFにOCRかけられるの?」と聞いたら、Claude Codeが「Google Drive MCPの convertPdfToGoogleDoc を使えばOCRできる」と提案してきた。
Google Driveにアップロードしてドキュメント変換すると、その過程でGoogleのOCRエンジンが走る。Google DriveはPDFをGoogleドキュメントに変換する際にOCRを行う機能を公式に提供しており、これをローカルのテキスト取得に活用する。ファイル管理ツールとして使うのではなく、OCRエンジンとして使う発想だ。
実際のフローは4ステップだった。
-
uploadFile— ローカルのPDFをGoogle Driveにアップロード -
convertPdfToGoogleDoc— Google ドキュメントに変換(ここでOCRが走る) -
downloadFile(exportMimeType: text/plain)— テキストとしてローカルに保存(*_ocr.txt) -
deleteItem— Google DriveのPDF・Docを両方ゴミ箱へ
アップロードして削除するフローは一見手間に見えるが、未処理PDFを検出するスクリプト(ocr-list-unprocessed.sh)と処理ログ記録スクリプト(ocr-post-process.sh)をClaude Codeに作ってもらい、34件を一気に処理した。スクリプト化してしまえば、追加PDFが出てきても同じフローで回せる。
処理結果——正直な整理
うまくいったケース
サイズの大きいOCRファイルを見ると、数十KB〜170KB超のテキストが取れていた。日本語スキャンPDFに対してGoogleのOCRが実用的に機能している。
「ETC マイレージ」で検索したら、2014年の領収書6件がヒットした。金額・日付・ETCカード番号まで全部テキストで出てくる。10年前の日常ドキュメントが突然検索可能になる体験は、技術記事の文脈を超えた驚きがあった。
失敗したケース
実測で確認した最小のファイルはこうなっていた。
-
LESS_IS_MORE_〜_ocr.txt: 321バイト(実測) -
ライフハッカー_日本版_ocr.txt: 404バイト(実測)
テキストを開いてみると、タイトルらしき断片が数行あるだけで本文はほぼ空だった。スキャン品質が低いPDFはGoogleのOCRでも限界がある。2冊は引き続き「検索できない本」のままだ。失敗ケースがどのくらい出るかは元のPDFの品質次第で、今回の34件では2件が実質空になった。
制約を正直に書く
「Grepしたら、PDFはリンクされて開けるのか?」と確認した。
結論から言うと、OCRテキストにPDFへのリンクはない。ただし *_ocr.txt と .resources/*.pdf のファイル名が対応しているので、Grepでヒットしたあと手動でたどれる。ファイル名から元PDFを探して、PDFリーダーで開いて内容を確認する、という流れになる。
ページ番号もわからない。Google DriveがエクスポートするPlainテキストにはページ区切り情報がなく(python3で実測確認済み)、ヒットしたキーワードが元PDFの何ページにあるかを直接知る方法がない。PDFを開いてCtrl+Fで再検索するしかない。
「完全な全文検索」ではなく「どのPDFに含まれているかわかる」レベルの話だ。それでも「34件中どれかにある」と絞れるのと、全くわからないのとでは大違いだった。
まとめ: ENEX+yarle+Google Drive OCRで「アーカイブの完全検索体制」
前の記事で構築したENEX+yarle+Grepの体制に、Google Drive OCRを足した形になった。
| 対象 | 手段 | 状態 |
|---|---|---|
| テキストノート | ENEX+yarle+Grep | 全文検索可能 |
| スキャンPDF | Google Drive OCR+Grep | 大半は全文検索可能(スキャン品質次第) |
Claude Codeに「Google Drive MCPを使ってOCRして」と日本語で指示した。スクリプトの作成も含めて、私がやったのは指示と確認だけだ。
「2014年のETCマイレージ領収書」がGrepでヒットしたとき、これはもう過去のアーカイブではなくなったと思った。眠っていたファイルを掘り起こして、現在の検索環境に繋げることができた。
参考書籍・関連リンク
Claude Codeをもっと活用したい方に。
Claude CodeによるAI駆動開発入門(平川 知秀)
実践Claude Code入門――現場で活用するためのAIコーディングの思考法(西見 公宏・吉田 真吾・大嶋 勇樹)
Claude Codeでエージェントチームを作る実践について本にまとめました。
コードを書けない私が、AIに「チーム」を持たせるまで(Zenn Book)
この記事は はてなブログ からのクロスポストです。