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 件のコメント:
コメントを投稿