ニフクラ mobile backend(mBaaS)お役立ちブログ

スマホアプリ開発にニフクラ mobile backend(mBaaS)。アプリ開発に役立つ情報をおとどけ!

ポインターとリレーションの使い方を学ぶ

f:id:mbaasdevrel:20180913163950p:plain

mBaaSのデータストアで使い方が難しいのがポインターとリレーションです。しかし使いこなせれば、これまで以上にデータ管理の自由度が増すでしょう。この記事ではTwitterライクな形でのデータストア利用法を紹介します。

利用するデータストアのクラスについて

クラスは以下を用意します。

  • アカウント(Account)
  • ツイート(Tweet)

ユーザでも良いですが、パスワードを登録しないといけないので今回はアカウントとしています。

アカウントを作成する

まずはアカウントを作成します。今回はJavaScript SDKを使っています。

const Account = ncmb.DataStore('Account');
const account1 = new Account;
const account2 = new Account;
const account3 = new Account;

await account1.set('name', 'Account 1').save();
await account2.set('name', 'Account 2').save();
await account3.set('name', 'Account 3').save();

ツイートに対してツイート主を紐付ける

次にツイートを作成します。ツイートは一人のツイート主を持ちます。1つのデータ(アカウント)しか存在しませんので、ポインターを使います。

const Tweet = ncmb.DataStore('Tweet');
const tweet1 = new Tweet;
await tweet1
  .set('text', 'メッセージ')
  .set('account', account1) // アカウント紐付け
  .save();

いいねする

ツイートに対していいねします。今回はツイート主ではないアカウント2と3がいいねします。ここは1つのツイートに対して複数のいいねが付くので、リレーションを使います。

const likes = new ncmb.Relation();
likes.add(account2).add(account3); // いいねしたアカウント
await tweet1.set('likes', likes).update();

フォローする

アカウント1のツイートをいいねしたアカウント2とアカウント3がフォローします。この情報はアカウント1にフォロワーとして追加します。ここも一つのデータ(アカウント1)に対して複数のデータ(アカウント2と3)が紐付くのでリレーションを使います。

const followers1 = new ncmb.Relation();
followers1.add(account2).add(account3);
await account1.set('followers', followers1).update();

さらにアカウント1はアカウント2もフォローして相互フォローになります。ここもリレーションを使います。

const followers2 = new ncmb.Relation();
followers2.add(account1);
await account2.set('followers', followers2).update();

別版

このようにしてデータストアの中でポインターとリレーションを使い分けられます。なお、この例ではアカウント1が誰と誰にフォローされているかは分かりますが、アカウント2が誰をフォローしているのかは分かりません。もう一つのやり方として、誰が誰をフォローしているかを別クラスで管理する方法もあります。

const Follow = ncmb.DataStore('Follow');
const follow = new Follow;
// アカウント2がアカウント1をフォロー
follow.set('follow', account2).set('follower', account1).save();
// アカウント3がアカウント1をフォロー
follow.set('follow', account3).set('follower', account1).save();
// アカウント1がアカウント2をフォロー
follow.set('follow', account1).set('follower', account2).save();

この場合、Followを常にポインターとして検索することで誰をフォローしているか、誰にフォローされているかが分かるようになります。

まとめ

リレーションとポインターを上手に使うことで複雑なリレーションも表現できるようになります。ぜひ使いこなしてください!

中津川 篤司

中津川 篤司

NCMBエヴァンジェリスト。プログラマ、エンジニアとしていくつかの企業で働き、28歳のときに独立。 2004年、まだ情報が少なかったオープンソースソフトの技術ブログ「MOONGIFT」を開設し、毎日情報を発信している。2013年に法人化、ビジネスとエンジニアを結ぶDXエージェンシー「DevRel」活動をスタート。