読了時間
Opt-in推定読了時間を、コンパイル済みモジュールから利用できる MDX の名前付きエクスポートとして注入する。
readingTime 機能は、パースした Markdown の AST をたどって単語数を数え、コンパイル済み MDX モジュールに export const readingTimeMinutes = N; を注入します。MDX ファイルからこの名前付きエクスポートを直接インポートして、ページ内で利用できます。
有効化
ブール値の短縮形で有効化します(デフォルトの 200 WPM を使用):
// zfb.config.ts
export default defineConfig({
markdown: {
features: {
readingTime: true,
},
},
});または { wpm: N } を渡して、1 分あたりの単語数(words-per-minute)を独自に設定します:
// zfb.config.ts
export default defineConfig({
markdown: {
features: {
readingTime: { wpm: 250 },
},
},
});readingTime: true はデフォルトの 200 WPM を維持します。未知のフィールド(例: { bogus: true })はデシリアライズ時に明確なエラーで拒否されます。
TSX ページでの利用
コンパイル済み MDX モジュールから名前付きエクスポートを直接インポートします:
// src/pages/blog/[...slug].tsx
import { readingTimeMinutes } from "./my-page.mdx";
// readingTimeMinutes は数値 — レイアウトで利用する:
<p>{readingTimeMinutes} min read</p>単語カウントの計算式
このプラグインは 2 つのパスを組み合わせます:
ラテン文字のテキスト — テキストを空白で分割し、各トークンを 1 単語として数えます。トークンに付随する句読点(例:
don't、hello-world)は、remark-reading-timeと同様に 1 単語として数えます。CJK 文字 — CJK のテキストは単語間に空白を使わないため、以下の Unicode ブロックに含まれる各文字を 1 単語として数えます:
CJK 統合漢字 + 拡張 A(U+3400–U+9FFF)
CJK 互換漢字(U+F900–U+FAFF)
ひらがな(U+3040–U+309F)
カタカナ(U+30A0–U+30FF)
ハングル音節(U+AC00–U+D7AF)
出典: remark-reading-time — 「単語間に空白を使わない言語については、CJK の文字数も使用する。」
総単語数(ラテン文字のトークン + CJK 文字)を、設定された WPM(デフォルト 200)で割り、最も近い整数の分に切り上げ、最小値を 1 とします。
コードブロックは除外される
フェンス付きコードブロックとインラインコードは 数えません。コードブロックに数百行を含むドキュメントでも、コードの内容によって過大に見積もられることはありません。
例
| 入力 | 結果(200 WPM の場合) |
|---|---|
| ラテン文字 200 単語 | 1 分 |
| ラテン文字 600 単語 | 3 分 |
| CJK 200 文字 | 1 分 |
| 5 単語 | 1 分(最小値) |
補足
記事の長さに関わらず、返される最小値は常に 1 分 です。
WPM は設定可能です(デフォルト 200)。
{ wpm: N }を渡して上書きします。読了時間は 本文コンテンツのみ を対象に計算されます — 見出し、段落、リスト、引用、強調はすべて寄与しますが、コードブロック、生の HTML、数式ブロックは寄与しません。
このエクスポートは mdast フェーズ(HTML/JSX 変換の前)で注入されるため、常にドキュメントの内容と一致します。