質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.62%

algoliaのindexにfirestoreをミラーリングできません。

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 558
退会済みユーザー

退会済みユーザー

実現させたい事

iosアプリでalgoliaを使用したいです。
実現のために、
youtube動画 Algolia Firestore QuickStart With Firebase Cloud Functionsをそのまま真似て作ったfirestoreのオブジェクトを、
algoliaで作成したindex(zoo search)にミラーリングしたいのですが、できないため困っています。

セットアップは、動画の5:50秒までを参考にしています。

確認できている事(やっている事)

< algolia設定済み >

・BrowseはNo records yetです。

・indicesのLogs内にPOST,DELETE,GETがあります。ここにCREATEは無いです。
onCreateはトリガーされていないという事だと思います。
(DELETEがあるのは何度かalgolia内のindexを削除して新規作成したり、xcodeでプロジェクトを作り直して新たにセットアップを何度も試みたからだと思います。)

< Firebase設定済み >

・Functionsのダッシュボードは 『最初のデプロイを待機しています』状態です。
ログはまだ無いです。

ダッシュボードのタブ内に、これらの履歴がないので動画のように正常にセットアップができおらず、この部分がどうしても分からず困っています。

やっていない事

Health Check: This lesson was last reviewed on May 31, 2018 and tested with these packages:
Angular v6
RxJS v6.2
firebase-functions v1
algoliasearch v3

リンク先のyoutube 動画では
ライブラリは上記の通りとリンク先にありますが、

私はAngularとRxJSはインストールしていません。
その他、とにかくリンク先のセットアップ手順のみに従って、そのまま真似ています。

試している事

ターミナルは以下の通り進めています。

//ターミナル

Last login: Sun Dec  9 23:41:59 on ttys000
-bash: eval: line 21: syntax error: unexpected end of file
hogeMacBook-Pro:~ hoge$ pwd
/Users/hoge
hogeMacBook-Pro:~ hoge$ ls
Desktop        Downloads    Library        Music        Public
Documents    Dropbox        Movies        Pictures
hogeMacBook-Pro:~ hoge$ mkdir apps
hogeMacBook-Pro:~ hoge$ cd apps
hogeMacBook-Pro:apps hoge$ mkdir lessons
hogeMacBook-Pro:apps hoge$ cd lessons
hogeMacBook-Pro:lessons hoge$ mkdir algolia
hogeMacBook-Pro:lessons hoge$ cd algolia
hogeMacBook-Pro:algolia hoge$ firebase init functions

     ######## #### ########  ######## ########     ###     ######  ########
     ##        ##  ##     ## ##       ##     ##  ##   ##  ##       ##
     ######    ##  ########  ######   ########  #########  ######  ######
     ##        ##  ##    ##  ##       ##     ## ##     ##       ## ##
     ##       #### ##     ## ######## ########  ##     ##  ######  ########

You're about to initialize a Firebase project in this directory:

  /Users/hoge/apps/lessons/algolia


=== Project Setup

First, let's associate this project directory with a Firebase project.
You can create multiple project aliases by running firebase use --add, 
but for now we'll just set up a default project.

? Select a default Firebase project for this directory: myproject (myproject)
i  Using project myproject (myproject)

=== Functions Setup

A functions directory will be created in your project with a Node.js
package pre-configured. Functions can be deployed with firebase deploy.

? What language would you like to use to write Cloud Functions? TypeScript
? Do you want to use TSLint to catch probable bugs and enforce style? Yes
✔  Wrote functions/package.json
✔  Wrote functions/tslint.json
✔  Wrote functions/tsconfig.json
✔  Wrote functions/src/index.ts
✔  Wrote functions/.gitignore
? Do you want to install dependencies with npm now? Yes

> grpc@1.16.1 install /Users/hoge/apps/lessons/algolia/functions/node_modules/grpc
> node-pre-gyp install --fallback-to-build --library=static_library

node-pre-gyp WARN Using request for node-pre-gyp https download 
[grpc] Success: "/Users/hoge/apps/lessons/algolia/functions/node_modules/grpc/src/node/extension_binary/node-v59-darwin-x64-unknown/grpc_node.node" is installed via remote

> protobufjs@6.8.8 postinstall /Users/hoge/apps/lessons/algolia/functions/node_modules/protobufjs
> node scripts/postinstall


> firebase-functions@2.1.0 postinstall /Users/hoge/apps/lessons/algolia/functions/node_modules/firebase-functions
> node ./upgrade-warning


======== WARNING! ========

This upgrade of firebase-functions contains breaking changes if you are upgrading from a version below v1.0.0.

To see a complete list of these breaking changes, please go to:

https://firebase.google.com/docs/functions/beta-v1-diff

npm notice created a lockfile as package-lock.json. You should commit this file.
added 516 packages in 16.919s

i  Writing configuration info to firebase.json...
i  Writing project information to .firebaserc...
i  Writing gitignore file to .gitignore...

✔  Firebase initialization complete!
hogeMacBook-Pro-Pro:algolia hoge$ cd functions
hogeMacBook-Pro-Pro:functions hoge$ ls
node_modules        package.json        tsconfig.json
package-lock.json    src            tslint.json
hogeMacBook-Pro:functions hoge$ npm i algoliasearch --save
+ algoliasearch@3.31.0
added 16 packages in 5.462s
hogeMacBook-Pro-Pro:functions hoge$ firebase functions:config:set algolia.appid=“foobar” algolia.apikey=“hugahuga”
✔  Functions config updated.

Please deploy your functions for the change to take effect by running firebase deploy --only functions

hogeMacBook-Pro-Pro:functions hoge$ firebase deploy --only functions

=== Deploying to ‘myproject’…

i  deploying functions
Running command: npm --prefix "$RESOURCE_DIR" run lint

> functions@ lint /Users/hoge/apps/lessons/algolia/functions
> tslint --project tsconfig.json


WARNING: /Users/hoge/apps/lessons/algolia/functions/src/index.ts[1, 1]: 'functions' is declared but its value is never read.

Running command: npm --prefix "$RESOURCE_DIR" run build

> functions@ build /Users/hoge/apps/lessons/algolia/functions
> tsc

✔  functions: Finished running predeploy script.
i  functions: ensuring necessary APIs are enabled...
✔  functions: all necessary APIs are enabled
i  functions: preparing functions directory for uploading...

✔  Deploy complete!

Project Console: https://console.firebase.google.com/project/myproject/overview
hogeMacBook-Pro-Pro:functions hoge$ 

firebase.jsonは以下の通り記述しています。

//firebase.json

import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
admin.initializeApp();
const env = functions.config();

import * as algoliasearch from 'algoliasearch';

// Initialize the Algolia Client
const client = algoliasearch(env.algolia.appid, env.algolia.apikey);
const index = client.initIndex('zoo_search');

exports.indexAnimal = functions.firestore
  .document('zoo/{animalId}')
  .onCreate((snap, context) => {
    const data = snap.data();
    const objectID = snap.id;

    // Add the data to the algolia index
    return index.addObject({
      objectID,
      ...data
    });
});


//デリート
// exports.unindexAnimal = functions.firestore
//   .document('zoo/{animalId}')
//   .onDelete((snap, context) => {
//     const objectId = snap.id;

//     // Delete an ID from the index
//     return index.deleteObject(objectId);
// });

本当に困っています。
ご教示願います。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • xenbeat

    2018/12/13 11:22 編集

    > 何度も具体的に修正するようにと仰るので、かなり精通されてるのですね
    精通しているというか、回答者はエスパーじゃないので、無償で第三者に問題解決をサポートしてもらいたいというのであれば、あなたは回答者目線でそちらの状況を詳細に説明する必要があります。
    当たり前の話ですが、回答者とあなたは同じ環境ではありません。

    > コメントではなく回答をお願いできますか?
    丸投げすぎて回答できないからコメントでお願いしています。
    回答が1つもついていない現状をご理解ください。

    キャンセル

  • xenbeat

    2018/12/13 11:47 編集

    追記確認しました。
    > indicesのLogs内にPOST,DELETE,GETがあります。ここにCREATEは無いです。
    Algoliaに「CREATE」というログがないのは当たり前でPOSTメソッドがインデックスの追加になります。
    https://www.algolia.com/doc/rest-api/search/#add-object-without-id

    > onCreateはトリガーされていないという事だと思います。
    上記の通り、AlgoliaのPOST(CREATE)とCloud FunctionsのonCreateは別物です。
    なので問題を切り分けるために、Cloud FunctionsのonCreateは正しく起動しているのか、そしてその先にあるAlgoliaのインデックスはPOSTメソッドで正しく作成されているか、ログでちゃんと確認してください。

    というか追記内容見ている感じ、Algolia(外部サービス)へのデータ連携は早すぎるような気がします。
    外部サービスへ連携する前に、Cloud Functionsの基礎を身につけたほうが良いと思います。ご存知かと思いますがFirebaseは公式で日本語ドキュメントが丁寧に用意されています。
    https://firebase.google.com/docs/functions/?hl=ja

    このまま基礎をすっ飛ばして、ネットに転がっているコードをコピって動かないから質問を繰り返してだと何のためにもなりませんし、基礎がないと詳細な状況説明ができないと思うので回答者の負担が大きいです。

    キャンセル

  • 退会済みユーザー

    2019/01/16 12:28

    複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

回答 1

check解決した方法

0

みなさん、コメントありがとうございました。
投げやりにならないよう、再度調べます。
現段階では解決できる力がないのでこれを自己回答とします。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.62%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる