RORK LABEN
NATIVE — Rork Max では AR / LiDAR スキャン、Metal を使った 3D、Dynamic Island、Siri Intents、HealthKit、NFC、App Clips、Core ML まで届きますIOS27 — iOS 27 Developer Beta 4 で Siri AI の対象が iPhone 15 Pro / 15 Pro Max・16 シリーズ・17 系へ広がり、応答が初期ベータより明確に速くなりましたDESIGN — iOS・iPadOS・macOS 27 向けの Apple 純正デザインキットが Figma と Sketch 向けに公開されました。新 OS の UI を組む段階で参照できますCANARY — Android 17(Cinnamon Bun)は従来の Developer Preview を廃し、継続更新される Canary ビルドへ移行しました。検証のタイミング設計が変わりますSPARK — Android 17 の Gemini Spark は、アプリを直接操作して配車の予約や注文といった複合的な作業を自動化しますSCALE — Rork は a16z から $2.8M を調達し、月間訪問は74万件規模まで伸びていますNATIVE — Rork Max では AR / LiDAR スキャン、Metal を使った 3D、Dynamic Island、Siri Intents、HealthKit、NFC、App Clips、Core ML まで届きますIOS27 — iOS 27 Developer Beta 4 で Siri AI の対象が iPhone 15 Pro / 15 Pro Max・16 シリーズ・17 系へ広がり、応答が初期ベータより明確に速くなりましたDESIGN — iOS・iPadOS・macOS 27 向けの Apple 純正デザインキットが Figma と Sketch 向けに公開されました。新 OS の UI を組む段階で参照できますCANARY — Android 17(Cinnamon Bun)は従来の Developer Preview を廃し、継続更新される Canary ビルドへ移行しました。検証のタイミング設計が変わりますSPARK — Android 17 の Gemini Spark は、アプリを直接操作して配車の予約や注文といった複合的な作業を自動化しますSCALE — Rork は a16z から $2.8M を調達し、月間訪問は74万件規模まで伸びています
記事一覧/開発ツール
開発ツール/2026-06-16上級

Rork Max のネイティブアプリで CloudKit 同期を設計する — 競合と削除をどう扱うか

iPhone と iPad で同じデータを同期させたい——Rork Max が生成した Swift アプリに CloudKit を入れる際、本当に難しいのは保存ではなく『競合』と『削除』の扱いでした。実装で固めた設計判断を整理します。

Rork Max231CloudKitSwift48同期3アーキテクチャ21

プレミアム記事

同期は「保存できた」では終わりません

お気に入りを iPhone で追加したのに、iPad では消えている。あるいは、iPad で消したはずのものが、しばらくすると iPhone から復活してくる。Rork Max が生成したネイティブ Swift アプリに同期機能を入れたとき、最初に直面したのはこの種の不整合でした。

レコードを CloudKit に保存するコード自体は素直です。難しいのは、複数の端末が同時に書き込んだときの競合と、削除をどう全端末に伝播させるか、という設計の部分でした。ここを曖昧にしたまま公開すると、ユーザーには「データが勝手に増えたり消えたりするアプリ」に見えてしまいます。個人開発で長くアプリを運用してきた経験から言うと、信頼を損なうのはクラッシュよりもむしろこの種の静かな不整合です。実装で固めた判断を残しておきます。

まず KV ストアと CloudKit の境界を引く

iCloud 同期には複数の選択肢があります。設定値のような小さなデータなら NSUbiquitousKeyValueStore で十分で、これは Key-Value だけを同期する軽量な仕組みです。容量は1MBほどで、構造化されたレコードの集合には向きません。

一方、ユーザーが作る項目(メモ、お気に入り、コレクション)のように件数が増えていくデータは、CKRecord を使った CloudKit に載せます。私の線引きはこうです。

  1. 件数が固定で、キーで直接引ければ KV ストア(設定・フラグ・最後に開いたタブなど)
  2. 件数が可変で、後からクエリ・並べ替えしたくなるなら CloudKit(ユーザー生成のレコード群)
  3. 1MB を超えそう、または端末間で部分的に差分同期したいなら迷わず CloudKit

この判断を最初に下しておかないと、後から KV ストアに無理やりレコードを詰め込んで破綻します。私自身、初期に横着して KV ストアへ寄せた結果、容量上限に当たって作り直した経験があります。

CloudKit のレコード保存は次の形になります。

import CloudKit
 
struct FavoriteRecord {
    let id: CKRecord.ID
    var title: String
    var updatedAt: Date
}
 
func save(_ favorite: FavoriteRecord) async throws {
    let db = CKContainer.default().privateCloudDatabase
    let record = CKRecord(recordType: "Favorite", recordID: favorite.id)
    record["title"] = favorite.title
    record["updatedAt"] = favorite.updatedAt
    _ = try await db.save(record)
}

ここまでは簡単です。問題はこの先です。

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
NSUbiquitousKeyValueStore と CloudKit(CKRecord)の境界を理解し、どちらを使うべきか判断できるようになる
二台の端末で同じレコードを編集したときの競合を、サーバー変更トークンと changeTag で解決するコードを習得できる
削除の同期に伴う『ゾンビ復活』を防ぐ tombstone(墓標)パターンを再現できる
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Rork Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥1,480 の永久アクセス
メンバーシップを見る →

関連記事

開発ツール2026-07-16
Rork Max 生成コードの再生成ゾーン設計 — 手を入れるほど失われる「作り直せる自由」を残す
Rork Max の生成コードには「捨てて作り直せる」という見えない資産が乗っています。手を入れるたびに静かに失効するその資産を、台帳とCI検査で管理する設計を、個人開発の実運用からまとめます。
開発ツール2026-06-15
Rork Max の Swift 生成と Expo 版の責務分界 — どこまでをノーコードに任せ、どこから手で書くか
Rork Max が Swift ネイティブ生成に対応し、通常の Rork は引き続き Expo(React Native)を生成します。2つの生成エンジンを1つのアプリ事業の中でどう使い分けるか、責務の線引きを実アプリの運用視点で設計します。
開発ツール2026-07-18
AR で置いたものが翌朝には消えている — ARWorldMap による配置の永続化とリローカライズ設計
Rork Max が生成する AR アプリは、置いた 3D オブジェクトがアプリ再起動で消えます。ARWorldMap の保存タイミング、カスタムアンカーの符号化、リローカライズ待ちの見せ方、成立しない時の逃げ道までを設計として整理しました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →