2011/07/10

MacOS XのAddress BookとGoogle Contacts同期の姓名逆転問題を検証する

MacOS X 10.6(Snow Leopard)へ付属のAddress BookにはGoogle Cotactsと自動同期させる仕組みが備わっています(Address Bookによる自動同期の仕組みは以前のMacOS Xから備わっており、10.6からの追加機能ではありません)。

Google ContactsはGmailをはじめとする様々なGoogleのサービスで利用されているため、各種アドレス帳アプリケーションと同期ができると便利です。

Address Bookで自動同期の設定を行うには、Address BookのPreferencesからAccountsを選択し、「Synchronize with Google」を有効にします。Google Accountを入力すれば設定完了です。


同期は一定間隔で自動的に行われます。または、Menu BarにあるSyncアイコンから明示的に同期させることも出来ます。

しかしこのAddress Bookに備わった自動同期を用いて同期を行った場合、Address BookとGoogle Contactsとで姓名の表記が入れ替わってしまいます。正確に言えば、姓名の入れ替わった別アドレスデータが作られてしまうため、アドレス帳の項目が2倍に増えてしまいます。

Address BookとGoogle Contactsの同期情報を調べてみたところ、以下のことが分かりました(なお、Address Book、Google Contactsとも利用言語環境で動作が異なる場合が考えられますので、ご注意ください)。

  • データフォーマットはAtomベース
  • 姓名データは「title」フィールドへ納められる(e.g. <title>太郎 山田</title>)
  • 但しAddress BookとGoogle Contactsでは、titleフィールドの構築や解釈の方法が異なっている

Address BookがGoogle Contactsへデータを送出する際、「名」「スペース」「姓」形式でデータを格納します(e.g. <title>太郎 山田</title>)。

姓名何れか一方にデータが入力されている場合は、スペースを挿入することなく、そのデータだけを格納します(e.g. <title>山田</title>)。

一方Address BookがGoogle Contactsからデータを受け取る際には、やや複雑な処理が行われます。

<title>フィールドへスペースが含まれていない場合、全てのデータを「名」として解釈します。この場合「姓」は空白のままです(e.g. <title>太郎山田</title>は「太郎山田」という名になる)。

<title>フィールドへスペースが含まれている場合、基本的にはスペースの前側を「名」として、残りを「姓」として解釈します(e.g. <title>太郎 山田</title>は「山田」が姓、「太郎」が名になる)。

ただし、スペースで区切られた何れかの単位へ「,」が含まれている場合、その「,」が含まれた単位を姓として解釈します。「,」自体は姓へ含まれません(e.g. <title>太郎, 山田</title>の場合「太郎」が姓に、「山田」が名になる。一方<title>太郎 山田,</title>の場合「山田」が姓に、「太郎」が名になる)。

一方Google Contacts は、送り出し時にやや複雑な規則が適用されます。

姓、名ともに「,」が含まれていない場合には、「姓」「名」の順にスペースを挟むこと無く格納されます(e.g. <title>山田太郎</title>)。

姓名何れかに「,」が含まれている場合、「名」「スペース」「姓」の順で格納されます。ただしAddress Bookと異なり、「,」の含まれているフィールドを特別扱いすることはありません(e.g. <title>太郎, 山田</title>や<title>太郎 山田,</title>)。

但し、これらの規則が適用されるのは、「姓」「名」のフィールドをGoogle Contacts側で入力している、または、変更している場合に限られるようです。Address Bookから送り込まれた姓名は、Google Contactsで変更を行わない限りそのまま利用され、「名」「スペース」「姓」の形式が保持されたまま格納されます。

Google ContactsがAddress Bookのデータを解釈する場合の規則は単純です。

もし<title>フィールドへスペースが含まれていない場合、Address Book同様、全てのデータを「名」として解釈します。この場合「姓」は空白のままです(e.g. <title>太郎山田</title>は「太郎山田」という名になる)。

スペースが含まれている場合には、スペースで区切った前側を「姓」、後半を「名」として解釈します。「,」の有無などは考慮されません(e.g. <title>太郎 山田</title>の場合、「太郎」が姓、「山田」が名になる)。

概略をまとめたものを次に示します。ABはAddress Book、GCはGoogle Contactsです。また、<title></title>は<t></t>に省略しています。空白は「␣」で示します。Google Contactsの表記に於ける姓名の情報は、GmailのContactsで確認できる「詳細」を用いて確認しています。

アドレス帳に於ける表記から生成される伝送上の形式

  • 姓: (空) / 名: 山田太郎
    • AB: <t>山田太郎</t>
    • GC: <t>山田太郎</t>
  • 姓: 山田 / 名: 太郎
    • AB: <t>太郎␣山田</t>
    • GC: <t>山田太郎</t>
  • 姓: 山田, / 名: 太郎
    • AB: <t>太郎␣山田,</t>
    • GC: <t>太郎␣山田,</t>
  • 姓: 山田 / 名: 太郎,
    • AB: <t>太郎,␣山田</t>
    • GC: <t>太郎,␣山田</t>


伝送上の形式から生成されるアドレス帳に於ける表記

  • <t>山田太郎</t>
    • AB: 姓: (空) / 名: 山田太郎
    • GC: 姓: (空) / 名: 山田太郎
  • <t>太郎␣山田</t>
    • AB: 姓: 山田 / 名: 太郎
    • GC: 姓: 太郎 / 名: 山田
  • <t>太郎␣山田,</t>
    • AB: 姓: 山田 / 名: 太郎
    • GC: 姓: 太郎 / 名: 山田,
  • <t>太郎,␣山田</t>
    • AB: 姓: 太郎 / 名: 山田
    • GC: 姓: 太郎, / 名: 山田


Address BookとGoogle Contactsの同期は、厳密な整合性が確立出来ていないように思えます。

この両者の複雑な関係を元に運用案を考えてみましょう。

分かることは、Address Bookで姓名を分離して入力されたデータは、Google Contacts側では必ず姓名が逆転してしまう、ということです。つまり、Address Book側での姓名分離を諦めるか、入力はGoogle Contacts側に限るか、のいずれかを選択しなければなりません。

Address Book側での姓名分離を諦める場合、名に「山田 太郎」と入力してしまう方法が考えられます。この場合Address Bookから送出されるデータは<title>山田 太郎</title>となることから、Google Contacts側では、「山田」が姓に、「太郎」が名に解釈されることになります。結果、Google Contacts側では姓名が期待通りに分離表示されます。また、Google Contacts側でデータを改変した場合でも、Google Cotacts側から送出されるデータは、<title>山田太郎</title>となることから、Address Book側では名に「山田太郎」が格納され、元の状態と一致します。

次案としてはGoogle Contacts側でのみデータを入力し、且つ、姓に「,」を付加する、という方法です。例えば、姓に「山田,」、名へ「太郎」と入力する、という運用になります。この場合、Google Contactsからは<title>太郎 山田,</title>と送出されることになりますが、Address Book側は、「,」付きのフィールドを姓と扱うため、姓に「山田」、名に「太郎」が表示されます。但し、Address Bookでデータを変更してしまうと、Google Contactsへは、姓が「太郎」名が「山田」のデータが新規に作られてしまうでしょう。

結局、どちらの方法も一長一短があり、今ひとつすっきりした解法は難しいようです。

なお、自動処理を諦め、データの同期だけを実現したい場合には、Address Book、Google ContactsともにvCard形式でのデータインポート、エクスポートが最も確実でしょう。この場合、姓名の逆転現象は発生せず、また姓名のふりがなフィールドなど、自動同期では無視されていたデータも維持されます。

一点残念な点としては、Address Bookで「Make as a Company」と指定したデータも個人データとして扱われてしまうことが挙げられます。この為、Google ContactsからvCard形式でデータをエクスポートし、それをAddress Bookでインポートすると、「Make as a Company」と指定されたデータが重複してしまうことになります。

ソーシャルサービスの拡大により、アドレス帳データの相互運用は、より重要度を増して来ていると思います。OS X Lionに搭載されるAddress BookとiCloudが、これらの問題へどのような解を示してくれるか、楽しみにしています。

0 件のコメント:

コメントを投稿