LoginSignup
8
8

More than 3 years have passed since last update.

初めてのFirebaseを触ってみる(Functions)

Last updated at Posted at 2020-04-18

はじめに

おはようございます。こんにちは。こんばんは。
今回はFirebaseのFunctionsについて見てきます。
では、早速行って見ましょう。
※今回もwebベース(Vue.js)の解説です。

Functions(Cloud Functions)とは

https://firebase.google.com/docs/functions?hl=ja
Firebase 機能や HTTPS リクエストによってトリガーされたイベントに応じて、バックエンド コードを自動的に実行できます。

Cloud Functionsの使い方

準備

まずは、CLIでfirebaseコマンドを使えるようにします。

以下のコマンドで、firebase-toolsをインストールします。

$ npm install -g firebase-tools

インストールできたら、正常にインストールされているか以下のコマンドでバージョンを確認してみます。

$ firebase --version

firebaseにログインする
まず、CLIからfirebaseにloginします。

理由は、CLI上からアプリケーションのデプロイをしたいためです。

ログインは以下コマンドで出来ます。

$ firebase login

Cloud Functionsの使い方

適当なディレクトリを作成して移動し、以下を叩きます。

$ firebase init

1__node.png

次に紐ずけるプロジェクトを聞かれるので選択する。

次にFunctionsを書く言語を聞かれるので選択する。
※JavascriptとTypescriptが選べます。
※今回はjavascriptを選択するのでjavascriptを使った解説をします。
次にESLintを使うか聞かれますが特にこだわりがないのでエンターを押します。(指定しないでエンターをするとNoになります)
最後にnpmで依存関係のインストールをするか聞かれます。(指定しないでエンターするとYesになります)
Firebase initialization complete!と出れば準備終了。

因みにみなさんが触るファイルです。

funstions/index.js

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

// // Create and Deploy Your First Cloud Functions
// // https://firebase.google.com/docs/functions/write-firebase-functions

exports.helloWorld = functions.https.onRequest((request, response) => {
 response.send("Hello from Firebase!");
});

ローカル環境での実行

$ cd functions
$ npm run serve

デプロイ

$ firebase deploy

コレクションを取得するAPI


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

// cloud functionでfirestoreを使うのに必要な設定は以下の3行
const admin = require('firebase-admin')
admin.initializeApp(functions.config().firebase)
const db = admin.firestore();

exports.helloWorld = functions.https.onRequest((request, response) => {
 //response.send("Hello from Firebase!");
    db.collection("users")
    .get()
    .then((query) => {
        var buff = [];
        query.forEach((doc) => {
            var data = doc.data();
            buff.push({
                "id": doc.id,
                "name": data.name, 
                "age":data.age
            });
        });
        response.json(buff);
    })
    .catch((error)=>{
        response.send(error);
    });
});

まずここで解説することはCloud FunctionsでFireStoreなどの
Firebaseの機能を使いたいと思ったら、コメントでも書いてあるのですが、
下記のコードを加えてください。


const admin = require('firebase-admin')
admin.initializeApp(functions.config().firebase)
const db = admin.firestore();

ただここで問題が・・・

Firebase上にデプロイすればデータは取れるがローカルではデータが取れません。
開発中にわざわざデプロイしてインターネット上に公開してから動作確認しなければなりません。
はっきり言ってめんどくさいです。
次はローカルでもデータを取得し確認する方法です。
以下の手順を行なってください。
marknote_-_Firebase_コンソール-2.png

③をクリック後jsonファイルができるのでserviceAccountKey.jsonに名前を変え、プロジェクトに追加してください。
このファイルは絶対に後悔しないで下さい

念のためにGitの管理に含めないファイルを指定するためgitignoreの一番下に以下を追加ください。

functions/serviceAccountKey.json

index_js_—_test-2_png.png

最後にこのようにコードを編集するとローカル環境でも動くようになります。


const functions = require('firebase-functions');
// cloud functionでfirestoreを使うのに必要な設定は以下の2行
const admin = require('firebase-admin')
//admin.initializeApp(functions.config().firebase)
const serviceAccount = require("../functions/serviceAccountKey.json");

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "*********************"
});


// // Create and Deploy Your First Cloud Functions
// // https://firebase.google.com/docs/functions/write-firebase-functions

const db = admin.firestore();
exports.helloWorld = functions.https.onRequest((request, response) => {
 //response.send("Hello from Firebase!");
    db.collection("users")
    .get()
    .then((query) => {
        var buff = [];
        query.forEach((doc) => {
            var data = doc.data();
            buff.push({
                "id": doc.id,
                "name": data.name, 
                "age":data.age
            });
        });
        response.json(buff);
    })
    .catch((error)=>{
        response.send(error);
    });
});

感想

  • これを機に本気でTypeScriptやろうと思った。
  • expressを使ってREST APIを作りたい。

ということで緊急クエスト!
expressを使ってのREST API作成方法をやっていきます。

以上。
解説が浅いところとか、間違い等があれば教えてください。
最後まで読んでいただきありがとうございました。

Twitterやってます。良ければチェックして見てください。:point_up::point_up::point_up:

リンク

8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8