「BASIOを使っていて、連絡先を開いたら、『電話のみ(非同期)』という表示されて、Googleドライブにバックアップできない。非同期ってどういうこと?」という相談がありました。


- Androidスマートフォンのローカル保存の連絡先には、2種類あります。
- 「本体」と「電話のみ(非同期)」です。
- 「電話のみ(非同期)」は、ガラケー時代の古い連絡先データをそのまま取り込んだものであることが多いです。
連絡先にあった見慣れない表記は、AndroidスマートフォンのContactContractの仕組みにつながっていました。
「電話のみ(非同期)」が気になった
「非同期」は、いま登録しているこの連絡先たちは、スマートフォンの本体にしか保存されていないということです1。
Androidスマートフォンでは、Googleアカウントと「同期」することで、連絡先をオンライン上にバックアップするのが一般的です。この方法では、機種変更のときに新しいスマートフォンでGoogleアカウントにログインするだけで、自動的に連絡先が復元されます。
反対に、「非同期」のままだとauやメーカーの提供する「データ移行」で連絡先が引き継ぐ必要があります2。何より、スマートフォンが故障・紛失してしまったときに困ります。
電話帳アプリから「登録先アカウント」を確認する
しかも、困ったことに、連絡先のメニューから保存先アカウントを変更することもできませんでした。通常は、連絡先の保存先を「本体」から「Googleアカウント」に変更することで、保存場所を変更できるのですが、変更する項目がなかったのです。
そこで、そもそも連絡先がどこに保存されているのか、「電話帳」アプリの「設定・管理」から「登録先アカウント」を確認してみました。
スマートフォンは、「デジタルの電話帳」を複数持つことができます。いくつかのアカウントごとに電話帳を作り、その中に連絡先を登録できるのです。
これは、スマートフォン本体だけ記録する連絡先と、クラウド上にバックアップする連絡先を区別できようにするためです。
すると、「本体(0件)」と「Googleアカウント(2件)」、そして「すべてのアカウント(52件)」という選択肢が表示されていました。

計算が合いません。どうも、「電話のみ(非同期)」の連絡先は、「本体」のメールアカウントとも認識されていないようなのです3。
「Googleコンタクトの同期」でローカル連絡先を引っ越す
「電話のみ(非同期)」とは、「まだインターネットの外にいる連絡先」だったのです。
そこで、「設定」のGoogleサービスにある「Googleコンタクト」の設定画面を開いてみました。
すると、「自動同期はOFFです」「デバイスとSIMの連絡先も同期する:OFF」と表示されていました。


そこで、「デバイスとSIMの連絡先を自動的に同期する」を有効化しました4。
しばらく待つと、「Googleコンタクトに同期が完了しました」という通知が出て、「電話のみ(非同期)」だった連絡先が、Googleアカウントに保存されました。
つまり、もう本体だけに閉じ込められた状態ではありません。
Googleコンタクトで確認できる
同期が完了して、パソコンで contacts.google.com にアクセスしてGoogleアカウントでログインすると、スマホに入っていた名前と電話番号が並んでいました5。
つまり、これがクラウド上に安全に保存された、という意味です。
「同期」というのは、普段はあまり意識しないけれど、“クラウドとつながっている”かどうかで、データの保存場所がまったく違う、ということです。スマートフォンに登録されている「連絡先」は、「電話のみ」と「Google」と別の世界の構造になっていたのです。
ローカルアカウントと「アカウントに紐づかない連絡先」の違い
Androidスマートフォンのローカルの連絡先は、通常「本体」に保存されます。しかし、今回はこの中とは別に「電話のみ(非同期)」という区分で保存されていました。この違いはなんなのでしょうか。
この「本体」と「電話のみ(非同期)」の違いは、Androidの連絡先データベースの内部的な保存先の構造(アカウントタイプ)に起因します。
- ローカルアカウント
- アカウントに紐づかない連絡先レコード
「本体(Device)」は、Android端末に設定されている「ローカルアカウント」の一種です。
Googleアカウントのように同期機能はありませんが、内部的には「device」というアカウント名で管理されています。一部の機種(特にAOSP準拠の端末やPixel)では、これが「端末に保存」として表示されます。
つまり、「本体」はAndroidが正式に認識しているローカルアカウントです。
機能的にはオフライン保存ですが、システム的には“アカウントのひとつ”です。
一方、「電話のみ(非同期)」は、「アカウントに紐づかない連絡先レコード」です。
Androidの連絡先アプリは、裏側で「ContactsContract」というデータベースを使っています。そこに所属先(ACCOUNT_NAME / ACCOUNT_TYPE)が空白の状態で登録されたデータがこの区分になります。
システムは「本体」とも「Google」とも認識せず、
「保存先変更」や「同期設定」の対象にも出てこないのです。
「本体(Device)」の場合は、ACCOUNT_NAMEが device、ACCOUNT_TYPE が local などと登録されています。
AndroidのContactsContract(コンタクトコントラクト)
AndroidのContactsContractは、連絡先データを管理するための内部データベース構造です。
- Contacts(統合された人物)、
- RawContacts(アカウント別の生データ)、
- Data(電話・メールなどの項目)
の三層で構成されます。これは、同じ「連絡先」を異なる粒度で管理するための階層的な構造です。
Contacts(人物統合)
├─ RawContacts(アカウントごとの実体)
│ ├─ Data(電話・メールなど個別情報)
│ ├─ Data(住所・誕生日・会社など)
│ └─ ...
└─ RawContacts(別アカウントの同一人物)
└─ Data(同様に属性情報)
ContactsContract.Contactsテーブルは、統合連絡先を表すテーブル(1人に1レコード)です。主なカラムは、
_ID:連絡先のIDDISPLAY_NAME_PRIMARY:表示名PHOTO_URI:写真のURIHAS_PHONE_NUMBER:電話番号の有無(0/1)
これは、1人の人物を表す「見かけ上の連絡先」で、複数のアカウントに同じ人が登録されている場合(例:GoogleとSIMの両方に「山田太郎」)、それらをまとめた代表的な統合ビューです。
ContactsContract.RawContactsテーブルは、各アカウント(Google / SIM / Device など)ごとの実データです。Contactsの子要素として複数存在でき、統合の単位になります。
_ID:RawContactのIDCONTACT_ID:統合先のContacts IDACCOUNT_NAME:Googleアカウント名(例:user@gmail.com)ACCOUNT_TYPE:アカウント種別(例:com.google,com.android.localphone,com.android.simなど)DATA_SET:一部のアカウントが持つ追加情報
各RawContactにはACCOUNT_TYPEとACCOUNT_NAMEが設定され、Googleならcom.google、端末本体ならlocalなどで識別されます。
一方、「電話のみ(非同期)」はこれらの値が空の孤立データで、どのアカウントにも属さず同期対象外です。
ContactsContract.Dataは、電話番号やメールアドレスなどの属性データが入るテーブルで、各RawContactが持つ詳細情報で電話番号・メールアドレス・住所など、1件ごとに1行になっているデータベースです。主なカラムは、
RAW_CONTACT_IDMIMETYPEDATA1〜DATA15:属性値(例:電話番号、メールアドレス)
各行はMIMEタイプで分類されます(vnd.android.cursor.item/phone_v2, vnd.android.cursor.item/email_v2, vnd.android.cursor.item/name, vnd.android.cursor.item/photo)。
「アカウントに紐づかない連絡先レコード」ができる理由
このような連絡先は、主に以下の経路で発生します:
- キャリアや端末メーカー独自のアプリ経由で保存された場合
- ガラケーや旧Androidからのデータ移行(赤外線やSDカード経由など)
- 連絡先アプリがローカル書き込みモードで登録した場合
これらは、ContactsContractのデータベースができる以前の連絡先の仕組みだからです。
BASIOの電話帳アプリは独自実装で、たとえば vCardによる連絡先のインポートが可能です6。vCard(RFC 6350など)には「AccountType(アカウントタイプ)」というプロパティは定義されていません。
つまり、vCardファイルをエクスポート/インポートしても、アカウント(どのアカウントに属するか)情報が「標準プロパティ」として含まれていません。製品により拡張(X-PROPERTY)として保存されていなければ、空白になってしまうか、既存のメールアカウントに入れる形になります。
- Androidの一部UIでは“Phone-only, unsynced”と表示され、ローカル保存であることを示します。Googleは「デバイスとSIMの連絡先」をGoogle連絡先として保存・同期可能と定義しています。 – Guide for the Vodafone Smart E8 – Create contact / デバイスと SIM の連絡先のバックアップと同期を行う / Sync Google Contacts with your mobile device or computer
- ローカル/SIMの連絡先は、そのままでは新端末へは自動移行されません。Google連絡先として保存・同期すると、サインインで新端末へ同期されます。 – Back up & sync device & SIM contacts / Google コンタクトをモバイル デバイスやパソコンと同期させる / 連絡先のエクスポート、バックアップ、復元
- ContactsContractの設計上、
ACCOUNT_TYPE/ACCOUNT_NAMEを持たない“ローカル不可視”な連絡先は、アカウント一覧の対象外になり得ます(実際の表示は機種/アプリ依存)。 – ContactsContract.Directory – LocalInvisible の説明 / ContactsContract.SyncColumns.ACCOUNT_NAME / ACCOUNT_TYPE / Groups のACCOUNT_TYPE/NAMEがnullだとUIに出ない事例 - この設定をONにすると、端末およびSIM上の連絡先をGoogle連絡先として保存・同期できます(1つのGoogleアカウントを選択)。 – デバイスと SIM の連絡先のバックアップと同期を行う(日本語) / Back up & sync device & SIM contacts(英語) / Sync Google Contacts with your mobile device or computer
- Google連絡先はログインした端末と自動同期され、ウェブのGoogle Contactsでも閲覧・編集できます。 – Sync Google Contacts with your mobile device or computer / Google コンタクトをモバイル デバイスやパソコンと同期させる / Back up & sync device & SIM contacts
- BASIOの公式オンラインマニュアルは、Googleアカウント同期やvCardによるインポート/エクスポートを案内しています(ただし「電話のみ(非同期)」という語は明示せず)。 – BASIO4:電話帳について(Google等と同期) / BASIO4:連絡先をインポート/エクスポートする / BASIO:発着信履歴から登録・赤外線受信