🐷

CloudKitをvisionOSに追加する

2024/10/26に公開

概要

Swiftで利用できるクラウドデータベースであるCloudKitをvisionOSに導入する一連の流れをまとめます!

また、今回の記事の執筆にあたり多くの部分でこちらの記事こちらの記事を大変参考にさせていただきました。筆者の方々ありがとうございます🙇ぜひこちらの記事もお読みください。

実際に実装する前に

CloudKitについてもう少し説明を加えておきます。ある程度CloudKitについて理解している方はこちら読み飛ばしていただいて大丈夫です。

まずiCloudについて。

iCloudは、Appleが提供するクラウドストレージおよびクラウドサービスのプラットフォームです。iPhoneやiPad、MacなどのAppleデバイスと連携し、写真、ドキュメント、メモ、連絡先などを自動的にバックアップ、同期します。ユーザーは異なるデバイス間でデータにアクセスでき、紛失や故障時のデータ保護にも役立ちます。またアプリデータの保存やファミリー共有機能もサポートしており、個人から家族まで幅広く利用されています。
そしてiCloudと一口に言ってもバックアップ方法は用途に応じて3種類に分けられます。

バックアップ 詳細
Key-value storage アプリの設定や状態を保存する。最大容量は1MB。
iCloud Documents クラウド上にアプリのファイルを保存・同期する機能で、複数のAppleデバイス間でシームレスに共有・編集が可能。最大保存容量は利用者のiCloudアカウントに依存する。
CloudKit iCloudの一部としてデータをクラウドに保存・同期する機能です。ユーザーのデータを安全に管理し、複数デバイス間でリアルタイムに共有可能です。

CloudKitの3つの概念

こちらは公式ドキュメントを参考にしています。

1. コンテナ
コンテナと呼ばれる論理空間に分けてデータを整理します。通常、CloudKitを用いる1アプリにつき1コンテナなのですが、1つのアプリが複数のコンテナを使ったり、複数のアプリで1つのコンテナを使用するよう構成することもできます。コンテナによってアプリ内のデータをiCloud上で独立させることが可能です。コンテナごとに「iCloud.(バンドルID)」のように命名し、また複数のコンテナを1アプリで使用する場合は「iCloud.(バンドルID).(役割)」のように命名する。

2. データベース
コンテナへのアクセスの権限の違いなどで分けられている。コンテナ内に複数のデータベースを置くことができる。また、パブリックデータベースは1コンテナにつき1つ必ず存在する。

データベース 詳細
Public アプリユーザー全員が閲覧できる
Private 自分のみ読み書きができる
Shared ある特定のユーザーと共有ができるデータ

3. ゾーン
各データベースにゾーンが用意されていて、実データとなるrecordはここに保存される。パブリックデータベースにはゾーンが1つだけあり、これをデフォルトゾーンと呼ぶ。カスタムゾーンは、特定の目的(他ユーザーに共有するなど)で関連するレコードをグループ化するために利用する。

Firestoreとの比較

同様のクラウドデータベースのサービスとしてGoogleの提供するFirebaseのFirestoreがあります。
見解としては、マルチプラットフォーム対応する予定があるのであればFirestoreを使いましょう。ただ、Apple製品のみを対象とするのであれば料金などの観点からCloudKitを利用するのをお勧めします。

CloudKit Firestore
プラットフォーム Apple専用 クロスプラットフォーム対応
料金 1PBまで無料(実質無制限) 従量課金制
ユーザー認証 iCloudアカウント Googleアカウント、Github、Facebookなど
オフライン対応 なし データ保存・同期が可能
拡張性 Appleのデバイスの中に限る 全てのプラットフォームをサポート

導入

ここからは実際にCloudKitを導入していきたいと思います。
まずはXcodeに何か1つプロジェクトを作成してください。(次の記事でToDoListを作成するつもりなので「TodoList」などと命名するのをお勧めします)

1. Capabilitiesから 「iCloud」 を追加

Signing & Capabilitiesの画面からCapabilitiesを追加します。

iCloudと検索すると出てきます。

2. iCloudで利用するサービスとしてCloudKitを選択する

先ほどと同じくSigning & Capabilitiesの画面からCloudKitを選択します。

3. コンテナ名を命名

同じ画面のContainersの部分の「+」ボタンを押す(私は過去にCloudKitを利用しているため、そのContainerの名前が上に記載されていますが、そちらを利用することもできます)

「iCloud.(バンドルID)」が一般的な命名法です。

4. コンソール画面を開く

「CloudKit Console」のボタンを押すとApple Developersの画面に飛ばされ、ログインをお願いされるので対応します。

「CloudKit Database」を選択。

5. レコードタイプの作成

まず左上の部分が先ほど作成したContainerの名前になっているかを確認します。
次にSchemaのRecord Typesから「+」ボタンを押します。(Usersはデフォルトで存在しますが気にしなくていいです)

今回はToDoListを作るので「ToDoItems」と命名する。

6. レコードフィールドの作成

レコードタイプを作成すると先程と同じ画面からレコードフィールドを作成できる。


今回は簡易的なToDoListなので、

  • id
  • title
  • crated_date
    をレコードフィールドに設定する。
    全てのレコードフィールドを設定したら、下のボタンの「Save Changes」を押す。

7. インデックスの作成

インデックスを作成する必要があります。

それぞれに対して適切なインデックスを設定します。

今回は以下のように設定しました。

8.recordNameをqueryableに

これを設定しないとField recordName is not marked queryableというエラーが発生します。

インデックスの作成と同じ要領でrecordNameもQueryableに設定します。

終わり!

これでプロジェクトにCloudKitをインストールして、利用できる状態まで完成しました!
次はどうやって利用するかですね。実際にSwiftのコードを書いてToDoListを作成したのでそちらの実装を公開していこうと思います!

Discussion