グループを使った設計のヒント

グループを使用すると、複数ユーザーの間でのデータ共有を実現することができます。

ここでは、設計のヒントとして、グループ以外による方法を含め、データ共有の実現方法を示します。

共有と同期の違い

はじめに、ユーザー間のデータ共有とデバイス間の同期の違いを認識する必要があります。実装を行うにあたって、データの共有対象がユーザー間であるかユーザー内であるかは、混乱しないように注意します。

たとえば、自分が保存したデータを、自分が持っている複数のデバイスだけで「共有」する場合、それはデータ同期に近い概念となり、グループの利用は不要です。複数のデバイスにあなたのモバイルアプリをインストールし、それぞれのデバイスから自分のユーザースコープの Bucket にアクセスするだけで実現できます。

一方、自分以外のユーザーが保存したデータにアクセスしたい場合は、データ共有が必要です。この後に示すとおり、いくつかの実現方法がありますが、グループ管理機能を導入すると実装が容易になることがあります。

データ共有の実現方法

複数のユーザーでデータを共有するには、グループのデータとして扱う方法と、個人データのアクセス権を変更して扱う方法の 2 通りがあります。以下に示すように、これらはどちらでも同等の機能を実現できます。

たとえば、2 人の KiiUser 同士でチャットを行うアプリケーションを作る場合を考えます。

グループ管理機能を使う場合、2 人の KiiUser をつなげる KiiGroup を作成し、グループスコープの Bucket にメッセージを書き込んで共有します(さらにプッシュによる通知を併用する設計が妥当です)。

グループ管理機能を使わない場合、発起人の KiiUser にユーザースコープの Bucket を作成し、送信先 KiiUser からも読み書きできるように Bucket と KiiObject のアクセス権を変更してメッセージを共有します。

グループ管理機能を使うかどうかはモバイルアプリの設計次第です。グループで共有を実現するか、アクセス権の変更で実現するかは、以下のようなヒントをもとに設計してください。

  • グループ管理機能を使うことで、ユーザー間のつながりを、より明確化できます。特に、データの所有者が本質的に複数のユーザーにまたがり、かつ、グループのメンバーが常に入れ替わるような場合は、グループ管理機能を使用することをお勧めします。

  • 共有対象の KiiObject が頻繁に生成される場合、アクセス権の変更による実装を使うとオブジェクトの生成ごとにアクセス権の変更が必要となって煩雑になります。このような場合はグループの利用をお勧めします(ACL の変更の例 もご参照ください)。

  • グループそのものの生成と消滅が頻繁に行われるような場合は、アクセス権の変更による実装を検討するとよい場合があります。グループの参照 に示すとおり、グループは後から参照するために管理が必要であるため、Bucket を使ってアクセス権を変更する方がより簡単な実装になる場合があります。

  • 本質的に、ユーザー個人が所有するデータであっても、グループを作成する方法が有効な場合があります。SNS のように、友達関係の間に自分の情報を公開するアプリケーションでは、下記のようなグループ構成によってソーシャルネットワークを構築することもできます。ユーザーとグループ 1 つがユーザー 1 人分の所有物となり、友達への公開用のデータはグループ側で管理します。アクセス権の変更による実装では、友達の増減があるたびに共有対象の KiiObject すべてに対してアクセス権を再設定する必要がありますが、グループによる実装ではその必要がありません。また、グループではアクセス権と友達関係の整合性が取れているかどうかを気にする必要もありません(アクセス権については アクセス制御 を、整合性については トランザクション をご覧ください)。