CloudKitをvisionOSに追加する
概要
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