Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
WYSIWYG ルビ入力の概要と Chromium のバグを修正した話
Search
kosakin
June 22, 2026
Technology
350
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
WYSIWYG ルビ入力の概要と Chromium のバグを修正した話
#rich_text_editor_study
https://web-study.connpass.com/event/391357/
kosakin
June 22, 2026
More Decks by kosakin
See All by kosakin
Web で実用的な縦書きエディタは可能か?──現在地と普及に向けて
karintou8710
0
1.4k
pタグを跨いだテキストコピーは 改行が2つになる!?
karintou8710
0
51
RTE ライブラリの仕組みとそれを支えるブラウザ機能
karintou8710
0
820
Sample
karintou8710
0
320
Other Decks in Technology
See All in Technology
10年欲しかった音楽管理アプリを、AIと一緒に作りはじめた
judau
1
200
Meet AgentCore Identity Consent Portal
hironobuiga
2
140
『GOエコノミー 』(相乗りサービス) におけるスペック駆動開発
mot_techtalk
1
120
Amazon Bedrock Agents ClassicからAmazon Bedrock AgentCoreへ移行した際、ガードレール設定が2箇所に割れた話
matsunobu
0
160
AI臭い文章とは何なのか
nasuvitz
37
76k
3人で1000GPU超を統合運用する?マルチクラウド&オンプレを跨ぐ、構築と運用のリアル!
kazukun0716
2
800
Incremental HTTP
kazuho
5
1.8k
生成AIを使って「人が」考える技術 ― AI時代の人機共想と実践ノウハウ|UNITT AC2026
ishiirikie
0
500
Argo CDとAtlantisで実現するインフラ管理のセルフサービス化──小規模SREチームで支えるプラットフォーム
cassius7
0
260
Databricksメトリクスビューはじめてのもくもく会
taka_aki
0
150
覗いてみよう 関数型ビジュアル言語×2Dグラフィックスの世界
yohyamasaki
0
160
AIエージェント時代のPlatform as a Product —— テックリードがPdMとして回す発見・導入・計測 / Platform as a Product in the AI Agent Era
toshi0607
1
550
Featured
See All Featured
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
A better future with KSS
kneath
240
18k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
270
The untapped power of vector embeddings
frankvandijk
2
1.9k
Into the Great Unknown - MozCon
thekraken
41
2.7k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
33
5k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
410
Chasing Engaging Ingredients in Design
codingconduct
0
340
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
440
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
8k
Transcript
WYSIWYG ルビ入力の概要と Chromium のバグを修正した話 2026.05.26 (火) #rich_text_editor_study 1
所属:サイボウズ株式会社 (26卒) 出身:札幌 最近の興味:家系・ポーカー 悩み:健康診断の結果が悪かったので、娯楽の 食事が奪われた 2 自己紹介 コサキン @karintou74073
• 文字にふりがなや補足情報を付ける仕組み • 日本では漫画・小説・教科書・新聞などで広く使用 • 難読漢字や固有名詞の読みを示し、読者の理解を助ける • 縦書きと併用されることが多い ルビとは何か 3
• 中国: 拼音(ピンイン)で発音を示す例あり • ただし漢字と発音がほぼ 1:1 対応のため、主に教育用途 専門家が少なく、開発者コミュニティでも優先度が低い • WYSIWYG
ライブラリでも「知識がないので利用者側で対応してほしい」という反応 • 例: Lexical / Tiptap の issue でも実装は後回し 他の国でのルビ 4 Web やライブラリでの実装は後回しにされがち
ルビの HTML 表現 5 • ruby タグの中にテキスト + rt タグを順に並べる
• rp タグはルビ非対応環境向けのフォールバック • 「明日(Ashita)」のようにカッコ付きで表示
静的ページは HTML を直接書けばよいが、CMS などでユーザー入力を受ける場合は入力方法が必要 Web でのルビ入力 3 パターン 6
• マークダウンで専用記法を用意 • note の例: |note太郎《ノートたろう》→ プレビュー時に変換 パターン 1: マークダウン記法
7 • note は本来 WYSIWYG ベースのエディタ • それでも記法を採用 = WYSIWYG の難しさ / Web の技術的制約がある?と推測 • 記法はサービスごとに様々なバリエーションが存在
• ルビを独立した要素 (アトム) として扱う / 入力はモーダルなどの専用画面から行う パターン 2: アトム +
専用入力画面 8 • 「単語 + ルビ」は 1 つの埋め込み要素として扱われる • キャレットで直接文字を編集することはできない • ネイティブアプリの Word がこの方式
• contenteditable を使った、純粋な WYSIWYG(一番直感的に思いつく形) 編集イメージ • 単語にもルビにもキャレットを合わせて編集できる • 矢印キーで単語とルビの間を移動できる •
「やさしい日本語エディタ WordPress プラグイン」など パターン 3: 単語とルビを直接編集 9
• ルビが増えてくると、純粋に読みづらい • WYSIWYG なのに、最終成果物と異なる表示で編集することになる 「パターン 1: マークダウン記法」の問題点 10
現状では実用的ではない • キャレット操作が十分に実装されていない • 致命的な変な挙動も大量にある(ここら辺誰も触ってなさそう) • ブラウザ依存の実装になっている • editing の内部動作は
W3C の仕様が存在しない • ルビ + contenteditable 周りは WPT (共通テスト) にもない 「パターン3:単語とルビを直接編集」の問題点 11 https://codesandbox.io/p/sandbox/zxrrw8 Chrome で起きる変な動作 (contenteditable=true) - ルビの右にキャレット → 左矢印で行頭に移動 - そのまま Backspace すると行頭までごっそり削除 - ルビの先頭で入力 → 単語の末尾に追加される - 通常テキストで縦移動 → ルビに吸い込まれて抜け出せない - `rt` タグが空だと、ルビを入力できない
• Chrome で縦方向に移動すると、なぜか文頭や文末に飛ぶ • ProseMirror は移動処理を基本ブラウザに委ねているため、ライブラリでも問題が起きる WYSIWYG だと、アトムルビで十分では? 12 「アトム
+ 専用入力画面」で十分だと考える理由 • ルビは表示領域が小さく、直接入力しづらい • 多くの変な動作を乗り越えてまで直接編集する価値はそこまで高くない アトムルビの問題点
©️ Cybozu, Inc. 13 ここまでは記事の内容
©️ Cybozu, Inc. 14 社内の方がリツイートしてくれたおかげで、Chromium 開発者の方に届いた
とりあえず ISSUE 立てるか 15
• IssueTracker というサービスに報告する • 再現方法や詳細、バージョンなどを入力する。他の OSS とあまり変わらない Chromium に ISSUE
報告をする 16
数日経っても誰も取り組んでなさそう。。 17
ブラウザへのコントリビュート 興味あるし、やるか! 18
©️ Cybozu, Inc. 1. まずは手元に Clone して、ビルドする(僕の環境だと7時間ぐらいかかった気がする) 2. 原因の調査 3.
main からブランチを切って、コード修正とテストコードを追加する 4. Gerrit というサービスに PR を送る(若干特殊) 5. レビューでやり取り後、権限を持つ2人に Approve をもらってマージしてもらう コントリビュートの流れ 19 • Jxck さんの「Chromium にコントリビュートするための周辺知識」を目がとれるほど読みました • 日本語でコントリビュートガイドがあることに感謝です • https://blog.jxck.io/entries/2024-03-26/chromium-contribution.html
©️ Cybozu, Inc. 20 PRのイメージ
©️ Cybozu, Inc. • Blink は Chromium のレンダリングエンジン • HTML
/ CSS の解析、レイアウト構築、描画や Web API の実装を担っている • Firefox は Gecko, Safari は WebKit • 今回関わるのは layout と editing の2つ • third_party/blink/renderer/core/editing/ • third_party/blink/renderer/core/layout/ 変更するコンポーネント:Blink 21
©️ Cybozu, Inc. • Claude Code にディレクトリ構造・ファイル内容を聞きながら、理解を深めていく • ある程度バグありそうな場所を見つけたら、伝家の宝刀 print
デバッグ • LOG(ERROR) << "Foo"; 簡単な原因説明 • ArrowDown を押すと、レイアウト層で「次行 and 横方向ピクセルが一番近い位置」に移動したい • レイアウトは DOM を描画するための構造に変換されたもの • <rt /> は内部的に行と同じタイプで管理されており、これを次行と誤認 • contenteditable=false の中に移動しようとして、フォールバックが起動して末尾に移動 原因の調査方法 22
©️ Cybozu, Inc. • PR をレビューしていただいた田村さんにおんぶに抱っこだった • 最初に提案した contenteditable=false に移動する場合にスキップする方法は、contenteditable=true
でも同 じ問題が起きているため却下 • 別案で、レイアウトの層で <rt /> ならスキップする処理にしたい • IsRubyAnnotationLine の判定用メソッドを別PRで追加していただき、私がそれを使うという流れを提案して いただいた。(神??) レビューでの会話 23
©️ Cybozu, Inc. 24 マージされて AUTHORS にのった!嬉しい!
• アトムルビの WYSIWYG 編集が主要ブラウザである程度まともに動くようになる! • 別のバグっぽいものを見つけているので、その修正も必要になるかも。。。 • 主要ブラウザで詳しくバグ調査をせねば。。。 • 今主流のマークダウン形式が、WYSIWYG
の選択肢が生まれる! • Web で実用的な縦書きエディタを実装する上の、第一歩でもある • Web で縦書きエディターを各々のサービス導入できる世界線、いいね この修正で何が嬉しい? 25
©️ Cybozu, Inc. • 今はマークダウン記法でルビを入力していることが多いが見づらく、WYSIWYG の選択肢が欲しい • contenteditable=false のルビバグを修正したので、PC の主要ブラウザは動きそう
• 他にもバグあるのかも(あった記憶がある) • editing はブラウザへのコントリビュートしたい方の一つの選択肢になる! • 縦書き周りでレイアウト・editing 周りのバグっぽいものはいくつか見つけた • Web でルビが普及していけばいいね! まとめ 26
©️ Cybozu, Inc. 27