Algolia + Firestore + VueJS(QuasarFramework)を連携させてみる
概要
Algolia(検索機能などのAPIを提供するサービス、SaaSになるらしいです...)と、Firestoreを連携させてみました。 フロントエンドには、Vuejs(QusarFramework)を使っています。 この記事では、Firestoreに書き込んだデータが、自動でAlgoliaにも書き込まれるというところまでやります。 Algolia、の検索API、ローカルで動いてるんじゃない買って思うくらい速くてビビりますw
環境
参照リンク
Firestore + Algolia を連携について参考になる記事: https://angularfirebase.com/lessons/algolia-firestore-quickstart-with-firebase-cloud-functions/
Quasar Framwork公式サイト: https://quasar-framework.org/
Vue InstantSearch: https://community.algolia.com/vue-instantsearch/getting-started/getting-started.html
前提条件
以前のこの記事までやっているという前提です。 https://mules-team.hatenablog.com/entry/2018/11/07/135920
Cloud Functions For Firebaseの準備をする
firebase CLIで、functionsの設定ファイルを作成します。
$ firebase init functions # functionsでどの言語を使うか利かれるので、Typescriptを選択します。 ? What language would you like to use to write Cloud Functions? JavaScript ❯ TypeScript # TSLintを使うか利かれるので、yesで設定します。 ? Do you want to use TSLint to catch probable bugs and enforce style? Yes # npmで、依存パッケージをinstallするか利かれるので、yesと回答する ? Do you want to install dependencies with npm now? Yes # 以下のような表示がでれば成功です。 ✔ Firebase initialization complete! # 最後にfunctionsのディレクトリに移動しておく。 $ cd functions
Algoliaの準備をする
Algoliaのアカウントを作成します
公式サイトからサインアップしてください。 https://www.algolia.com/
Indexを作成します
- 左のカラムのIndices をクリックして、CreateIndexをクリックします
- IndexNameを設定して、作成を完了させます。
algoliasearchをinstallします。
$ npm i --save algoliasearch
Firestoreの準備をする
料金プランをBlaze(もしくは、Flame)に変更します。
外部サイトへのアクセスについては、有料プランへの変更が必要になります。今回は、AlgoliaのAPIにアクセスするので、有料プランへの変更が必要です。
Firestoreで、データベースを作成します。
- Firebaseコンソールにアクセスします。
- 以前の記事でデプロイしたプロジェクトを選択します。
- 左のカラムのDatabase をクリックして、データベースを作成する を選択します。
- ロックモードかテストモードか聞かれるので、ここでは、「テストモード」で作成します。
CloudFunctionsで、Firestore と、Algoliaを連携させる
AlgoliaのAPIKEYをCloudFunctionsの環境変数にセットします。
- Algoliaのコンソール画面から、Application IDと、Admin API Keyをコピーして、firebase functionsに登録します。
$ firebase functions:config:set algolia.appid="Application ID" algolia.apikey="Admin API Key"
index.tsを編集して、Cloud Functionsに登録する関数を設定します。
ここでは、FirestoreのCityというコレクションに、ドキュメントが追加されたときに自動的にAlgoliaにもレコードが追加されるような関数にしてあります。
import * as functions from 'firebase-functions'; import * as admin from 'firebase-admin'; admin.initializeApp(); const env = functions.config(); import * as algoliasearch from 'algoliasearch'; // Algolia Clientの初期化 const client = algoliasearch(env.algolia.appid, env.algolia.apikey); // 作成したAlgoliaのIndex名を入れる const index = client.initIndex('quasar_firestore'); // Cityというコレクションにドキュメントが追加されたときに、 // algoliaにも、追加される設定です。 exports.indexCity = functions.firestore .document('city/{cityId}') .onCreate((snap, context) => { const data = snap.data(); const objectID = snap.id; // Add the data to the algolia index return index.addObject({ objectID, ...data }); });
cloud functionsにデプロイします。
firebase CLIで、デプロイします。
$ firebase deploy ✔ Deploy complete!
連携の確認
Firestoreにデータを登録してみます。
今回はCityというコレクションを作成してみます。
写真を挿入
Functionsのログを確認してみます。
log のstatusが'ok'になっていれば、成功です。(errorだと、失敗ですね)
Algoliaのコンソールから、データの書き込みを確認します。
Firestoreに書き込んだデータと同じものが書き込みされていたら成功です!