自炊した本を、置いたまま読む|ShelfStream · 第02回 / 全9回
1ページだけ読める本、全部読まないと開けない本 — 自炊ファイルの形式が後から分けるもの
この記事の要点
- ZIP と CBZ は書庫の末尾に目次を持ち、各ファイルの開始位置が引けるので、1ページだけを取り出せる(PKWARE APPNOTE.TXT §4.3.6 / §4.3.16 / §4.4.16)。
- 末尾の目次と HTTP の Range リクエストが両方そろって、はじめてファイル全体を落とさずに読み始められる。片方だけでは成立しない。
- 「ZIP 対応」と書いてあっても実装はページ単位とは限らない。外部に置いた1冊を開き、待ち時間か通信量の増え方を見れば自分の環境で確かめられる。
前回は、自炊ライブラリが持ち出しにくくなる原因を、形式・名前・置き場所・共有方法の4つに分けました。今回はその1つめ、保存形式を単独で扱います。
これから数百冊をスキャンしようとしている人が最初に手を止めるのは、出力形式の選択画面です。PDF なら他のアプリでも開ける。ZIP のほうが漫画向けだと聞いたことがある。どちらの理由も、裏を取ったわけではない。
検索して出てくる比較は「軽い」「対応アプリが多い」といった曖昧な基準で、何年か経ってから効いてくる差を説明してくれません。そして200冊スキャンし終えてから形式を変えたくなると、全部を再変換することになります。

---
この記事について
今回の内容は、どのビューアを使っていても同じように効いてくる話です。アプリは要りません。最後に、自分がいま使っているビューアがどちらのタイプかを確かめる手順をお渡しします。
逆に、いま読まなくていい場合
ファイルを全部端末に入れていて、待ち時間を感じていないなら、形式の差はほぼ出ません。 その場合は置き場所の話(このシリーズの3つめ)のほうが先です。
---
形式の差は、保存した瞬間には現れない
スキャンして保存した直後は、どの形式でも同じように開けます。差が出るのは、蔵書が増えて、置き場所が端末の外に移ってからです。
そのころには「開くのが遅い」「外だと読めない」という症状として現れますが、原因が形式にあるとは気づきにくい。アプリを乗り換えても直らないので、なおさら見当がつきません。
比較の軸を一つに絞ると、この差はきれいに説明できます。
軸はひとつ「1ファイルだけ取り出せるか」
自炊ファイルの中身は、ページ画像の集まりです。ここで効いてくるのは、その集まりから1枚だけを取り出せる構造になっているかどうかです。
1枚だけ取り出せるなら、500MB のファイルでも、いま見ているページの前後だけを読めば表示できます。取り出せないなら、1ページ目を見るためにファイル全体を読み込むことになります。
この違いは容量にも画質にも現れません。ファイルの内部構造の話です。
ZIP が持っている「末尾の目次」
ZIP(そして中身が同じ CBZ)は、この構造を仕様として持っています。
ZIP の仕様書には、書庫の末尾に目次のレコードを必ず含めなければならないこと、そしてその目次が各ファイルについて「先頭がどこから始まるか」を保持することが定められています(PKWARE APPNOTE.TXT §4.3.6 / §4.3.16 / §4.4.16)。
並びにするとこうなります。
`` [1ページ目のデータ][2ページ目のデータ]…[Nページ目のデータ][目次][目次の位置] ↑ここを最初に読む ``
読む側の手順はこうです。まず末尾の「目次の位置」を読む。そこから目次を読む。目次には「3ページ目はここから始まる」と書いてある。あとはそこだけ取りに行けばいい。
前から順に読む必要がありません。ここが要点です。
もうひとつの条件 — 必要な範囲だけ取りに行く
ただし、ファイルが手元になく、ネットワークの向こうにある場合はどうでしょうか。「そこだけ取りに行く」ができなければ、結局は全部落とすことになります。
これも仕組みがあります。HTTP には「このファイルの、この範囲だけください」と要求する仕掛け(Range リクエスト)があり、対応しているサーバーは要求された範囲だけを返します。サーバー側は自分が対応していることを宣言でき、部分だけを返すときは専用の応答コードを使います(RFC 9110 §14)。
末尾の目次で「どこを読めばいいか」が分かり、Range リクエストで「そこだけ取りに行ける」。 この2つが揃ってはじめて、ファイル全体を落とさずに読み始められます。
どちらか片方だけでは成立しません。目次があってもファイルを丸ごとしか取得できないなら意味がなく、範囲取得ができても中身の地図がなければどこを読むべきか分かりません。

では、自分のビューアはどちらなのか
ここからが本題です。形式が対応していることと、使っているアプリがその構造を活かしていることは別です。「ZIP 対応」と書いてあっても、実際にはファイル全体を落としてから開く実装もあります。
これは形式の善し悪しではなく、実装の選択です。だから自分の環境で確かめるのがいちばん早い。手順は3つあります。
① 読み始めるまでの待ち時間を見る
外部(NAS やクラウド)に置いた、なるべく大きい1冊を開いてみてください。
- タップしてすぐ1ページ目が出る → ページ単位で読んでいる可能性が高い
- 進捗バーが最後まで進んでから開く → 全体を取得している
進捗バーが出ない実装もあるので、その場合は待ち時間の長さで判断します。ファイルサイズに比例して待つなら全体取得です。
② 通信量の増え方を見る
iPhone なら「設定 → モバイル通信」でアプリごとの通信量が見られます。数字をメモしてから、外部の1冊を開いて数ページだけめくり、閉じて、もう一度見てください。
- 数ページ分だけ増える → ページ単位
- ファイルサイズぶん増える → 全体取得
こちらのほうが確実です。ただしモバイル回線で試すと実際に通信量を消費します。契約プランを確認してからにしてください。
③ わざと大きいファイルで試す
差が出にくいときは、意図的に大きいファイル(500MB 以上)を1つ用意して試すと、はっきり分かれます。
---
確かめた結果で、やることが決まる
| 結果 | やること |
|---|---|
| ページ単位で読めている | 何もしなくていい。 いまの形式のままで問題ありません |
| 全体取得だが、ファイルが端末内にある | 急いで直す必要はない。 端末内なら待ち時間はほぼ出ません |
| 全体取得で、ファイルが外部にある | ここが改善の余地。まずこれから保存するぶんを ZIP/CBZ に統一する |
3つめに当てはまった場合でも、過去のファイルを全部変換する必要はありません。 よく読み返すシリーズだけ、あるいは今後スキャンするぶんだけで十分効果があります。
道具を選ぶときに、ここが効いてくる
3つめに当てはまった場合、選択肢は2つです。形式を ZIP/CBZ に揃えるか、ページ単位で読めるビューアに変えるか。両方やる必要はありません。
ビューアを変えるほうを選ぶなら、確認する点は1つです。「ZIP 対応」ではなく「ZIP をページ単位で読むか」。前者はほぼすべてのアプリが満たしますが、後者は実装によって分かれます。
私たちが作っている ShelfStream の場合、ZIP と CBZ はページ単位で先読みし、RAR・CBR・7z・PDF はファイル全体を取得してから表示します。つまり ZIP/CBZ へ揃えていない蔵書では、このアプリに変えても待ち時間は消えません。 形式のほうが先です。
なお、この記事に「待たずに開いている画面」は載せません。待ち時間の有無は静止画では証明できないからです。上の3つの手順なら、自分の環境で自分の目で確かめられます。そちらのほうが確実です。
変換のコストと、変換しなくていい場合
形式を変えるときは、次を承知しておいてください。
- 再エンコードで画質が落ちることがあります。 画像を展開して入れ直すだけなら劣化しませんが、変換ツールによっては再圧縮します。設定を確認してください。
- 時間がかかります。 数百冊を一度にやろうとすると数時間から数日です。
- PDF から画像を取り出すと、文字の検索ができなくなります。 技術書や資料のように文字を検索したい本は、PDF のままのほうが役に立ちます。
つまり、全部を統一するのが正解ではありません。 漫画のように「めくって読む」本は ZIP/CBZ、検索したい本は PDF、という使い分けで構いません。
---
今日やること
手持ちの1冊を外部の置き場所から開いて、読み始めるまでに全体を読み込むかどうかを確かめる。
①の待ち時間だけなら1分で終わります。結果によっては、何もしなくていいことが分かります。
次回は2つめの分かれ目、ファイル名を扱います。棚に並ぶ順を決めているのはアプリではなくファイル名で、崩れる原因は3つしかありません。
---
ShelfStream について
ShelfStream は、自炊した漫画・書籍を、クラウドや NAS に置いたまま端末へコピーせずに読む iPhone / iPad 向けのビューアです。ローカルファイルの閲覧、7種類の閲覧スタイル、シリーズ管理・しおり・読書履歴は無料で使え、広告は表示されません。クラウド(iCloud Drive / Google Drive / Dropbox / Box)と NAS(SMB / WebDAV / FTP / SFTP)への接続は Premium(月額100円 / 年額1,000円・7日間の無料トライアル)です。
このシリーズは、自分が所有する本を、自分で読むために、自分で電子化したファイルがすでに手元にあることを前提にしています。著作権法第30条が私的使用目的の複製を認めるのは「その使用する者が複製する」場合に限られ、他人への配布・共有・アップロードはこのシリーズの前提の外です。記事の画面に写っている作品は、著作権者の許諾に基づいて使用しているか、パブリックドメインのものです。NAS の設定やネットワークの安全性を保証するものではないため、自分の環境の設定内容は自分で確認してください。