2016年11月18日金曜日

firebase-admin を使ってサーバからデータベースを操作してみた

概要

Firebase へのデータの保存と取得をサーバサイドからやってみました
今回は公式の nodejs のライブラリを使って操作してみました

環境

  • Mac OS 10.12.1
  • nodejs 5.9.1
  • firebase-admin 4.0.2

認証情報の取得

Firebase にアクセスするための admin ユーザの認証情報を取得します
認証情報は各プロジェクトごとに割り当てられています
まず Firebase のコンソール画面から「権限」を選択します
firebase_admin_download_auth1.png

すると Google の IAM 管理の画面に移動するので左メニューからサービスアカウントを選択します
一覧の中に「firebase-adminsdk」というユーザがいるので、一番右のメニューから「鍵を作成」を選択します
firebase_admin_download_auth2.png

鍵のフォーマットを選択する画面になるので JSON を選択して鍵を生成します
すると認証情報が記載された json ファイルがダウンロードできます
firebase_admin_download_auth3.png

この json ファイルを使って Firebase に認証します

ライブラリのインストール

では、nodejs を使ってプログラミングしていきます
まずは公式が公開しているライブラリをインストールします

  • npm install firebase-admin --save

で OK です

初期化

まずは Firebase にアクセスするために認証情報を使って初期化します

var admin = require("firebase-admin");
var serviceAccount = require("./your-project-admin.json");

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://your-db-id.firebaseio.com/"
});

var database = admin.database();

ダウンロードした認証情報のファイルを require で読み込みます
あとは initializeApp 関数を呼び出してデータベースを初期化します

以降は database オブジェクトを操作することでデータの読み書きを行います

データの保存

先ほどの初期化した処理の下にデータを保存する処理を追記しましょう
teamA/users というパスの配下にユーザを追加するような処理になっています

var ref = database.ref("teamA");                                                                                                  
var usersRef = ref.child("users");
usersRef.set({
  hawk: {
    age: 1,
    sex: "male"
  },
  snow: {
    age: 1,
    sex: "famale"
  }
});

実行して Firebase のコンソールでデータを確認すると以下のように表示されると思います
firebase_admin_saved_data.png

データの取得

続けて保存したデータを取得してみたいと思います
snapshot という単位で保存したデータを取得します
初期化のあとに以下を記載してください

var ref = database.ref("teamA");                                                                                                  
ref.on("value", function(snapshot) {
  console.log(snapshot.val());
}, function (errorObject) {
  console.log("The read failed: " + errorObject.code);
});

データが取得できると実行したコンソール画面に以下のように表示されると思います

{ users: 
   { hawk: { age: 1, sex: 'male' },
     snow: { age: 1, sex: 'famale' } } }

ちなみに、node を実行している状態でコンソールからデータを追加するとそのデータもリアルタイムで node 側にデータが表示されると思います
firebase_admin_push_data.png

{ users: 
   { hawk: { age: 1, sex: 'male' },
     log: { age: 2, sex: 'male' },
     snow: { age: 1, sex: 'famale' } } }

最後に

nodejs から Firebase へのデータの保存と取得を行ってみました
データベースは Firebase だと「Realtime Database」という位置づけになるので、取得などの処理は少し癖のある感じになっています

Websocket や MQTT のように一度コネクションを張れば基本はそのコネクションを使いまわしてデータの取得をリアルタイムに行っている感じだと思います

一応クエリやフィルタの概念はあるので検索やソートできると思います
その辺りも後で検証してみたいなとは思っています
あとはサーバサイドからの更新や削除もやってみようかなと思います

参考サイト

0 件のコメント:

コメントを投稿