4,000枚超の紙書類を「2秒で見つけてiPhoneに転送」できる仕組みを、AIとスキャナーで作った話。
車検証、点検記録、年賀状、給与明細、保険証券、領収書——。長年スキャンして溜め込んだPDFが4,000枚以上。「あの書類どこだっけ」と探すたびに、フォルダを掘り返していた。
今日、この問題が完全に解決した。
「法定12ヶ月点検の請求書、探して」と打つだけで、2秒後にはピンポイントでファイルが見つかり、iPhoneに転送される。しかもかかった費用は約30円。
全体の流れ
やっていることはシンプルだ。
1. ScanSnap iX1600で紙をスキャン→PDF化
2. Mac mini 2014にファイルサーバーとして保存
3. Gemini API(GoogleのAI)でPDFの中身をテキスト化(OCR)
4. テキストデータをJSONファイルにまとめて保存
5. Pythonのスクリプトでキーワード全文検索
6. 見つかったPDFをiCloud Drive経由でiPhoneに転送
道具立てとしては特別なものはない。ScanSnapは定番のドキュメントスキャナーだし、Mac miniは2014年モデルの古いやつ。AIの部分はGoogleのAPIを使っているだけ。
ポイントは「これらを一本の線でつないだ」ことにある。
最大の壁は「合冊PDF」だった
ScanSnapでスキャンすると、複数枚の書類が1つのPDFにまとまってしまうことがある。たとえば車の整備記録だと、車検の請求書・1年点検の請求書・タイヤ交換の請求書が15ページの1ファイルに合冊されていた。
この状態だと、OCRで「法定12ヶ月点検」というテキストが見つかっても、「15ページのうちどれがそれ?」がわからない。実際に今日、2年前の法定点検の金額内訳を調べたくて検索したら、合冊PDFにヒットしてしまい、目的のページを探すのに手間取った。
pypdfで全部バラした
解決策は単純。Pythonのライブラリ pypdf を使って、複数ページのPDFを1ページずつに分割した。
Mac mini上の全PDFをスキャンしたところ、371ファイルが合冊状態で、合計1,024ページ分。これを全部1ページ1ファイルに分割。元の合冊ファイルは split_originals/ フォルダに退避して、いつでも戻せるようにした。
処理時間は数十秒。あっけないほど簡単だった。
分割したら再OCRが必要になる
ここで新しい問題が発生する。OCRのテキストデータは旧ファイル名に紐づいている。納品請求書_002.pdf(15ページ分)のテキストが1つのエントリにまとまっているので、分割後の 納品請求書_002_p5.pdf には対応するテキストがない。
つまり、分割した1,024ページ分を全部OCRし直す必要がある。
Gemini 2.5 Flash-Liteが最適解だった
GoogleのGemini APIにはいくつかのモデルがある。精度と料金のバランスを比較した結果がこれ。
| モデル | 1,024ページの概算コスト |
|---|---|
| Gemini 2.5 Flash-Lite | 約30円 |
| Gemini 2.5 Flash | 約160円 |
| Gemini 3 Flash | 約200円 |
| Gemini 2.5 Pro | 約650円 |
書類のOCR程度なら最安の Gemini 2.5 Flash-Lite で十分。請求書の金額や日付、名前がきちんと読み取れている。
Pythonスクリプトで1,024ファイルを順番にAPIに投げて、返ってきたテキストをJSONストアに保存。約50分で全件完了した。
検索が「ピンポイント」になった
再OCR後、同じ検索をかけてみる。
「法定12ヶ月点検」で検索。結果:
- 納品請求書_002_p5.pdf — 2024年3月28日、Honda Cars厚別中央通店
- 納品請求書_002_p11.pdf — 2022年5月12日、Honda Cars厚別店
2件だけ。どちらも1ページのPDF。 合冊時代の「15ページのどこか」ではなく、ズバリそのページが返ってくる。
iPhoneで見られるようにする
見つかったPDFをMac miniからダウンロードして、iCloud Driveのフォルダにコピーする。
iCloud Drive → ScanSnap検索結果 → 法定12ヶ月点検_2024年3月28日.pdf
iPhoneのファイルアプリを開けば、もうそこにある。ディーラーに行くとき、保険の問い合わせをするとき、手元で書類が確認できる。
使っているもの一覧
| 役割 | ツール |
|---|---|
| スキャン | ScanSnap iX1600 |
| ファイル保管 | Mac mini 2014(SSH接続) |
| PDF分割 | pypdf(Pythonライブラリ) |
| OCR | Gemini 2.5 Flash-Lite(Google AI API) |
| テキスト保存 | JSONファイル(約5,400エントリ) |
| 検索・制御 | Claude Code + Python |
| iPhone転送 | iCloud Drive |
特別な月額サービスは使っていない。Gemini APIの従量課金だけで、今回は30円。
ずっと「惜しかった」仕組みが、ようやく完成した
ScanSnapでスキャンする→OCRする、まではずいぶん前からやっていた。でも「合冊PDFのせいで検索がぼやける」「見つけても手元で見られない」という2つの問題が残っていて、結局フォルダを手動で掘り返すことが多かった。
今日、pypdfでの分割とGemini再OCRとiCloud Drive転送を一気に組み上げたことで、ようやく「紙の書類を探す」というストレスがゼロになった。
4,000枚の紙の山が、ポケットの中に収まった感覚だ。
この記事が参考になったら、応援いただけると励みになります。
著者: ふじのすけ
作成: Claude Code (Opus 4.6)
投稿日: 2026-04-04 19:35 JST
コメント
コメントを投稿