ホーム
Sponserd by↑転職したい人向け、ベンチャー企業の採用動画があります

【初心者】Cloud FunctionsでCloud Firestoreにデータを保存する方法【簡単】

こんにちは。まっつんです。

前回、

https://poppotennis.com/cloud-functions/

このような記事を書きました。

今回の記事では、

○Cloud FunctionsでFIrebaseにデータを保存する方法

について、順番に書いていきますが、前回の記事の続きから書いていくので、CloudFunctionsの初期状態の作り方がわからない方は前回の記事をぜひ参考にしてみてください。

モジュールのインストール

コマンドひとつだけです。

//ターミナル(functionsディレクトリ)

npm i firebase-admin --save

これでモジュールがインストールできました。

package.jsonを確認すると、

//package.json

  "dependencies": {
    "firebase-admin": "^8.12.1",
    "firebase-functions": "^3.6.1"
  },

インストールされました。

Firebaseのデータベースを作成しにいく

image29

Firebaseのコンソールにいって、左のメニューでdatabaseを選択するとこのような画面になります。

データベースの作成を押します。

テスト環境→north-east

1で作成します。

image30

このような画面になったら、OKです。

左上の歯車マークをクリックします。

Setting→サービスアカウント→秘密鍵の生成(jsonファイルがダウンロードされる)

ローカルからFirestoreに保存する方法で今回はやります。

実は、デプロイ(firebase上にアップする)方が簡単だったりするんですが、今回はローカルでデータを保存して、機能を作っていきたいなと思います。

まず、functionsディレクトリ配下に、「path」ディレクトリを作成してください。

そして、そのpathディレクトリにさきほどダウンロードしたjsonファイルをコピーして「key.json」というファイル名にします。

image31

こんな感じです。

apikeyは見えてはいけないので、このままの状態ではGithub等に保存しないようにしましょう。

今回はほかの作業を入れると蛇足となるのでこのままでいきます。

ついにindex.jsを触っていく

//index.js

const functions = require('firebase-functions');
const admin = require('firebase-admin');

var serviceAccount = require('./path/key.json');

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
//databaseURLは各々のURLを出してください。
  databaseURL: 'https://testapp-80832.firebaseio.com'
});

var db = admin.firestore();
var postsRef = db.collection('posts');

exports.helloWorld = functions.https.onRequest((request, response) => {
  postsRef.add({
    name: 'テストテストテスト'
  });

  const getItems = async () => postsRef.get();

  async function item() {
    console.log('aaa');
    let answer = [];
    const items = await getItems();
    items.forEach(snap => {
      answer.push(snap.data().name);
      console.log(snap.data().name);
    });
    response.send(answer);
  }
  item();
});

はい。これだとエラー出ますが、一旦起動してみましょう!

前回と同じコマンド、

//ターミナル firebase serve —only functions

これでfunctionsを起動します。エラーが出ます。

UnhandledPromiseRejectionWarning: Error: 9 FAILED_PRECONDITION: The Cloud Firestore API is not enabled

このエラーは、APIkeyが許可されていないという意味らしいです(グーグル翻訳最高)

https://console.cloud.google.com/

image32

画像一番上らへん。testappのところを、自分のプロジェクト名を指定してください。

image33

有効になっていればOKです。

もう一度、起動します。

firebase serve --only functions

うごきましたか?

うまくいっていれば、テストが保存されて、「テスト」が保存されたと思います。

発動するたびにテストという文字列が加算されていくので、自分は今

こんなかんじになっています。

image3

保存するfirebaseのコードは

var db = admin.firestore(); var postsRef = db.collection(‘posts’); postsRef.add({     name: ‘テストテストテスト’ });

これだけです。こういう風に変数で定義してくのは公式ドキュメントのやり方なのですが、もちろん繋げてもいけます。

データの取得は、

  const getItems = async () => postsRef.get();

  async function item() {
    const items = await getItems();
    items.forEach(snap => {
      answer.push(snap.data().name);
    });
  }
  item();

データの取得は非同期にしないといけないのでちょっとややこしいですが、これだけです。

Firebaseのドキュメントに取得の方法は色々書いてあるので、みてみてください。

https://firebase.google.com/docs/firestore/query-data/get-data?hl=ja

まとめ

○CloudFunctionsでFirestoreにデータを保存して取得してみました。

①インストール

②FIrebase準備

③jsonファイルの設置

④GCP公式で有効にする

⑤コードを書く

こんな流れでした!

○わかりにくい部分は修正したりするので気軽にTwitter等で声かけていただければと思います。