ここでは、朝専用SNS「朝の実」で使用する Post レコードタイプを CloudKit Dashboard に作成する手順をまとめます。CloudKit の UI は近年大きく変更されているため、2025年時点の最新インターフェースに沿って解説しています。
Post レコードタイプとは
CloudKit では、アプリが扱うデータを「レコードタイプ」という単位で管理します。
Post レコードタイプは、SNS の投稿を保存するための “テーブル” のようなものです。
・投稿1件 = レコード1つ
・投稿が持つ項目 = カラム
この仕組みによって、アプリ内で扱う「投稿データ」を CloudKit 上に保存し、取得し、並び替えることができるようになります。
⓪ Xcode側での事前設定(CloudKitを使うための準備)
SNSアプリで CloudKit を使用するためには、まず Xcode 側でいくつかの設定を行う必要があります。ここを正しく設定していないと、CloudKit Console にコンテナが表示されず、レコードタイプも作成できません。
以下の3つが設定済みであればOKです。
・Xcode → Signing & Capabilities → iCloud を追加
・iCloud の中にある CloudKit をチェック ON
・Container 名が iCloud.<BundleID> の形式で追加されている(例:iCloud.com.usamaron.Asanomi)
この Container 名は、CloudKit がデータを保存するための「アプリ専用の領域」を表しています。CloudKit Console(Web)で作業するときにも、このコンテナを選択して操作を行います。

① CloudKit Database を開く
CloudKit Console(https://icloud.developer.apple.com/)を開き、トップ画面に表示される 「CloudKit Database」 をクリックします。初回は、どの iCloud Container を使用するか選択する画面が表示されます。

Xcode の「Signing & Capabilities」で設定したコンテナと同じもの(例:iCloud.com.usamaron.Asanomi)を選択してください。
② Environment を「Development」に切り替える
画面上部には、Environment:Development / Production の切り替えがあります。アプリ開発中は必ず Development を選択します。Production は App Store 公開時に使用します。

③ Schema → Record Types を開き、新規レコードタイプを作成
左側のメニューの Schema から Record Types を選択します。右上の「+」ボタンから新しいレコードタイプを追加し、名前を Post に設定します。


これがアプリ内で扱う投稿データのテーブルとなります。
④ Post レコードタイプにフィールドを追加
Post レコードタイプに以下のフィールドを追加します。CloudKit には Boolean 型が存在しないため、isDeleted は Int(64) を利用します。
・id:String(投稿のUUID)
・authorId:String(投稿者識別)
・text:String(本文)
・createdAt:Date(並び順・時間制限判定)
・cheerCount:Int(64)(いいね数)
・isDeleted:Int(64)(論理削除フラグ:0 = false / 1 = true)
・clientTimeZone:String(タイムゾーン)


上記画像と同じ手順で全てのフィールドを作成する。

⑤ createdAt に Sort Index を追加
Edit Indexes をクリックし、 Indexe を画面を表示させる。

「+」ボタンからインデックスを追加する。


上記の画面では、CloudKit の Post レコードタイプに対して createdAt(投稿日時)で並び替え可能なインデックスを追加しています。ここでは、各項目が何を意味しているのか詳しく解説します。
Record Type:Post
このインデックスをどのレコードタイプに付与するかを選択します。今回は、SNS の投稿データを保持する Post レコードに対して index を追加するため、「Post」を選択します。
Name:createdAt_sort_idx
インデックスの識別名です。どのフィールドの何を目的とした index か分かる名前にするのが一般的です。「createdAt_sort_idx」はcreatedAt の並び替え(sort)用 indexであること示しています。
Type:SORTABLE
インデックスの種類を指定します。主な種類は次の通りです:
- QUERYABLE:検索条件として使用(フィルタ)
- SORTABLE:並び替えに使用
- LOOKUP:参照フィールド用
今回は、タイムラインを createdAt の降順でフェッチするために、SORTABLE を選択しています。これにより、CloudKit 内部で効率良く並び替えが行われ、高速なタイムライン取得が可能になります。
Field:createdAt
どのフィールドに対して index を作成するか選択します。ここでは、投稿の作成日時を保持するcreatedAtを選択しています。
この設定により、以下のメリットが生まれます
- createdAt での並び替えが高速化
- タイムライン取得処理の安定化
- 投稿数増加へのスケールに強くなる
特に SNS では「新しい投稿順に取得したい」ケースが多いため、この index 設定はタイムライン表示では重要です。

