Googleコンタクト から iCloud連絡先 へ完全移行する手順 - 連絡先 / コンタクトの使い方まとめ その4 【Android → iPhone】

iPhone上の 連絡先アプリ で Googleコンタクトのデータを同期(共有)している状態から、iPhone と iCloud連絡先 連携のみの状態に完全移行します。

今回は、「Android と iPhone のみで完全移行する」のと「Mac (パソコン) を利用して完全移行する」の2つの手順で考えてみます。

 

👥 Android と iPhone のみで完全移行する

スタートは、iPhone上の連絡先アプリ で Googleコンタクト のデータを同期 (共有) している状態からです。

iPhone 上の連絡先アプリで Googleコンタクト のデータを同期 (共有) している状態から、iPhone + iCloud 連絡先に完全移行します。

iCloud連絡先を有効化 します。

iCloud 連絡先を有効化 します。

iPhone連絡先アプリ から Googleコンタクトアカウントを無効化 します。

iPhone 連絡先アプリ からGoogle コンタクトアカウントを無効化します。

Android側で vCard 形式でエクスポートした vcfファイルをメールに添付して iPhone に送信します。

Android 側で vCard 形式でエクスポートする。 メールに添付して iPhone に送る。 iPhone 上で受信したメールの添付ファイルをタップしてインポートする。

iPhone上で受信したメールの添付ファイルをタップしてインポートします。

以下のようになり完全移行完了しました。

完全移行完了。

 

👥 Mac (パソコン) を利用して完全移行する

Mac上でやるとファイル移動の手間がかからず、複数のGoogleコンタクトアカウントを持っているときなどにも柔軟に操作できます。

GoogleコンタクトデータをAndroid、Mac、iPhone の3つで同期(共有)しているところから始めてみます。

連絡先データはすべてGoogleコンタクトに保存する。 メールの設定との関係もある。 デフォルトのアカウントの設定で新規保存先をGoogleアカウント側に向けておく必要がある。

iPhoneで Googleアカウントを無効化 します。

iPhone で Googleアカウントを無効化します。

Mac と iPhone で iCloudを有効化 します。

Mac と iPhone で iCloud を有効化します。

Mac上で、Googleコンタクト や 同期済みの連絡帳アプリ からエクスポートします。

Mac 上でGoogleコンタクトや連絡帳アプリからエクスポートする。 Mac 上でやるとファイル移動の手間がかからないので簡単です。

ブラウザからは、Googleコンタクトからエクスポートです。
Mac上で、Googleコンタクト や 同期済みの連絡帳アプリ からエクスポートします。

連絡先アプリでは、メニューから以下でエクスポートします。


[ファイル]

  ↓

[書き出す]

  ↓

[vCardを書き出す]

Mac上で、Googleコンタクト や 同期済みの連絡帳アプリ からエクスポートします。

続いて、パソコン上で エクスポートして不要になった Googleコンタクトアカウントを無効化します。

メニューから、


[連絡先]

  ↓

[環境設定]

  ↓

[アカウント]

  ↓

(Googleコンタクトアカウントを選択)

  ↓

[このアカウントを有効にする] をOFF

パソコン上で Google コンタクトを無効化します。

エクスポートしたvCardファイルを iCloud連絡先にインポートします。

先に、パソコン上で Google コンタクトを無効化する。 iCloud 側にインポートする。
メニューから以下でインポートです。


[ファイル]

  ↓

[読み込む]

  ↓

(vCardファイルを選択)

お疲れさまです。完全移行完了です。

Google と Apple のクラウドを利用した連絡先データ連携系統がくっきり2つに分かれました。

iPhone上では、Googleコンタクトを利用せずに連絡先データを使えるようになります。

完全移行完了。

iCloud 連絡先 にデータを完全移行することで、Googleコンタクトの設定は関係なしに、Appleデバイス間で連絡先データを共有できます。

クラウド側のデータを参照するアプリによって制限があるのがややこしくさせています。

Googleコンタクト から iCloud連絡先 へ完全移行する手順 - 連絡先 / コンタクトの使い方まとめ

まあ、サードパーティアプリでできるのだろうが、まずは、Google、Apple それぞれの意図意向を把握しておきます。

👉 連絡先をクラウド上に保存する - 連絡先 / コンタクトの使い方まとめ その1【Android / iPhone】 
👉 Google コンタクト データをAndroid と iPhone で共有する - 連絡先 / コンタクトの使い方まとめ その2【Android / iPhone】 
👉 連絡先アプリ 必ず把握しておくべき全設定画面別使い方メモ- 連絡先 / コンタクトの使い方まとめ その3【Android → iPhone】 
👉 iPhone連絡先アプリ だけが iCloud連絡先 のデータをエクスポートできない件 


連絡先をクラウド上に保存する - 連絡先 / コンタクトの使い方まとめ その1【Android / iPhone】

Android や iPhone 端末の連絡先の使い方を整理しておきます。

概念的に理解しておくと、今後の使い方や仕様の変更にも対応できると思います。

Android や iPhone 端末の連絡先の使い方を整理しておきます。

インターネット経由のクラウド上に実体を保存することで、別端末やパソコンからも連絡先データを参照できるようになります。

インターネット経由のクラウド上に実体を保存することで、別端末やパソコンからも連絡先データを参照、編集できるようになります。

👉 RFC 6352 - CardDAV: vCard Extensions to Web Distributed Authoring and Versioning (WebDAV) 

👉 RFC 2518 - HTTP Extensions for Distributed Authoring -- WEBDAV 

Android、iPhone 端末に置き換えてみると、以下のようになります。

モバイル デバイスやパソコンと同期させる

Android では、「Googleコンタクト」をインストールします。

Googleコンタクト

重要: 職場や学校の Google アカウントを使用している場合、役職などの連絡先情報をすべて取得するには連絡帳アプリをダウンロードします。

👉 Google コンタクト - Google Play のアプリ 
👉 Google コンタクトをモバイル デバイスやパソコンと同期させる - パソコン - 連絡先 ヘルプ 

iPhone では、iCloud の 連絡先 を オン にします。

Apple iCloud 連絡先 オン

1. 「設定」>「[ユーザ名]」>「iCloud」の順に選択します。
2. 「連絡先」をオンにします。
3. 「結合」するか「キャンセル」するかを確認する画面では、「結合」をタップします。

ちなみに、iCloud の 連絡先 を オフ にすると、端末側にデータを残すかどうか、が選択できます。

ちなみに、iCloud の 連絡先 を オフ にすると、端末側にデータを残すかどうか、が選択できます

👉 iCloud 連絡先の設定と使用 - Apple サポート (日本) 

クラウド化ができていると以下リンクからパソコンブラウザで連絡先を参照、編集できるようになります。

👉 Google コンタクト 
👉 iCloud連絡先 

👉 Google コンタクト データをAndroid と iPhone で共有する - 連絡先 / コンタクトの使い方まとめ その2 【Android / iPhone】 
👉 連絡先アプリ 必ず把握しておくべき全設定画面別使い方メモ- 連絡先 / コンタクトの使い方まとめ その3 【Android → iPhone】 
👉 Googleコンタクト から iCloud連絡先 へ完全移行する手順 - 連絡先 / コンタクトの使い方まとめ その4 【Android → iPhone】 
👉 iPhone連絡先アプリ だけが iCloud連絡先 のデータをエクスポートできない件 


入力ソース (英数/かなモード) を自動で切り替える

うざいです、これ。

入力ソース (英数/かなモード) を自動で切り替える

一日に何度も日本語モードのまま英数を入力しています。

どうにかしたいです。

 

「書類ごとに入力ソースを切り替える」

まずは、macOS の設定で自動切り替えする方法です。


システム環境設定

  ↓

キーボード

  ↓

入力ソース

書類ごとに入力ソースを切り替える

開いている各ウィンドウで利用していた入力ソースを覚えていますので、フォーカスを変えるとそのウインドウの入力ソースに自動的に切り替わるようになります。

逆に、勝手に切り替わる、と思える場合はここを確認するといいかもしれません。

👉 書類ごとに異なる日本語入力ソースとは - Apple コミュニティ 
👉 入力について - Apple コミュニティ 

 

iTerm 「Send text at start」

もう一つの方法は、ターミナルアプリの iTerm の設定で起動時に切り替える方法です。


Preferences

  ↓

Profiles

  ↓

General

iTerm 「Send text at start」

「Send text at start」の欄に以下のスクリプトを書きます


osascript -e 'tell application "System Events" to key code 102'

キーコード 「102」 は 「英数」 キーです。(ちなみに 「104」 は 「かな」。)

これで、iTerm 起動時に、スクリプトが実行され、英数キーが押された状態となりますので、そのままお好きな英数のコマンドをどうぞ。

osascript -e 'tell application "System Events" to key code 102'

👉 iTermの起動時に日本語入力をOFFにする | blog.teapla.net 
👉 Documentation - iTerm2 - macOS Terminal Replacement 
👉 「Key Codes」 is a little utility that displays the key code, unicode value, and modifier keys state for any key combination you press. If you're a developer, this might be useful to you. 


ルーターの設定画面が開けないのだが

ルータの設定を変更しようと思い、

OSネットワークの設定で、

ルーターのIPアドレスを見て、

ネットワーク 設定 デフォルトゲートウェイ

ブラウザのURLバーに入力して、

設定画面にアクセス!

設定画面にアクセスできない

なんでや。

Buffalo の Wi-Fiルーターなんだが、

なんでや。

 

スマホアプリで確認

スマホアプリを入れたら、 IPアドレスが分かります。

StationRadar


192.168.150.33

👉 StationRadar - Google Play のアプリ 

このIPアドレスでアクセスするといける。

ブリッジモード

どうやら「ブリッジモード」のようです。

設定で自動に

「ルーター」でなく「ブリッジ」に

なっていたようです。

 

パソコンだけで確認できないのか。

いちいちアプリを入れるのだるいです。

mac で MAC を調べます。


~ % get-oui -v
Renaming ieee-oui.txt to ieee-oui.txt.bak
Fetching OUI data from http://standards-oui.ieee.org/oui/oui.txt
Fetched 5029216 bytes
Opening output file ieee-oui.txt
31329 OUI entries written to file ieee-oui.txt

~ % sudo arp-scan -l
Password:
Interface: en1, type: EN10MB, MAC: f8:ff:c1:3a:12:ee, IPv4: 192.168.150.30
Starting arp-scan 1.9.7 with 256 hosts (https://github.com/royhills/arp-scan)
192.168.150.1	98:2c:ba:40:78:c2	Fibergate Inc.
192.168.150.5	ec:12:80:22:1b:c0	D-Link International
192.168.150.33	84:1f:ec:9c:26:08	BUFFALO.INC
192.168.150.34	14:12:a3:91:2e:e0	Motorola Mobility LLC, a Lenovo Company
192.168.150.42	d0:17:82:f3:68:2a	AzureWave Technology Inc.
192.168.150.220	01:d0:41:d6:1f:51	AMIGO TECHNOLOGY CO., LTD.
192.168.150.52	8c:45:30:14:80:21	Murata Manufacturing Co., Ltd.

BUFFALO は、


192.168.150.33

 

🧑🏻‍💻 参考

👉 【macOS】ルーターの注意喚起が出たら arp-scan がいいよ hatena-bookmark

👉 端末IPアドレス取得 

👉 ブリッジ設定にする必要はありますか/どのような場合にルーター機能を停止させますか | バッファロー 

👉 【謎?】QRコードによるデバイスのペア設定 - Android11 


【Flow】 shareIn() と stateIn()

意訳。

Flow.shareIn()

Flow.shareIn
コールドフローを、指定されたコルーチンスコープで開始されるホットな SharedFlow に変換し、上流側フローの単一の実行インスタンスからの emit を複数の下流側サブスクライバと共有し、指定された数の replay 値を新しいサブスクライバに再生します。SharedFlow の一般的な概念についてはドキュメントを参照してください。

共有コルーチンの開始は、started パラメータで制御され、以下のオプションがサポートされています。

- Eagerly
最初のサブスクライバが現れる前から上流のフローが開始されます。この場合、replay パラメータで指定された最新の値を超えて上流から emit された全ての値は直ちに破棄されますのでご注意下さい。

- Lazily
最初のサブスクライバが現れた後に上流のフローを開始します。この場合、最初のサブスクライバが emit されたすべての値を取得することが保証されますが、後続のサブスクライバは最新の replay 値のみを取得することが保証されます。すべてのサブスクライバがいなくなっても、上流のフローは継続してアクティブですが、サブスクライバがいない場合は、最新の replay 値のみがキャッシュされます。

- WhileSubscribed()
最初のサブスクライバが現れたときに上流のフローを開始し、最後のサブスクライバが消えたときに即座に停止し、リプレイ・キャッシュを永遠に維持します。WhileSubscribed() には、ドキュメントで説明されているように、追加のオプション設定パラメータがあります。

- SharingStarted
インターフェースを実装することで、カスタムストラテジーを提供することができます。

shareIn オペレータは、作成や維持にコストがかかるコールドフローがあり、その値を収集する複数のサブスクライバがある場合に便利です。

例えば、バックエンドから高コストなネットワーク接続を介してメッセージが送られてきて、その確立に多くの時間を要するフローを考えてみましょう。

概念的には次のように実装されます。


val backendMessages: Flow<Message> = flow {
  connectToBackend() // takes a lot of time
  try {
    while (true) {
      emit(receiveMessageFromBackend())
    }
  } finally {
    disconnectFromBackend()
  }
}

このフローをアプリケーションで直接使用する場合は、収集するたびに新しい接続が確立されるため、メッセージが流れ始めるまでに時間がかかります。しかし、次のように1つのコネクションを共有して、それを確立することができます。


val messages: SharedFlow<Message> = backendMessages.shareIn(scope, SharingStarted.Eagerly)

これで messages から1つのコネクションがすべてのコレクター間で共有され,必要なときにはコネクションを確立しておくことができます。

* 上流の完了とエラー処理

上流側フローの通常の完了は、サブスクライバには影響を与えず、共有コルーチンは継続して実行されます。SharingStarted.WhileSubscribed が使用されている場合は、上流側が再び再開されます。それの完了時に特別なアクションが必要な場合は、shareIn オペレータの前に onCompletion オペレータを使用して、以下のように特別な値を emit することができます。


backendMessages
  .onCompletion { cause -> if (cause == null) emit(UpstreamHasCompletedMessage) }
  .shareIn(scope, SharingStarted.Eagerly)

上流のフローで例外が発生した場合、どのサブスクライバにも影響を与えることなく共有コルーチンが終了し、それが起動したスコープで処理されます。shareIn オペレータの前に catch や retry オペレータを使用することで、カスタムの例外処理を設定することができます。例えば,IOException が発生したときに1秒の遅延で接続を再試行するには,次のようにします.


val messages = backendMessages
  .retry { e ->
    val shallRetry = e is IOException // 他の例外はバグ
    if (shallRetry) delay(1000)
    shallRetry
  }
  .shareIn(scope, SharingStarted.Eagerly)

* 初期値

上流がまだデータをロード中であることをサブスクライバに知らせるために、特別な初期値が必要な場合は、上流のフローに onStart オペレータを使用します。以下のようになります。


backendMessages
  .onStart { emit(UpstreamIsStartingMessage) }
  .shareIn(scope, SharingStarted.Eagerly, 1) // 最新のメッセージを1つ再生する

* buffer と conflate

shareIn オペレータは、別のコルーチンで上流のフローを実行し、buffer オペレータの説明にあるように、replay サイズまたはデフォルト (大きい方) のバッファを使用して、上流からの emit をバッファリングします。このデフォルトのバッファリングは,shareIn コールの前に buffer または conflate を付けることで,明示的なバッファ設定で上書きすることができます。

- buffer(0).shareIn(scope, started, 0) は、デフォルトのバッファサイズを上書きし、バッファのない SharedFlow を作成します。実際には、上流のエミッタとサブスクライバの間で順次処理が行われ、すべてのサブスクライバが値を処理するまでエミッタが停止するように設定されます。なお、サブスクライバがいない場合でも、値は直ちに破棄されます。

- buffer(b).shareIn(scope, started, r), replay = r, extraBufferCapacity = b の SharedFlow を作成します。

- conflate().shareIn(scope, started, r) が作成されます。

Flow.stateIn()

Flow.stateIn
コールドフローを、与えられたコルーチンスコープで開始される ホットな StateFlow に変換し、上流のフローの単一の実行インスタンスから最も新しく emit された値を複数の下流のサブスクライバと共有します。StateFlow の一般的な概念についてはドキュメントを参照してください。

共有コルーチンの開始は、shareIn オペレータのドキュメントで説明されているように、started パラメータによって制御されます。

stateIn オペレータは、ある状態の値の更新を提供するコールドフローがあり、作成や維持にコストがかかるが、最新の状態の値を収集する必要がある複数のサブスクライバがいる場合に便利です。例えば、バックエンドから高価なネットワーク接続を介して状態の更新が行われ、その確立に多くの時間がかかるフローを考えてみましょう。概念的には次のように実装されます。


val backendState: Flow<State> = flow {
  connectToBackend() // takes a lot of time
  try {
    while (true) {
      emit(receiveStateUpdateFromBackend())
    }
  } finally {
    disconnectFromBackend()
  }
}

このフローをアプリケーションで直接使用する場合、フローが収集されるたびに新しい接続が確立されるため、状態の更新が流れ始めるまでにしばらく時間がかかります。しかし、次のように1つのコネクションを共有し、それを熱心に確立することができます。


val state: StateFlow<State> = backendMessages.stateIn(scope, SharingStarted.Eagerly, State.LOADING)

これで、state から全てのコレクターの間で1つのコネクションが共有され、必要になった時には既にコネクションが確立されている可能性があります。

* 上流の完了とエラー処理

上流フローの正常な完了は、サブスクライバには影響を与えず、共有コルーチンは継続して実行されます。SharingStarted.WhileSubscribed が使用されている場合は、上流側が再び再開されます。その完了時に特別なアクションが必要な場合は、stateIn オペレータの前に onCompletion オペレータを使用して値を出力することができます。shareIn オペレータのドキュメントを参照してください。

上流のフローで例外が発生した場合、どのサブスクライバにも影響を与えることなく共有コルーチンが終了し、共有コルーチンが起動したスコープで処理されます。カスタム例外処理は、shareIn オペレータと同様に、stateIn の前に catch や retry オペレータを使用して設定できます。

👉 【MVVM】 Kotlin Flow で使える5つの利用パターン 
👉 【Kotlin】Flow の挙動やライフサイクルをログで確認する hatena-bookmark