ローカルLLMを活用したブックリーダーをつくる
開発環境:Claude Code (Opus 5.5)
ローカルLLMを使ったブックリーダーをつくりました。

本の内容をLLMに読み込ませ、チャット形式で質問しながら読める環境を構築しました。わからない用語をすぐに調べたり、複雑な文脈を整理させたりすることで、読書体験が大きく変わりました。
背景と目的
電子書籍アプリの限界
Kindleなどの電子書籍アプリを利用していて、レイアウトの不自由さや、内容を深く掘り下げたいときの検索性の低さに不満を感じていました。
特に書籍をデジタルデータとして活用しきれていない感覚があり、せっかくのデータが単なる「閲覧用」に留まっているのがもどかしい。本を所有しているという実感を持ちながら、より柔軟に情報を引き出せる環境が欲しいと考えていました。
目指した理想の読書体験
理想は、読みやすいレイアウトを維持しつつ、チャット形式で内容について質問できる環境です。
わからない用語を即座に調べたり、複雑な文脈を整理させたりすることで、理解を深めながら読書に没頭したい。本の内容をLLMに読み込ませることで、受動的な読書から、対話を通じた能動的な読書への転換を目指しました。
実装
データ取り込みの仕組み
まず、本の全ページをキャプチャー画像として用意します。数百枚の画像ファイルになるため、ZIP形式でまとめ、アプリ側で一括して取り込めるようにしました。
取り込み処理では、OCRによるテキスト化と、図表の切り出しを同時に行います。テキスト化された内容はLLMのコンテキストとして利用し、切り出した図は別途保存して、必要なタイミングで参照できるようにしています。OCRは日本語の縦書きに強い YomiToku を使いました。
テキストの検索と抽出には Embedding を導入しました。モデルには、日本語の性能が高い Ruri-v3 を採用しています。
読書体験を向上させるUI
チャット画面をサイドメニューに配置し、読書を中断せずにいつでも質問できる構成にしました。使用しているモデルは主に Gemma 4 31B です。深い考察が必要ないなら、小さいモデルでもいいかもしれませんね。
例えば小説を読んでいる際、「この人物は誰だったか」という疑問が湧いたときに、わざわざページを戻ることなく、チャットで確認できるため、読書の流れを止めずに済みます。


翻訳に対応
洋書にも対応してみました。過去に、翻訳が合わずに楽しく読めなかった訳書があるのですが、原書をLLMで翻訳すればよさそうに思いました。本のレビューでも翻訳がよくないから原書を買ったほうがいい、と書かれているものもありますが、なかなか原書を買うのはハードルが高いですよね。
原書の英文もYomiTokuで十分な精度で読み込めました。



システムプロンプトで訳し方を工夫して自分好みのものをつくると面白くなりそうですね。
さいごに
エージェントAIのおかげで、十数年我慢していたことが次々と解決されていきます。本当にありがたい。現時点での翻訳はそれほど精度が良いとは思えませんが、これから性能が上がればもっと良くなると思います。なので、これからは原書を買っておいて、自前で翻訳して読むことにしようかなと思います。