概要
- アラビア語タイポグラフィ のウェブ実装における課題
- 欧文とアラビア文字 の組版文化の違い
- カシーダ(kashida)による両端揃え の歴史的背景と技術的困難
- Unicode・シェーピングエンジン の重要性
- 多言語対応の難しさ とその根本要因
アラビア語組版のフロントエンド課題
-
アラビア語混在のダッシュボード で、左端がギザギザになる問題の発生
-
デザインチームの要望 は「両端揃え(justified)」、しかし実装は不完全
-
欧文(Latin-script)では問題なし、アラビア語のみギャップ発生
-
CSSのtext-align: justify はアラビア語では期待通りに機能しない現状
-
Amiriフォント などの専用Webフォント導入が必要な状況
- 同時期に発生した他のバグ (PDF生成時の文字分離、誤ったUnicodeコードポイントによる検索不能など)も根本原因は同じ
- 表面上は小さなバグ だが、背後には深い技術的・歴史的課題が存在
アラビア語組版の歴史とカシーダ
- アラビア語の伝統的組版 では、単語間スペースを伸ばさず、 文字内部の線分(カシーダ/kashida)を伸ばして両端揃え
- Ibn Muqla による「al-khaṭṭ al-mansūb(比例書体)」の確立
- 文字ごとに形・長さの規則を定め、 どの文字ペアにカシーダを挿入できるか も詳細に規定
- Ibn al-Bawwāb や Yāqūt al-Mustaʿṣimī など、後世の書家による体系化
- Naskh、Nastaʿlīq、Dīwānī など、多様な書体とそれぞれの組版ルール
- 欧文組版では単語間スペースを伸ばす が、アラビア語では美観を損なうため不可
- HTML上のモックアップ ではU+0640 TATWEELを手動挿入で再現
アラビア文字の構造的特徴と多言語拡張
- アラビア文字は常に筆記体(cursive)、活字と手書きの区別なし
- 各文字は前後の文字との連結位置により4つの形 (独立形、語頭形、中間形、語末形)を持つ
- 一部の文字は前方非連結 で、単語内でも分断が発生
- ペルシア語、ウルドゥー語、シンディ語など は独自の文字や形を追加
- 例:ペルシア語のپ(pe)、ウルドゥー語のھ(do-chashmī he)など
- 正しく表示するには各言語・書体ごとの対応が必須
- Noto Sans Arabicファミリーでは用途別にサブフォントを用意
Unicodeとシェーピングエンジンの役割
- Unicodeは抽象的な1文字に1コードポイント を割り当てる
- フォント側が位置ごとのグリフを持ち、シェーピングエンジンが描画時に適用
- OpenType機能(isol, init, medi, fina, rlig, mark, mkmk)で制御
- アラビア語フォントは小さなプログラム のようなもの
- シェーピングエンジン無しでは、単なる分断された文字列として表示
- 例:PDF生成エンジンが未対応の場合、バラバラに出力
まとめ:アラビア語組版の根本的課題
- 欧文組版の常識(スペースを伸ばす) はアラビア語には適用不可
- アラビア語本来の両端揃え は、 文字形状の制御 と カシーダ挿入 が不可欠
- 現代Web技術(CSS、一般フォント)では未対応 な部分が多い
- Unicodeとフォント設計、シェーピングエンジンの協調 が重要
- 多言語・多書体対応 には、技術的・歴史的な知識と配慮が不可欠