鬼門:フリガナ

ownCloud から Nextcloud への移行を進めている。いつも面倒なのがフリガナだ。ownCloud のアドレス帳アプリ (Contacts/OC) は t-bucchi 氏の仕事 https://petit-noise.net/blog/phonetic-name-patch-is-merged-by-owncloud-contacts/ の恩恵に与り感謝に堪えないのだが、Nextcloud のアドレス帳アプリ (Contacts/NC) では残念ながらフリガナを扱えない。まったく細かいことなのだが、極東特殊民族語にはずっとついて回る話だ。アプリの中を覗いてみたがだいぶ構成が変わっているうえ、自分は PHP や JS を使いつけておらず、それなりに手間取りそうである。

vCard は1995年に策定されたらしい。最新の規格は vCard 4.0だ。ライブラリーは Sabre/DAV などいくつかあって、4.0もサポートしている。しかしどうもアプリケーションレベルでは3.0サポートが精々のようだ。Contacts/OC のフリガナ対応も X-PHONETIC-* を用いている。

もともと、フリガナは規格に入っていない。日本では携帯電話 (ガラケー) の普及に伴いアドレス帳の交換が必要になり vCard が広く利用されるようになったが、日本人にとってはフリガナはとても大切なものであるから、各社知恵を絞った (だろう) 結果、SOUND プロパティーに格納するようになった。これは元来 μLaw などの音声データを格納するためのものだ。ふりがなと発音は異なる概念である。ガラケー業界はここにシフトJIS (正確にはたぶんコードページ932) の文字列を格納した。まだ Unicode は規格として未成熟だったからだろう。後にスマートフォンの普及に伴って Unicode (の記述方式である UTF-8) が一般的になっていく。これと前後して vCard 3.0では SORT-STRING プロパティーが用意された。RFC には “To specify the family name or given name text to be used for national-language-specific sorting of the FN and N types.” とある。特にフリガナ用ではなく、どんな氏名表記体系であっても整列用の別途の表現を収容するために用意されたものだ。これもまたフリガナではなかった。vCard 4.0では SORT-AS パラメーターが設けられ、複数の整列キーを使えるようになった。これはこれで進歩だったが、すでにApple が X-PHONETIC-FIRST-NAME, X-PHONETIC-LAST-NAME を使っていて、目下これが事実上の標準となってしまっている。

vCard 4.0のサポートを明示しているアプリケーションは意外に目にすることがない。Thunderbird + CardBook のほか eM Client が4.0対応という話もあった。実際に eM Client で vCard を出力してみると、vCard 4.0ではあるようだがフリガナは X-PHONETIC-* で表現されている (追記: というのは誤りで、eM Client はふりがなを扱わないものの CardDAV / VCard から取り込んだデータの X-PHONETIC-* を破壊しないということのようだ)。 SORT-AS は N;SORT-AS=”{surname}, {givenname}”:{surname};{givenname};{middlename};{prefix};{postfix} のように用いられている。まさに整列用で正しいのだが、フリガナとしては使えない。結局、市場の多くで vCard 3.0 + X-PHONETIC-* が使われている模様である。

Sabre/DAV のドキュメントには次のような記載がある ( http://sabre.io/dav/building-a-carddav-client/#retain-full-vcards%21 ):

Our recommendation

  1. Download the vCard
  2. Retain the entire vCard and store it locally, or at least in some lossless way
  3. Parse the vCard and populate your models with the information that is relevant to you.
  4. Keep a reference to which vCard property maps to what information in the model.

これを遵守しているのか、Contacts/NC も自身が知らない X-PHONETIC-* を破壊せずにおくようだ。CardDAV サーバーとしての運用には堪えられる。