cktoolの使用方法

事前の確認

  • cktoolを使用するには、現在Apple Developer ProgramまたはApple Developer Enterprise Programのメンバーである必要があります。
  • CloudKit開発を自動化する」で説明されている認証の概念をよく理解しておきます。
  • ユーザーアカウントの「Settings(設定)」セクションを選択し、CloudKit ConsoleからCloudKit管理トークンを生成します。このトークンはあとで再表示できないため、必ず保存してください。

アプリのインストール

デフォルトでは、cktoolはXcodeと一緒に配信されます(Xcode 13以降)。XcodeはMac App Storeで入手できます。

一般的な使い方

cktoolはステートレスであり、すべての操作を1回の操作でCloudKit Management APIに渡します。サポートされている操作すべての一覧は、helpコマンドまたはmanページで確認できます。

xcrun cktool --help
OVERVIEW: CloudKit Command Line Tool

USAGE: cktool <subcommand>

OPTIONS:
	-h, --help				Show help information.

SUBCOMMANDS: ...

CloudKitに対するcktoolの認証

cktoolは、管理トークンとユーザートークンの両方をサポートしており、これらのトークンはMacのキーチェーンに安全に保管されます。トークンを追加するには、save-tokenコマンドを使います。このコマンドは、ユーザーに情報の入力を求めたあとで、適切なトークンをコピーするためにCloudKit Consoleを起動します。

xcrun cktool save-token			\
	--type [management | user]

スキーマ管理コマンドの発行

スキーマ管理コマンドを使うには、管理トークンを指定する必要があります。トークンを指定すると、cktoolは以下のコマンドを実行できます。

開発環境のスキーマのリセット:開発環境のデータベースを最新のプロダクション環境の定義に戻すことができます。

xcrun cktool reset-schema	\
	--team-id [TEAM-ID]		\
	--container-id [CONTAINER]

スキーマファイルのエクスポート:既存のCloudKitデータベーススキーマ定義をファイルに保存できます。このファイルは関連するソースコードと一緒に保持できます。

xcrun cktool export-schema 		\
	--team-id [TEAM-ID]			\
	--container-id [CONTAINER]	\
	--environment [development | production]	\
	[--output-file schema.ckdb]

スキーマファイルのインポート:テストのために、開発環境のデータベースにファイルベースのスキーマ定義を適用します。

xcrun cktool import-schema 		\
	--team-id [TEAM-ID]			\
	--container-id [CONTAINER]	\
	--environment development 	\
	--file schema.ckdb

データコマンドの発行

ユーザートークンを利用できる場合、cktoolはユーザーに代わってパブリックデータベースやプライベートデータベースにアクセスできます。この操作は、統合テストの前に、データをフェッチして新しいレコードを挿入するために使用できます。ユーザートークンは有効期間が短いため、頻繁にインタラクティブ認証が必要になる場合があります。

レコードの照会を実行するには、query-recordsコマンドを使用します。フィルターなしで照会を行う場合、任意の--filters引数に指定するフィールドと同様に、Queryableインデックスを適用するための___recordIDが必要です。

xcrun cktool query-records		\
	--team-id [TEAMID] 			\
	--container-id [CONTAINER] 	\
	--zone-name [ZONE_NAME] 		\
	--database-type [public | private] 	\
	--environment [development | production]	\
	--record-type [RECORD_TYPE]	\
	[--filters [FILTER_1] [FILTER_2]]

ここで、FILTER_1"[FIELD_NAME] [OPERATOR] [VALUE]"の形式です。例えば、"lastname == Appleseed"とします。

データを挿入するには、create-recordコマンドを使用します。

xcrun cktool create-record		\
	--team-id [TEAM_ID]			\
	--container-id [CONTAINER]	\
	--zone-name [ZONE_NAME] 		\
	--database-type [public | private] 	\
	--environment [development | production]	\
	--record-type [RECORD_TYPE]	\
	[--fields-json [FIELDS_JSON]]

ここで、FIELDS_JSONはレコードに設定するフィールドのJSON表現です。以下はその例です。

'{
	"firstName": {
	"type": "stringType",
	"value": "Johnny"
 },
	"lastName": {
	"type": "stringType",
	"value": "Appleseed"
 }
}'