【Swift】CKShareクラスとは?使い方や主要プロパティを具体例豊富にわかりやすく解説!

iCloudを使ったデータ共有機能の中で、他のユーザーとレコード(データ)を共有・共同編集できるようにする仕組みが CKShare です。

この記事では、CloudKitの CKShare クラスの役割や使い方、具体的なコード例、主要なプロパティ・メソッド、活用シーンをわかりやすく解説します。

CKShareクラスとは?

CKShare は、CloudKitの共有機能(CloudKit Sharing)を使って、他のiCloudユーザーとデータ(レコード)を共有するためのクラスです。

たとえば、ToDoリストやノート、アルバム、レシピなどを他のユーザーと共有・共同編集できるアプリを作りたい場合に使用されます。

CKShare でできること

  • 特定のレコードを共有できる
  • 他の iCloud ユーザーにアクセス権を付与できる
  • 招待の送信・受け入れ・共同編集をサポートできる

つまり 「CloudKit のレコードを他人と安全に共有するための仕組み」 を担うクラスです。

項目 内容
クラス名 CKShare
主な用途 iCloudユーザー間でのレコード共有
主な操作 CKModifyRecordsOperation で保存・共有
表示UI UICloudSharingController で共有設定を表示
必要条件 iCloud + 実機 + Sharing Capabilityの有効化

基本の使い方

CKShare を使って CloudKit のレコードを共有するには、下記の流れで行います。

  1. 共有したいレコードを CKRecord として作成
  2. CKShare インスタンスをそのレコードと一緒に保存
  3. UICloudSharingController を表示して、ユーザーに共有リンクや招待を送る

以下は、指定した CKRecord を他の iCloud ユーザーと共有できるようにするコード例です。

コードのポイント

  • CKShare(rootRecord:)
    → 共有したい CKRecord をルートとして CKShare を作成します。

  • share[CKShare.SystemFieldKey.title]
    → 共有リンクに表示されるタイトルを設定できます。

  • CKModifyRecordsOperation
    recordshare を一緒に CloudKit に保存。共有は通常のレコード保存と同時に行う必要があります。

  • UICloudSharingController
    → ユーザーに共有リンクや招待を送るための標準UI。ここで「閲覧のみ」「編集可能」などの権限も設定可能です。

  • .availablePermissions
    → 共有時のアクセス権限を指定。例:allowReadWrite(編集可)、allowPrivate(個別招待のみ)

 この流れで実装することで、CloudKit のレコードを iCloud 経由で他のユーザーと安全に共有・共同編集 できるようになります。

主要プロパティ

CKShare には、共有の状態や表示に関するいくつかの主要プロパティが用意されています。

これらを理解しておくと、共有機能を正しく制御したり、ユーザーにわかりやすく見せることができます。

プロパティ名 説明
rootRecordID CKRecord.ID 共有のルートとなるレコードのID
owner CKUserIdentity この共有を作成したユーザー情報
participants [CKShare.Participant] 共有に参加しているユーザー一覧
publicPermission CKShare.ParticipantPermission 他のユーザーの読み書き権限設定
URL URL? 共有リンク(参加用URL)
title String? 表示用タイトル(UIに出す)

CKShare.SystemFieldKey.title に値をセットすると、UICloudSharingController 上に共有のタイトルが表示されます。

これらのプロパティを活用することで、共有の見た目(タイトルやリンク)だけでなく、アクセス権や参加者の管理 も柔軟に行うことができます。

特に participantspublicPermission をうまく組み合わせることで、招待制・公開制などさまざまな共有スタイルを設計可能です。

UICloudSharingController との連携

CKShare を単体で扱うことはあまりなく、通常は UICloudSharingController と組み合わせて使います。

UICloudSharingController とは?

UICloudSharingControllerApple が用意している標準の共有UI です。

  • CloudKit の共有 (CKShare) を簡単にユーザーに公開できるようにするビューコントローラ

  • UIKit の UIActivityViewController(シェアシート)の「CloudKit 版」と考えるとイメージしやすい

できること

  • 共有リンクの発行と送信
    AirDrop、メッセージ、メールなどを使って他のユーザーに招待を送れる

  • 権限の設定
    availablePermissions で共有先のユーザーに対するアクセス権限を指定できる

    • .allowReadWrite → 読み書き可能

    • .allowReadOnly → 読み取りのみ

    • .allowPrivate → 特定の人だけ

  • UIの統一感
    iOS 標準UIなので、ユーザーにとってわかりやすく、安全に共有操作を提供できる

SwiftUI アプリでも、共有部分だけは UIViewControllerRepresentable でこの UIKit コントローラを呼び出す必要があります。

注意点

CloudKit の共有機能は便利ですが、CKShare を使うときにはいくつかの仕組み上の制約があります。これを理解していないと「なぜデータが見えないのか?」とハマることがあるので注意しましょう。

  • CKShareCloudKitの Private Database に保存される クラスです。
    つまり、共有を開始する側(オーナー)は、自分のプライベートデータベースに CKShare と共有対象のレコードを保存する必要があります。
  • 一方で、共有を受け取ったユーザーは、そのレコードを Shared Database(共有データベース)から読み書きすることになります。
    アプリでは CKContainer.default().sharedCloudDatabase を通じてアクセスします。
  • 共有データのライフサイクルを理解しておく必要がある
    1. オーナーが CKShareCKRecord を自分の Private DB に保存
    2. 共有リンクを生成し、他のiCloudユーザーへ共有
    3. 相手が承認すると、そのレコードが 相手の Shared Database に現れる
  • シミュレータでは共有機能は動作しません(iCloudアカウントと実機が必要)
  • Xcodeで iCloud + CloudKit および CloudKit Sharing の Capabilities を有効にしておく必要があります

このように、「オーナー=Private DB」「共有相手=Shared DB」 という構造を理解して実装するのがポイントです。

まとめ

CloudKit の共有機能を実現するための中心的なクラスが CKShare です。

基本的な特徴を整理すると次のようになります。

項目 内容
クラス名 CKShare
主な用途 iCloudユーザー間でのレコード共有
主な操作 CKModifyRecordsOperation で保存・共有
表示UI UICloudSharingController で共有設定を表示
必要条件 iCloud + 実機 + Sharing Capabilityの有効化

CKShare を使うことで、CloudKitベースのアプリに強力な「共有・共同編集」機能を加えることができます。

ToDo、ノート、アルバムなどのアプリにチームコラボレーション機能を追加したいと考えているなら、CKShare の導入は非常におすすめです。

おすすめの記事