OS XとiOSの過去数バージョンを経験したことがあるなら、iCloudとの愛憎入り混じった関係を経験したことがあるかもしれません。Appleのクラウドサービススイートは、様々なパーツとシステムで構成されており、正常に動作している時は素晴らしいのですが、原因究明が難しい障害が発生しやすく、開発者にとっては分かりにくいエラーメッセージが表示されるという問題も抱えています。
Apple は過去数年間、iCloud の安定性と信頼性を高めるために懸命に取り組んできました。そして、その取り組みはほぼ成功し、少なくとも伝聞的には、iCloud の導入以来、iCloud に関する不満は大幅に減少しました。
しかし、こうした改善にもかかわらず、iCloudのファイルストレージサービスには、多くの最新アプリのニーズを満たす上で、例えばDropboxのようなサービスと比べて魅力に欠ける機能がいくつかありました。例えば、iCloudはほぼ無料でiOSとOS Xの両方と緊密に統合されていますが、情報共有は同一ユーザーの複数のデバイス間でしか行えません。これは、複数のユーザー(多くの場合、大規模)をサポートするサービスが、最も成功しているアプリの焦点となっている世界では、かなり制限が厳しいと言えるでしょう。
一と多
これまでのところ、複数のユーザー間のインタラクションを構築したいサードパーティの開発者は、ユーザー認証からデータ同期まですべてについて独自の自家製ソリューションを考案するしか選択肢がなく、プログラミングが複雑で、維持に非常に費用がかかるため、安価または無料のアプリが好まれる市場では難しい提案となっています。
しかし、これらの問題はクパチーノでも無視されておらず、iOS 8とOS X YosemiteではiCloudが大幅に刷新されます。漠然とした「書類とデータ」という「ストレージソリューション」は、かつてのiTools/MobileMeのiDiskに似たiCloud Driveに置き換えられます。何よりも素晴らしいのは、Finderからユーザーのすべての書類とファイルに直接アクセスできることです。
しかし、それだけではありません。iCloud の改善には、CloudKit と呼ばれる舞台裏の技術も含まれており、開発者に、将来登場する可能性のあるアプリの種類に大きな影響を与える可能性のあるまったく新しい一連のツールを提供します。
CloudKit は、開発者向けに非常に寛大なデータ割り当てを特徴としています。
まず、CloudKitはストレージに特化しています。これまでと同様に、サードパーティ製アプリはそれぞれ、ユーザーのiCloudデータ割り当ての一部である「プライベート」データストアにアクセスできます。このデータは複数のデバイス間で自動的に同期され、ブログ記事や請求書などの構造化データだけでなく、ドキュメントや画像などのファイル全体も保存できます。ゲームなどのアプリは、iOSクライアント間で進行状況を同期するためにこのデータを使用し、AppleのPages、Numbers、Keynoteなどのアプリはプレゼンテーションやスプレッドシートなどを保存します。
しかし、CloudKitを利用することで、開発者はアプリの全ユーザー間で自動的に共有される新しい「パブリック」データストアにもアクセスできるようになります。このパブリックストアで使用されるディスク容量は、Appleがアプリごとに割り当て、非常に寛大な制限を設けた上で無料で利用できる別の容量としてカウントされます。
プログラマーにとって、この新しい共有データストアは、巨大なデータベースとディスクドライブを組み合わせたようなもので、現在アプリ開発に使用しているのと同じプログラミングツールで制御できます。大きな違いは、そこに保存された情報を複数のユーザーが利用できることです。これにより、クラウドを介して共同作業や情報共有が可能になります。これはiCloud「Classic」では不可能でした。Appleは既存のインフラストラクチャを活用し、サービスの運営に必要なすべてのサーバー、帯域幅、ストレージ、メンテナンスを関係者全員に無料で提供しています。
ただし、「公開」という言葉に惑わされないでください。CloudKitは、共有データをすべて大きなバケットにまとめて、特定のアプリをインストールしたすべてのユーザーに自動的に公開するわけではありません。開発者は必要に応じて情報を保護できるため、例えば特定のグループや組織のユーザーには特定のコンテンツへのアクセスのみを許可するといったことが可能です。
特殊なサーバー側ソフトウェアとは異なり、CloudKit は、開発者が iOS および OS X アプリの構築に使用するのと同じツール (Apple が今年の WWDC カンファレンスで発表した新しい Swift プログラミング言語を含む) に基づいています。
アプリ内のサーバーのように
しかし、それだけではありません。開発者はCloudKitを使って基盤データの変更を追跡し、変更が発生した際にイベントを生成することもできます。これにより、例えば、公開データベースに保存されているメッセージに返信があったときや、請求書が承認されたときにリモート通知を送信することが容易になります。繰り返しになりますが、Appleのサーバーが面倒な処理をすべて引き受けるため、開発者は独自の通知サーバーを構築する必要がなく、あらゆる規模の負荷に対応できるよう自動的にスケールアップします。
最後に、CloudKit を使用すると、サードパーティ製アプリが認証メカニズムを Apple ID に乗せることができるため、ログイン システムを作成して維持したり、ユーザーに別のパスワードを覚えさせたりすることなく、各ユーザーを一意の方法で簡単に区別できるようになります。
Appleが最近行っているあらゆる取り組みと同様に、CloudKitにもユーザーのプライバシーに対する深い尊重が込められています。例えば、Apple IDはデフォルトで、ユーザーがログインしているかどうかのみを開発者に知らせ、一意ではあるもののそれ以外は匿名の識別番号を割り当てます。開発者がユーザーの氏名にアクセスできるのは、ユーザーの明示的な許可がある場合のみです。メールアドレスや住所など、Apple IDに付随するその他の情報はすべて、完全にアクセス禁止となっています。
晴れ間が続く
CloudKitが複数ユーザーによるコラボレーションを軸としたアプリの開発を大幅に簡素化することは、容易に理解できます。以前は、Glassboardのようなグループチャットアプリや、Wunderlistのようなチームベースのタスク管理ソフトウェアを開発するには、かなりの労力が必要でした。開発者は、すべてのデータを保存・同期するために必要なサーバー側のインフラストラクチャを構築し、さらに複数のユーザー間のコミュニケーションを処理する必要がありました。しかし、CloudKitがそのサービスを提供してくれるおかげで、開発者はiOSとOS Xのコード内で優れたユーザーエクスペリエンスを構築することに集中できるようになりました。
さらなる利点として、Apple は iCloud を取り巻くセキュリティを微調整する十分な時間があり、同社の現在のプライバシーへのこだわり (私に言わせれば、非常に歓迎すべきこだわり) は、サードパーティの開発者にも伝染し、私たちのデータがインターネット中に「誤って」漏洩する可能性の低い、より安全なアプリにつながる可能性が高い。
もちろん、こうした優れた機能の裏側には、AppleのデバイスとOSでしか利用できないCloudKitが、ユーザーと開発者の両方をAppleの閉鎖的なエコシステムに閉じ込めてしまうという側面があり、複数のプラットフォームで動作する必要があるアプリには不向きです。しかし、小規模な開発者にとっては、時間や費用をほとんど追加することなく、優れたソフトウェアを膨大なユーザーに提供できる、他に類を見ない機会となります。