Lab/Aozora Reader

電子書籍リーダー公開中2026

青空文庫の名作を、本物の縦書き組版とページ送りで読む読書体験の実験サイト。注記記法パーサによるルビ・傍点表示、しおり・読了進捗・表示設定に対応。

サイトを開く
青空文庫 縦書きリーダー

Screenshots

青空文庫 縦書きリーダー スクリーンショット 1
青空文庫 縦書きリーダー スクリーンショット 2

Overview

概要

青空文庫の著作権切れの名作を、writing-mode: vertical-rlによる本物の縦書きとルビ組版で読む、読書体験の実験サイトです。走れメロス・羅生門・蜘蛛の糸・注文の多い料理店・山月記・こころの初期6作品を静的に同梱し、外部APIやCDNに依存せずオフラインでも高速に開きます。最大の見どころは青空文庫の注記記法を自前実装したパーサで、ルビ・傍点・字下げ・外字・縦中横・くの字点などを解釈してASTへ変換し、CSSで正しく組版します。

How to use

遊び方・使い方

本棚から作品を選ぶと縦書きのリーダーが開きます。左右スワイプ・矢印キー・画面端タップでページを送り、縦/横表示の切替や文字サイズ・配色などの設定パネルを利用可能。読んだ位置は自動でしおりされ、複数の手動しおりや読了進捗%、読了バッジにも対応します。長編『こころ』では目次から章へ飛べます。横書き表示にすると通常のスクロールで読めます。

Tech stack

技術スタック

TypeScriptNext.js 16React 19CSS 縦書き組版Tailwind CSS v4

実行時の追加依存はなく(Shift_JISデコードはビルド時)、状態はuseReducer、ユーザーデータはlocalStorageに保存。『こころ』でもページ計算を1秒以内・めくりを60fpsに保つよう、requestIdleCallbackで計算を分割しています。

Highlights

工夫した点

  • 青空文庫の注記記法を2パス方式で解析(パス1で段落・見出し・字下げ・改ページのブロック構造、パス2でルビ《》・傍点・外字・縦中横などの行内注記)し、JSONのASTとして出力。未知の注記は警告ログを残して原文から除去
  • ページ送りはCSS multicolumnを第一候補にtranslateXでめくり、非対応時は不可視要素での二分探索による文字数実測分割へフォールバック
  • 傍点はtext-emphasis、縦中横はtext-combine-upright、外字は面区点→Unicode変換で表現。作品はビルド時にShift_JISからデコードしてJSON化し同梱

To improve

改善したい点

  • multicolumnの縦書き挙動やtext-emphasis等はブラウザ差があり、フォールバック経路の作り込みに伸びしろがある
  • 外字(面区点)の網羅性に限界があり、一部の特殊文字は表示できない場合がある
  • 収録作品数が初期6作品にとどまる

What's next

今後の展望

  • 収録作品の拡充と、作者・ジャンル別の本棚
  • 文字送りの自動読み上げ(TTS)連携
  • 青空文庫の全文検索や、しおりのエクスポート

Category

ツール・メディア

Genre

電子書籍リーダー

Year

2026

Status

公開中