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
MapLibre の CJK レンダリング / CJK Rendering in MapLibre
Search
Taiyu Yoshizawa
October 22, 2026
Technology
150
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
MapLibre の CJK レンダリング / CJK Rendering in MapLibre
Taiyu Yoshizawa
October 22, 2026
More Decks by Taiyu Yoshizawa
See All by Taiyu Yoshizawa
The Present and Future of CJK Rendering in MapLibre
nekoya3
0
13
Kartore: A Style Editor and Toolkit for MapLibre
nekoya3
0
20
Kartore: Maplibre のための Style Editor とその Toolkit
nekoya3
0
140
Flagship という素晴らしいもの / This awesome thing called Flagship
nekoya3
0
6
10分で完全に理解出来る Cloudflare Workers + HyperDrive / Cloudflare Workers + HyperDrive: You Might Understand It in Just 10 Minutes
nekoya3
0
26
WorkersでCMSを作ってみないか / Wanna build a CMS with Workers?
nekoya3
0
12
Cloudflare Realtime と Workers でつくるサーバーレス WebRTC
nekoya3
1
2k
北海道新型コロナウイルスまとめサイトでのいろいろなこと
nekoya3
0
480
Other Decks in Technology
See All in Technology
GCASアップデート(202607-202610)
techniczna
1
220
[General] 개발자로 해외 기업에서 일하기
skydoves
1
310
eBPF 簡介 2026 版
shunghsiyu
0
190
[dbts2026]数十PBの超巨大データ×AI活用を支えるSnowflakeの実力〜大規模環境におけるアーキテクチャと運用のリアル〜
y_matsubara
0
110
Sinatra on PicoRuby ローカルでセルフホスト
bash0c7
0
110
Lint の層を組み直した話
bengo4com
3
330
An Introduction to Context Ontology Accelerator (teaching AI agents what your data means)
inariku
PRO
1
130
続・ソフトウェアアーキテクトのための意思決定術: Decision Readiness, Revisited — When AI Changes the Economics of Software Architecture
snoozer05
PRO
9
2.7k
The future of architectural work
ufried
0
190
[JAWS Festa 2026]一番いい仕事は、請求書に現れない / jawsfesta2026
sh_fk2
2
380
Copilot Coworkで「みのるん式」やってみた
minorun365
PRO
2
1.6k
分析作業をどこまで任せるか自分で決められる AIネイティブBI『Golden Analytics』が 良さげな話 /golden-analytics-is-ai-native-bi
shinyaa31
0
130
Featured
See All Featured
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
2
970
Git: the NoSQL Database
bkeepers
PRO
433
67k
Product Roadmaps are Hard
iamctodd
55
13k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
What's in a price? How to price your products and services
michaelherold
247
13k
Navigating Weather and Climate Data
rabernat
0
590
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
460
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
480
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.8k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.8k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
70
68k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Transcript
MapLibre の CJK レンダリング ɴᴇᴋᴏʏᴀsᴀɴ
Who are you? ɴᴇᴋᴏʏᴀsᴀɴ (a.k.a. Taiyu Yoshizawa) Software Engineer @MIERUNE
Inc. Co-founder & Software Engineer @ ReMotive LLC. GitHub: @NEKOYASAN Twitter: @Nekoya3_ Web: nekoyasan.me
MapLibreのCJKレンダリングに 注目したことはあるでしょうか?
MapLibreのCJKレンダリングに 注目したことはあるでしょうか?
CJKレンダリングってなんだ?
CJK 中国語(Chinese)・日本語(Japanese)・ハングル (Korean)の頭文字をとった言葉で、これら東アジアの言語圏 で共通して使われる漢字および文字体系を指す総称 今回は漢字やひらがななど、マルチバイト文字を使って、縦書き が存在する文化圏の文字体系を表すためにCJKという言葉を用 います。
CJKレンダリング © OpenStreetMap contributors | © OpenMapTiles 地理院ベクトルタイルを加工して作成 | 「国土数値情報(鉄道データ
2025年度)」および「国土数値情報(行政区域データ 2026年度)」(国土交通省)を加工して作成
CJKレンダリング こういう日本語のレンダリングのされ方 の総称を(今回は)指します © OpenStreetMap contributors | © OpenMapTiles 地理院ベクトルタイルを加工して作成
| 「国土数値情報(鉄道データ 2025年度)」および「国土数値情報(行政区域データ 2026年度)」(国土交通省)を加工して作成
特に今回は縦書きについて
まずWebにおける縦書き
writing-mode 行の流れる方向を決める horizontal-tb vertical-rl ↓ W3C CSS Writing Modes Level
4 · https://www.w3.org/TR/css-writing-modes-4/ ←
text-orientation 文字ごとの向きを決める mixed W3C CSS Writing Modes Level 4 ·
https://www.w3.org/TR/css-writing-modes-4/ upright
text-combine-upright 数字を横並びのまま1文字分に none W3C CSS Writing Modes Level 4 ·
https://www.w3.org/TR/css-writing-modes-4/ all
Webではそれぞれが求めた 書き方ができる
ではMapLibreではどうなのか
© OpenStreetMap contributors | © OpenMapTiles 地理院ベクトルタイルを加工して作成 | 「国土数値情報(鉄道データ 2025年度)」および「国土数値情報(行政区域データ
2026年度)」(国土交通省)を加工して作成
© OpenStreetMap contributors | © OpenMapTiles 地理院ベクトルタイルを加工して作成 | 「国土数値情報(鉄道データ 2025年度)」および「国土数値情報(行政区域データ
2026年度)」(国土交通省)を加工して作成
ラインに従って縦書きになる ケースがある ポイントでも縦書きのにするかどうかの選択は可能
数字・英語などの非マルチバイト文字の 縦書きをどう扱うべきか?
どのレンダリング結果が 正しいと思いますか?
None
これの場合は果たしてどうでしょうか...
None
これらは結局どういう違いなのか A. 全てが横書き B. CJK 文字は縦書きで、それ以外は横書き C. CJK 文字列と短い単語と数字は縦書きで、それ以外は横書き D.
全てが縦書き
正しいとはなになのか
AもBもCもDもどれも正しいのでは?
これはそれぞれの感性の違いでしかない 一応、W3C標準やJIS X 4051が存在してはいるが、 地図体験として正しいのかというのは難しい
https://www.w3.org/TR/jlreq/
v6.6.0 まで
v6.7.0 以降
https://github.com/maplibre/maplibre-gl-js/pull/8205
ご意見をください!
縦書き時の字形
字形 = 文字自体の形 フォントごとに見た目が違う
学 学 学 学 学 学 LINE Seed JP Noto
Sans JP Noto Serif JP Yuji Syuku Zen Kurenaido Hachi Maru Pop
フォントでの違いだけではなく 縦書きによって変わることもある
ー
ー 長音符 (U+30FC) KATAKANA-HIRAGANA PROLONGED SOUND MARK
ー 長音符 (U+30FC)
None
ー 長音符 (U+30FC)
None
ー 何かが違う? 長音符 (U+30FC)
None
None
これでよいのか?
UTR#50 Vertical Text Layout
UTR#50 Vertical Text Layout
Vertical Orientation Property U:コード表の向きそのままで表示される (漢字とかひらがな) R:コード表の向きから時計回りに90度回転して表示される (英 語とか数字) Tu:通常は縦書き用の字形があるが、なければそのまま表示す る
(句読点とか) Tr:通常は縦書きの字形があるが、それがなければ時計回りに 90度回転して表示される
Vertical Orientation Property U:コード表の向きそのままで表示される (漢字とかひらがな) R:コード表の向きから時計回りに90度回転して表示される (英 語とか数字) 長音符はどれ? Tu:通常は縦書き用の字形があるが、なければそのまま表示す
る (句読点とか) Tr:通常は縦書きの字形があるが、それがなければ時計回りに 90度回転して表示される
Vertical Orientation Data https://www.unicode.org/Public/UCD/latest/ucd/VerticalOrientation.txt
Vertical Orientation Data https://www.unicode.org/Public/UCD/latest/ucd/VerticalOrientation.txt
Vertical Orientation Property U:コード表の向きそのままで表示される (漢字とかひらがな) R:コード表の向きから時計回りに90度回転して表示される (英 一応ただしい! 語とか数字) Tu:通常は縦書き用の字形があるが、なければそのまま表示す
が...違和感がある る (句読点とか) Tr:通常は縦書きの字形があるが、それがなければ時計回りに 90度回転して表示される
ー 長音符 (U+30FC)
ー ー
ー 長音符 (U+30FC) font-feature-settings: 'vert' 1
font-feature-settings が 尊重される必要がある
https://github.com/maplibre/maplibre-gl-js/issues/5259
POINT LINESTRING
1文字 1Glyphからの脱出
Glyph の Protocol Buffer では、Unicode の Code Point に対応する SDF
Bitmap Image を格納する仕組みになってい る font-feature-settings によって Unicode の Code Point は変わらない。
https://github.com/maplibre/maplibre-gl-js/blob/main/src/util/verticalize_punctuation.ts
Glyph の Protocol Buffer では、Unicode の Code Point に対応する SDF
Bitmap Image を格納する仕組みになってい る font-feature-settings によって Unicode の Code Point は変わらない。
Glyph の Protocol Buffer では、Unicode の Code Point に対応する SDF
Bitmap Image を格納する仕組みになってい る font-feature-settings によって Unicode の Code Point は変わらない。 = 一つの Code Point に対して 複数の Glyph が使える必要がある!
font-faces
フォントファイルが直接さわれる
https://github.com/maplibre/maplibre-gl-js/pull/8489
https://github.com/maplibre/maplibre-gl-js/pull/8489
POINT LINESTRING v6.14.0 まで
POINT LINESTRING v6.15.0 以降
今後のCJKレンダリングの改善として なにを考えたいか
今後のCJKの改善 ラインラベルの縦書きと横書きを選択可能にする GL JS(#8243) と Style Spec(#1844) の両方に重なる 縦中横と呼ばれるレンダリングへの対応 (#8242)
今後のCJKの改善 縦書きと横書きを選択可能にする GL JS(#8243) と Style Spec(#1844) の両方に重なる 縦中横と呼ばれるレンダリングへの対応 (#8242)
今後のCJKの改善 縦書きと横書きを選択可能にする GL JS(#8243) と Style Spec(#1844) の両方に重なる 縦中横と呼ばれるレンダリングへの対応 (#8242)
今後のCJKの改善 縦書きと横書きを選択可能にする GL JS(#8243) と Style Spec(#1844) の両方に重なる 縦中横と呼ばれるレンダリングへの対応 (#8242)
合字や前後の文字列による変化への対応 font-feature-settings への対応拡充
複数文字の組み合わせに対応した レンダリングへ
https://github.com/maplibre/maplibre-gl-js/issues/6232
https://github.com/maplibre/maplibre-gl-js/issues/8293
GL JS だけでなく Native にも...?
Thank you!