MongoDB StitchはMongoDBをベースにしたのBaaSです。(参考)
25GBまでは無料(それ以上は$1/GB追加料金)ということで早速使ってみました。
まずはこちらから登録
カード登録不要で使い始められるのは良いですね。
Get started free から登録をすると MongoDB Atlas から登録メールが来ました。
Atlasは同社の提供するMongoDBのホスティングサービスですがStitchはAtlasを含むサービスのようです。
提供されるSDKからStitch APIを呼ぶことで利用でき、
現在はiOS, Android, JavaScriptの3言語に対応していました。
MongoDBのクラスタを作成する
ログインしたら最初にMongoDBクラスタを作成します。
- クラウドプロバイダを選択
AWSとGoogle Cloud Platform,Microsoft Azureに対応しています。 - インスタンスサイズを選択
無料で使用できる M0 はAWSのus-east-1のみということなので、そちらを選択します。
AWSの東京リージョンも選択できましたが M30 からでした。
- クラスタのサイズを選択
こちらも3〜7まで選べるようですが無料の場合は3ノードしか選択できません。
シャードの設定やバックアップの設定も無料の場合はできないようです。 - ネットワーク/セキュリティの設定
IPアドレス制限やVPCピアリングの設定を行うことができます。
VPCピアリングの設定は扱ったことがないのですが別のAWSアカウントから内部IPでアクセス可能になると思われます。
試しにIPホワイトリスト設定で渋谷Officeからアクセス可能にしてみます。
5分ほどでクラスタが立ち上がりました。
アプリケーションを作成する
ここまでがAtlasの設定でした。ここからStitchでアプリケーションを作成します。
Application Name に名前を入れて先ほどのクラスタにリンクさせます。
作成後に認証方法を選択するのですが今回は認証なし(匿名ログイン)に設定しました。
Webアプリケーションに組み込む
Webアプリケーション(JavaScript)に組み込むには既存のWebプロジェクトにmongodb-stitchを追加します。
npm install --save mongodb-stitch |
インストールしたらサンプルコードを参考にデータをINSERTしてみます。
以下のコードでは匿名ログインでユーザIDをキーにしたデータの登録と取得を行っています。
// ドキュメントに書いてあったがうまく動作しなかったので少し修正 // var stitch = require("stitch"); // client = new stitch.StitchClient(""); import { StitchClient } from "mongodb-stitch" const client = new StitchClient("") const db = client.service('mongodb', 'mongodb-atlas').db('') client.login().then(() => db.collection('').updateOne({owner_id: client.authedId()}, {$set:{number:42}}, {upsert:true}) ).then(()=> db.collection('').find({owner_id: client.authedId()}) ).then(docs => { console.log("Found docs", docs) console.log("[MongoDB Stitch] Connected to Stitch") }).catch(err => { console.error(err) }) |
その他
今回は認証なし(匿名ログイン)を使用しましたが他にも以下のような認証が使用できるみたいです。
- E-mail/パスワード認証
- Google認証
- Facebook認証
- APIキー認証
- JWT認証
また、FirebaseのようにCollectionのスキーマに対してルールを指定してアクセス制御を行ったり
Push通知を送信したり、SlackやTwilioなど他のサービスと連携することもできるようです。
まとめ
Collectionの操作は一般的なMongoDBと同じなのでMongoDBに慣れている人はアプリやブラウザから簡単に利用できて便利と思います。
現在クライアントのSDKからMongoDBの操作が制限されている(Map/Reduceなどの集計処理が利用できない)ことを考慮すると、
スマホやブラウザなどのクライアントからユーザのデータを収集/保管して同じMongoDBをそのままバックエンドのシステムで集計に使うような仕組みを作るのに向いている気がします。
(Firebaseのように集計用のDBにデータを移し替える必要がないので)
MongoDBはリアルタイムDBではないのでFirebaseのようにデータが変更された際にPushでデータを取得するような使い方はできませんが、MongoDB ChartsというMongoDB内のデータを加工してグラフで表示するBIツール的なのも予定されていたり、集計処理が得意なので用途によって使い分けるのが良いかなと思います。
この記事を書いた人
最近書いた記事
- 2021.12.10React NativeでWallet風UIを実装する
- 2018.11.19Elasticsearchで簡単な検索とscoreを調整する方法
- 2018.10.05ECSをEC2からFargateに切り替える際の注意点
- 2018.09.12AKB48グループ映像倉庫のWeb版をリリースしました