長い文章を一目で読める大きさに区切り、1枚ずつ表示する読書ツール。行を左から右へ目で追う代わりに、視線を一箇所に置いたまま読み進められる。日本語と英語に対応。
vim 系のキーと矢印キーの両方で操作できる。ホームポジションから手を離さずに読み進められる。
| vim | 代替 | 動作 |
|---|---|---|
h l |
← → |
前/次のカードへ。h は長押しで加速しながら巻き戻る |
k j |
↑ ↓ |
前/次の文の先頭へ |
{ } |
— | 前/次の段落へ |
gg |
G |
文書の先頭/末尾へ |
Space |
— | 再生/停止。停止すると今の文の前後が表示される |
< > |
— | 速度を下げる/上げる |
K |
— | 押している間だけ前後の文を表示 |
Shift + ← → |
— | 横に収まらないカード(長い URL など)をスクロール |
? |
, |
キー操作の一覧/詳細設定 |
Esc |
— | 再生を止めて、開いている表示を閉じる |
分割は BudouX の文節分割と、slack² を最小化する動的計画法を組み合わせている。文の区切り・保護区間(URL やメールアドレス)の検出・文節が長すぎるときの二次分割は自前で実装している。
本文はブラウザの中だけで処理する。 分割にサーバーも API も使わないので、貼り付けたテキストが処理のために送信されることはない。書体は同一オリジンから配信している(第三者の CDN を経由しない)。
カードが横幅に収まることは、DP の推定ではなく配置後の DOM 実測で保証している。収まらないカード(長い URL など)は縮小せず、横スクロールできる領域に隔離する。入力の上限は 5 万字。
1 枚に載せる量は「知覚スパン」——一度の停留で語として同定できる範囲——を出発点にしている。既定は全角 7 字で、詳細設定で 4〜14 字に変えられる。文字サイズ・文字間隔・背景色・速度・読み返しの挙動も同じ画面で調整できる。
bun / Vite / React / TypeScript / Tailwind CSS / @cloudflare/kumo / BudouX / zod。バージョンは package.json を参照。
bun install
bun run dev # http://localhost:3000検証:
bun run lint
bunx tsc --noEmit
bun run test # 分割・再生ロジック(DOM 非依存)
bun run test:browser # 実ブラウザで、全カードが幅に収まることを検査test:browser は 4 つの画面幅 × 5 つの設定でカードを全部送り、テキストの矩形がカードの内側に収まっているかを直接測る。white-space: nowrap のカードは親からはみ出しても scrollWidth と clientWidth が一致するため、その比較では溢れを検出できない。