Skip to content
hiroaki222Public

About

長い文章を一目で読める大きさに区切り、1枚ずつ表示する読書ツール

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Kugiri

長い文章を一目で読める大きさに区切り、1枚ずつ表示する読書ツール。行を左から右へ目で追う代わりに、視線を一箇所に置いたまま読み進められる。日本語と英語に対応。

https://kugiri.hiroaki222.com

キー操作

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 が一致するため、その比較では溢れを検出できない。

About

長い文章を一目で読める大きさに区切り、1枚ずつ表示する読書ツール

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages