コンピュータにおける古代エジプト語ヒエログリフの実装

この記事は[N予備校講師陣および関係者 Advent Calendar 2020](https://adventar.org/calendars/5170) 14日目の記事です。

ryo-aです。株式会社ドワンゴの教育事業本部でアルバイトとしてプログラミング教材の編集に携わっています（追記：執筆当時）。

以前は「[N予備校のプログラミング教材編集に約3年携わって得られた知見](https://qiita.com/ryo-a/items/355a667a407a67e4657d)」といったプログラミング教育らしい記事を書きましたが、今回は折原先生から「何書いても大丈夫だよー」と聞いたので**完全に趣味**の内容です。

最近は[古代エジプト語の翻訳ツール](https://wired.jp/2020/09/18/google-egyptian-hieroglyphics/)をGoogleが開発するなど、ヒエログリフに対する注目が高まっています。
今後、 i18n で古代エジプト語研究者・話者を対象とするケースがどれくらいあるかわかりませんが、コンピュータ上において古代エジプト語を表現する場合の入門として本記事をご覧いただけると幸いです。

## 筆者について

慶應義塾大学大学院経済学研究科に在学中の院生です。
学業以外では、ドワンゴを含むいくつかの企業でアルバイトをしながらプログラミング教育やUX・モビリティなどに携わっています。

N 予備校では漢文教材の CSS 実装に携わった経験があります。
様々な環境で表示が乱れるのを防ぐため、教材としては画像化されたものが配信されていますが、内部的にはHTML+CSS→Headless Chromeによる画像化という形でデータが生成されています。従来は漢文教材のみInDesignで作成されていましたが、このCSSの導入によって他の教材と同様にテキストファイルベースの管理が可能になりました（git管理できます）。
メンテナンス性とユーザビリティを両立しており、教育事業本部における漢文教材の制作フロー改善に寄与しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185296/ed702c17-8c0e-c634-fbcf-8ab0c50ac460.png)
N予備校「漢文講座　漢文の構造」より引用

古代エジプト語の話に戻りましょう。私は昔から**文字**が好きで、今年は大学の一般教養科目にある**古代エジプト語**を履修しています。なお、文字は好きですが残念ながら言語（文法）は得意ではなく、古代エジプト語の習得にはかなり苦戦しています。

こういったものを提出するなどしています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185296/cc4b1ea6-a7e3-b58b-ca53-88c783f77712.png)


## ヒエログリフをただの「おもしろ絵文字」と思ってませんか？

インターネットでヒエログリフを見かけると大抵はネタ的な用途で使われています。まあ確かに、**𓇋𓈖𓅱𓇌𓍯𓃀𓇌𓎡𓍯𓅱** みたいな文字が並んだら面白いのはわかります。

ですが、**ヒエログリフはただのおもしろ絵文字ではありません**！当時の国家や神事を支えるのに十分な能力を持った文字であり、古代エジプト語の文法の下で実用できる**文字**です。

今回はこのヒエログリフをコンピュータ上で扱っていくために何が行われてきたのかを振り返りながら、今後のヒエログリフとコンピュータのあり方をご紹介します。

なお、筆者は古代エジプト語に関する文法などの知識はかなり基礎的なものしかありません。この記事はあくまで「文字」に関する記事となります。

## そもそもヒエログリフとは  

ヒエログリフは古代エジプト語における象形文字です。古代ギリシア語の *hieroglyphiká* に由来するもので、日本語では「神聖文字」や「聖刻文字」と訳されます。

ただし、英語においては *hieroglyph* で「（エジプト以外のものも含む）象形文字」という意味を持つため、*Egyptian Hieroglyphs*（古代エジプト語のヒエログリフ）と明示的に表記されます。ヒエログリフは専ら碑文に用いられるのですが、これを筆記用に簡略化した文字はヒエラティック（*Hieratic*、神官文字）と呼ばれます。また、ヒエラティックを更に簡略化したものがデモティック（*Demotic*、民衆文字）と呼ばれます。高校で世界史を履修したことがある方はご存知かもしれません。

1799年に発見されたロゼッタストーンにはヒエログリフ・デモティック・ギリシア文字でほぼ同一の文章が記述されており、これを用いてシャンポリオンらがヒエログリフを解読しています。

### ヒエログリフはローマ字と可換な表音文字なのか？

ヒエログリフを扱った書籍やWebサイトなどで、「ヒエログリフで自分の名前を書いてみよう」といったものが見受けられます。
それらの多くでは「ア/a」は𓄿、「ク/ku」は𓎡𓅱……のように、日本語のローマ字50音と1対1で対応させるような紹介がなされていると思います。

これらを見ると「ヒエログリフはかんたんにローマ字に1:1で置き換えられる表音文字」という感じがしますが、実際はそうではありません（別の言語なので当然といえば当然ですが）。

#### 翻字が英語・日本語とキレイに対応できるわけではない

古代エジプト学や古代エジプト語の学習においては翻字（transliteration）を行い、現代人が取り扱いやすいような形で表現します。現代語同士でも、キリル文字の`Здравствуйте`を`Zdravstvuite`とラテン文字で表記するようなことがありますが、これと同じです。

この際、英語や日本語ときれいに対応できるわけではなく、やや独特なラテン文字を使います。[Wikipediaの記事](https://ja.wikipedia.org/wiki/%E3%83%92%E3%82%A8%E3%83%AD%E3%82%B0%E3%83%AA%E3%83%95#1%E5%AD%90%E9%9F%B3%E6%96%87%E5%AD%97)がわかりやすいのでご覧ください。
たとえば「ウ/u」に近いものは w です。ロシア語で「ワ/wa」の発音がなく、ヴァ（ва）で代用するのと似ているのではないでしょうか。

#### 1子音文字だけではない

𓄿 (a)のように、1つの絵文字に1つの音が対応するものだけではありません。2子音文字、3子音文字のように、1つの絵文字で `nb`(𓎟) など2つ以上の音を表すものもあります。

（なお、ヒエログリフは表音文字として捉えたときに[アブジャド](https://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%96%E3%82%B8%E3%83%A3%E3%83%89)的な性格を持ち、母音を表記しません。a なども子音扱いです。）

#### 象形文字だが、表音文字のように使われることもある

ヒエログリフは表音文字と表意文字、両方の特性があります。

これは日本語話者であれば理解しやすい特性だと思うのですが、漢字の「米」には植物・食品のコメの意味で用いられることもあれば、「亜米利加」のように、意味ではなく音のために使われることもあります。

先述したヒエログリフで日本語を表すケースは、この発音のみに着目したものです。「`Boris` という人名を漢字で表すと `保理州` だ」といったものに近いでしょう。

ちなみに、この特性ゆえに古代エジプト人にとっても区別しづらい時があったようで、誤読されないための「送り仮名」のような表記が見られる場合があります。 たとえば、1文字でも `nfr` と読める文字があるのですが、碑文などでは誤読を防ぐためか `nfr f r` のように表記されることがあります。この場合は後ろ2つの `f r` は送り仮名のように捉え、`nfr` と読みます。

また、決定詞とよばれる、発音せずに前の文字の意味を限定するために付される文字もあります。

### ヒエログリフの管理

ヒエログリフでは、表音文字や表意文字、文法上の機能を持つ文字、あるいはそれらの複数の役割を持つ文字が混在しています。母語話者が存在しない現代においてこれらを管理・識別するには文字を新しく命名する必要がありました。そこで、Gardiner (1928)によって提唱された番号が Gardiner's Sign List（ガーディナーの記号表）として古代エジプトの研究において用いられています。

### Gardiner’s Sign List

Gardiner’s Sign List では、ヒエログリフの形によって文字が分類されています。たとえば、男性を象ったものがA、鳥類を象ったものがGというようにカテゴリが存在し、その中にA1, A2…といった番号が割り振られています。

**[Wikipediaの記事](https://ja.wikipedia.org/wiki/%E3%82%AC%E3%83%BC%E3%83%87%E3%82%A3%E3%83%8A%E3%83%BC%E3%81%AE%E8%A8%98%E5%8F%B7%E8%A1%A8)** がよくまとまっているのでご紹介いたします。

なお、本記事ではこれ以降 Gardiner’s Sign List の番号を使います。 `D13` `M17` `Aa1` のような表記が登場したら、文字番号のことだと思ってください。 


## ヒエログリフの組版

紙や電子媒体に記述される現代の言語と異なり、ヒエログリフは原則として彫刻される碑文用の文字です。それゆえ、石碑や棺などの面積的制約ゆえに、あるいは美しさを求めて文字の上下左右を入れ替えるような組版が行われます。

また、古代エジプト語ではLTR（Left-to-Right, 左から右に書く）・RTL（Right-to-Left, 右から左に書く）を混在させることが許容されます。以下は同じ意味（ウアブ神官の息子）になります。生き物の頭が向いている方が先頭です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185296/8f17fca6-9463-b89b-3d2c-674d931efb26.png)

また、縦書きも多用されます。古代エジプト語に対応させるi18nはかなり苦労しそうです。

### Manuel de Codage

組版ルールも含めてヒエログリフをコンピュータ上で表現する方法として、Manuel de codage des textes hiéroglyphiques en vue de leur saisie informatique（コンピューター入力用のヒエログリフテキストのコーディングマニュアル）、略して**[Manuel de Codage](http://www.catchpenny.org/codage/)**（マニュエル・ド・コダージュ、MdC）があります。

MdCの例を一部だけご紹介しましょう。

- ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185296/deb290cf-9e97-4437-3ed1-eb058e1c7f8d.png) → `i-ii-m-Htp`
- ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185296/a2b56a10-2263-a028-96c2-6e99e510acac.png) → `p*(t:Z4):pt`	

のように表記されます。これについて見ていきましょう。（画像は http://www.catchpenny.org/codage/ より引用）

`i-ii-m-Htp` （アメンホテプ）はかなり基本的な例です。`-`は単純に文字を結合するものです。
この場合、`i` と読む文字（M1）、`ii`と読む文字(M18)、`m`と読む文字（G17）、`Htp`と読む文字（R4）が並びます。 `i` と読める文字は複数あるのですが、その中でも最も一般的な文字（M1）が使われます。

続いて、 `p*(t:Z4):pt`を見ていきましょう。 `*` は文字を横方向に並べて置くもので、 `:` は上下に文字を並べて置くものです。`( )` は文字のグループ化です。
また、発音ではなく文字番号 `Z4` が登場しています。このように、MdC では発音だけではなく、Gardiner’s Sign List の番号を用いて文字を直接指定することも可能です。

実際に古代エジプト語を扱ったサイト、たとえば「[古代エジプト語のヒエログリフ入門：ロゼッタストーン読解](http://www.hituzi.co.jp/hituzigusa/category/rensai/hieroglyph/)」などを見ると、Gardiner's Sign List と MdC がよく利用されていることがわかります。

## 入力システム

上述した記法により、ラテン文字アルファベットを基本とした現代のコンピュータ上でヒエログリフを表現することが可能になりました。

- [Jsesh](https://github.com/rosmord/jsesh) というヒエログリフ用エディタが存在しており、MdCやパレットによる入力をサポートしています。
- [箕原 (2010)](https://portal.cuc.ac.jp/kg/japanese/researchersHtml/000529/REP_RONBUN/000529_REP_RONBUN_6.html)による入力システムの試作などもヒエログリフの入力を扱う試みとして挙げられます。

## Unicodeにおけるヒエログリフ

最近は普段からSNS上でヒエログリフをご覧になる機会が増えていると思いますが、これを支えているのがご存知 Unicode です。2009年の Unicode 5.2.0 で、SMP（追加多言語面）にヒエログリフなどが追加されています。

例えば `E16` は [U+130E3 EGYPTIAN HIEROGLYPH E016](https://codepoints.net/U+130E3) として登録されており、Unicode 上でのヒエログリフも Gardiner’s Sign List に由来するグリフ名を持っていることがわかります。

### フォント

これらのヒエログリフを実装しているフォントがいくつかあります。
[Bob Richmond氏によるリスト](https://github.com/HieroglyphsEverywhere/Fonts/blob/master/HieroglyphicFontList.md)が参考になるでしょう。

ちなみに、iOS や macOS でプリインストールされているのは Noto Sans Egyptian Hieroglyphs です。[参考](https://developer.apple.com/fonts/system-fonts/)）。
特にヒエログリフのフォントをインストールした覚えがない場合、iOS/macOS の環境ならNoto、Windowsなら Segoe UI Historic が使われていると考えてよいでしょう。

### 制御文字

Unicode 12.1 にて、**[U+13430 - U+1343F](https://www.compart.com/en/unicode/block/U+13430)** に制御文字が追加されています。これは MdC でも触れたような、「左右の結合」「上下の配置」などを実現するための文字です。

たとえば、![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185296/c1e55294-d761-b945-f39f-adcac46d3607.png)のような文字を組むとき、`U+133F2(𓏲)` `U+13430(制御文字)` `U+133CF(𓏏)` のように間に制御文字を挟みます。

現在、さらなる変更の提案がなされています。将来的に実装されうる仕様は提案書 [L2/20-176](http://www.unicode.org/L2/L2020/20176-hierogyph-cluster.pdf) に記載されているので、そちらをご参照ください（現時点での仕様についても言及があるので参考になります）。

まだ仕様変更が生じうることもあり、これらの文字に対応しているフォントは存在しないようです（2020年現在）。Noto で [Issue](https://github.com/googlefonts/noto-fonts/issues/1469) が上がっていはいるので、今後の動向を注視したいところです。

これらの制御文字への対応としては[リガチャ](https://en.wikipedia.org/wiki/Orthographic_ligature)が考えられますが、提案に記載されている結合パターンによっては下記のように凄まじく複雑なものも考えられるため、どのような実装をするかは入念な検討が必要になるでしょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185296/a26b97ba-9854-776a-dd74-ce59c05ce074.png)