Conversation
様々なデバイスに対応した改行位置の改良と欧文表示の改善を実装。 変更内容: - BudouXを統合して日本語テキストの自然な改行を実現 - VFM Loaderにカスタム関数を追加 - テキストノードにゼロ幅スペース(U+200B)を挿入 - ビルド時処理によりパフォーマンス影響を最小化 - Google Sans Flexバリアブルフォントを追加 - 欧文文字に適用され、Noto Sans JPと組み合わせて使用 - 1つのファイルで全ウェイト対応により効率的 - 見出し要素のCSS改行設定を改善 - word-break: keep-all と overflow-wrap: anywhere を追加 - BudouXのゼロ幅スペースと組み合わせて自然な改行を実現 動作確認: - 開発ビルド: 正常動作 - 本番ビルド: 正常動作 (57ページ生成) - PDF生成: 正常動作 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
This pull request integrates BudouX for improved Japanese line breaking and adds Google Sans Flex as a variable font for better Latin typography. The implementation processes Japanese content at build time to insert zero-width spaces (U+200B) at natural phrase boundaries, allowing for better line wrapping on various devices.
Changes:
- Added BudouX integration in the VFM loader to process Japanese HTML content at build time
- Integrated Google Sans Flex variable font via CDN with updated font stack ordering
- Added CSS line-breaking properties (
word-break: keep-allandoverflow-wrap: anywhere) to heading elements
Reviewed changes
Copilot reviewed 4 out of 6 changed files in this pull request and generated 9 comments.
Show a summary per file
| File | Description |
|---|---|
| src/loaders/vfm-loader.ts | Implements custom BudouX integration with regex-based HTML text node processing |
| public/styles/global.css | Adds Google Sans Flex font import, updates font stack, and adds line-breaking CSS to headings |
| package.json | Adds budoux ^0.7.0 dependency |
| package-lock.json | Locks budoux and its transitive dependencies (commander, linkedom, etc.) |
| _investigation/budoux-google-sans-flex-plan.md | Documents the implementation plan (contains discrepancies with actual implementation) |
| .gitignore | Adds .claude/ directory to ignore list |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- Add error handling for BudouX processing - Extend word-break CSS to paragraphs, lists, and table cells - Improve body tag extraction regex (non-greedy, case-insensitive) - Add documentation about regex-based approach limitations - Note potential future improvement with DOM parser (linkedom) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
- Replace translateHTMLString() with custom applyBudouXToHTML() function - Document regex-based approach instead of built-in HTML method - Update code block handling risk section with actual implementation status - Add error handling documentation - Note future improvement suggestion (linkedom) This addresses Copilot review comments about discrepancies between plan and implementation.
MurakamiShinyu
left a comment
There was a problem hiding this comment.
BudouXを利用するのは反対です。Vivliostyle公式ドキュメントサイトは、それ自体がVivliostyle利用の参考になる例となるような、標準的なものとするべきであって、CSSの機能を使わない特殊な手法での拡張を使うべきではありません(文節での改行を実現するCSSの機能は word-break: auto-phrase です)。
また、ドキュメントサイトとして、これを利用するメリットよりもデメリットが多いと感じます。気がついた問題点です:
- 文節区切りのみで改行する方式では、1行の長さよりもだいぶ短いところで改行がされるので、そこで文が終わったように見えるなど多くの場合に読みにくい結果になります。たとえば「出版向け拡張Markdown記法」という長めの文字列内に改行できる箇所がありません(Chromeの
word-break: auto-phraseでは「拡張」のあとで改行可能ですがBodouXではまったく改行不可です)。 - テキストをコピーしたときに、ゼロ幅スペースもコピーされます。これはテキストの再利用性を妨げます。
|
このPRでの変更箇所でないですが、丸付き数字(❶-❿)を docs2.vivliostyle.org/public/styles/global.css Lines 15 to 28 in 0d363e0 docs2.vivliostyle.org/public/styles/global.css Lines 53 to 55 in 0d363e0 Noto Sans JPに❶-❿が含まれるなら、Webフォントとしてどの環境でもNoto Sans JPが有効になって、 この "Circled Numbers" がないと何か問題があったのでしょうか? |
Google Sans Flexが丸付き数字(❶-❿)をカバーしているため、 専用の@font-face定義は不要になった。 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
|
しかし、Noto Sans JP / Google Sans Flex をWebフォントとして導入したことで、丸付き数字は適切にレンダリングされるようになりました。テスト環境でも Google Sans Flex - 700 で表示されることを確認しており、ご指摘の通り f4e70eaにて当該定義を削除しました。 |
なるほど、そうかもしれません。少し考えてみるので時間をください。 |
質問です。ゼロ幅スペースの混入によって、具体的にどのようなデメリットが考えられるでしょう? |
例えば、ドキュメントからコピーしたテキストをテキストエディタに貼り付けて利用するとします。そしてテキストの検索をするとします。たとえば「テキストの再利用性」で検索したとき、もしそのテキストの途中(テキストの/再利用性)にゼロ幅スペースが入っていたとしたら検索で見つからないということになります。ゼロ幅スペースは目に見えないので、利用者は何が起きているか分からず混乱します。 |
|
いろいろ考えてみましたが、ご指摘のように非標準であるBudouXの採用はやめて、 |
様々なデバイスに対応した改行位置の改良と欧文表示の改善を実装しました。
完了した変更
1. BudouX統合
2. Google Sans Flex導入
3. CSS改行設定の最適化
word-break: keep-allとoverflow-wrap: anywhereを追加BudouX + CSS の組み合わせ効果
段落、見出し、リスト、テーブルにはBudouX(ゼロ幅スペース)とCSSの両方が作用しています。これは意図的な設計で、相乗効果を発揮します:
動作メカニズム
BudouX: 自然な文節位置にゼロ幅スペース(U+200B)を挿入
これは\u200Bテストです\u200B改行位置CSS: 改行の優先順位を制御
word-break: keep-all: 単語(文節)の途中で改行しないoverflow-wrap: anywhere: 必要に応じてどこでも改行可能相乗効果
keep-allにより、BudouXが分割していない範囲では改行しない実際の挙動
通常の幅(デスクトップ、タブレット):
狭い幅(モバイル):
overflow-wrap: anywhereが発動極端に狭い幅:
この組み合わせにより、読みやすさとレイアウトの堅牢性を両立しています。
テスト結果
影響
変更ファイル
src/loaders/vfm-loader.ts: BudouX統合public/styles/global.css: フォントとCSS設定package.json: 依存関係_investigation/budoux-google-sans-flex-plan.md: 開発計画関連リンク
🤖 Generated with Claude Code