2018年12月11日

プログラミング

Rubyからfirebase-rubyでRealtime Databaseにアクセスする

目次

  1. はじめに
  2. Firebase Realtime Databaseとは
  3. firebase-rubyからデータを操作してみる
  4. まとめ

はじめに

新しい技術にチャレンジし続けるeishisのアドベントカレンダーDay11です!

昨日はSketchのシンボル管理を使ってLP制作をする記事でした。

Sketchのシンボル管理を使ってLP制作!

今回はFirebaseのRealtime DatabaseのデータをRubyから、firebase-rubyというGemで操作していきます。

Realtime Databaseとは

GoogleによるFirebaseの機能で、NoSQLのクラウド データベースです。
名前の通り、リアルタイムでのデータ同期が大きな特徴です。例えばチャットのようなリアルタイム性が必要な処理でも利用可能です。

また、クライアント端末(アプリやブラウザ側)でも実行が可能という点も大きく、アプリケーションサーバを立てずともシステムを構築できることも特徴です。

POINT!!

弊社のゆるっぷるというダイエットアプリでも、Realtime Databaseを使用し、チャットシステムを構築しています。また体重の管理やユーザー情報などすべての情報をRealtime Databaseに集約し、アプリケーションを使わないサーバレス構成としています。

ゆるっぷるでのRealtime Databaseのチャットイメージ
fe3.png (189.0 kB)

firebase-rubyからデータを操作してみる

先程、「Realtime Databaseによってサーバレスのシステム構築が可能!」とご紹介しましたが、敢えてアプリケーションサーバ側でRealtime Databaseを使ってみます。

というのも、システムの全てをRealtime Databaseで集約できるわけがなく、RDB(Relational Database)と上手く使い分ける必要がある為です。
その名の通りRelational、つまり関連性をもたせた複雑なテーブル構成の場合にはRDBを使用するほうが良いでしょう。

今回、アプリ側のDBはRealtime Database、サーバ上でのシステムについてはRuby(Ruby on Rails)を使用しRelational Databaseを使用していきます。

firebase-rubyをセットアップ

今回はFirebaseの為のRubyラッパーである、firebase-rubyを使用していきます。
こちらのメインファイルをご覧いただければわかりますが、コード量としては少ないので自前で実装する選択も有りだと思います

では早速、ReadMeに従ってセットアップしていきます。
今回はRuby on Railsのプロジェクト内に組み込んでいきます。

インストール

gem install firebase
もしくはGemfileに gem "firebase" を入れた後に bundle install しましょう。

認証を行う

ReadMeには認証(使用するFirebaseの権限があることの証明)方法が2つ紹介されています。

最初に紹介されている Using Firebase Database Secret ですが、deprecated、つまり非推奨となっています。
なので、Using Firebase Admin SDK private key こちらで認証していきましょう。

今回は既にFirebase Realtime Databaseを作成済の前提となります。Realtime Databaseの使い方はまた別の記事でご紹介していきます。

では、まずこちらからプロジェクトの設定を選択します。
2018-12-11_11_15_37.png (23.6 kB)

次に、サービスアカウントから新しい秘密鍵の生成を選択します。
2018-12-11_11_20_15.png (96.0 kB)

注意モーダルが出ますが、そのままキーを生成しましょう。
 2018-12-11 11.23.41.png (36.3 kB)

すると、jsonファイルがダウンロードされます。

今回はconfig ディレクトリに、jsonファイルを firebase-auth.json とリネームして設置してみます。
プロジェクトによってはconfig/settingskeyfileディレクトリを作って格納することなどもあると思いますので、ここは好みで変えてください。

Realtime Databaseの値を取得する

では、実際にRealtime Databaseの値を取得していきます。

ReadMeを参考に、認証ファイルを使用してfirebaseにアクセスしていきます。
今回はcontrollerからアクセスします。

base_uri = 'https://<your-firebase>.firebaseio.com/' # 本来であればテスト環境と切り分けられるよう、定数に格納しておくのが良いでしょう
private_key_json_string = File.open("#{Rails.root.to_s}/config/firebase-auth.json").read
firebase = Firebase::Client.new(base_uri, private_key_json_string)

これで準備はOKです。
firebaseインスタンスから、あとはサポートされているメソッドを実行していきましょう。
ReadMeにはこうあります。

set(path, data, query_options)
get(path, query_options)
push(path, data, query_options)
delete(path, query_options)
update(path, data, query_options)

今回はgetメソッドを実行し、Realtime Databaseの値を取得していきます。

base_uri = 'https://<your-firebase>.firebaseio.com/' # 本来であればテスト環境と切り分けられるよう、定数に格納しておくのが良いでしょう
private_key_json_string = File.open("#{Rails.root.to_s}/config/firebase-auth.json").read
firebase = Firebase::Client.new(base_uri, private_key_json_string)

response = firebase.get('users') # Realtime Databaseのusers配下を取得
response.success? # booleanで返ってくる trueであれば成功
response.code # 200等ステータスコードが返ってくる
response.body # パースされたJSONデータが返ってくる
response.raw_body # 生のJSONデータが返ってくる

なので、例えばusers/1/nickname というschemaの場合、
response = firebase.get('users/1/nickname').body
とすることで取得可能です。
またユーザー数を取得する場合には firebase.get('users') .body.countとすることで取得可能です。

POINT!!

オプションなどをより知りたい場合はFirebase公式のREST APIドキュメントを見ながら開発していくのが良いでしょう。例えばcallback やshallow といったオプションも指定できることがわかります。

まとめ

今回はFirebaseのRealtime Databaseについて、Rubyからアクセスする方法をご紹介しました。
getメソッドのみご紹介しましたが、他のputやdeleteなどのメソッドについても難しいことはなく、ReadMeやREST APIのガイドを見ると簡単に実装可能です。

クライアントサイドからアクセスされることが多いRealtime Databaseですが、サーバ側からもアクセスすることで集計や既存データと混ぜた複雑な処理が可能となります。
また、その自由度ゆえにRealtime Databaseのschema設定は悩むポイントなので、どこかでご紹介していきたいと思います。

1

0

AUTHOR

eishis

Eishi Saito 総務

SIerやスタートアップ、フリーランスを経て2016年11月にeishis, Inc.を設立。 マーケター・ディレクター・エンジニアなど何でも屋。 COBOLからReactまで色んなことやります。

アプリでもっと便利に!気になる記事をチェック!

記事のお気に入り登録やランキングが表示される昨日に対応!毎日の情報収集や調べ物にもっと身近なメディアになりました。

eishisでは一緒に働く仲間を募集しています

正社員や業務委託、アルバイトやインターンなど雇用形態にこだわらず、
ベテランの方から業界未経験の方まで様々なかたのお力をお借りしたいと考えております。

話を聞いてみたい

運営メンバー

eishis

Eishi Saito 総務

SIerやスタートアップ、フリーランスを経て2016年11月にeishis, Inc.を設立。 マーケター・ディレクター・エンジニアなど何でも屋。 COBOLからReactまで色んなことやります。

sasakki デザイナー

アメリカの大学を卒業後、日本、シンガポールでデザイナーとして活動。

しまだ

しまだ デザイナー

WebAR/VRのデザインと3DCG制作がメインです。 肩書きは「アニメ案件に関わりたいデザイナー」。

Miu マーケター

ドイツでWEBマーケティングしています。

しんのき エンジニア

新しい技術が好きなWebエンジニアです。 元々インフラやPHPをやっていたのですが、最近はReact NativeとFirebaseを使って頑張ってます。

yamakawa

やまかわたかし デザイナー

フロントエンドデザイナー。デザイン・HTML/CSSマークアップ・JSアニメーション実装を担当しています。

furuya エンジニア

サーバーサイド、フロントエンド、Unityと色々手を出してる雑食系エンジニア。ReactNativeが最近のマイブーム。

Sayaka Osanai デザイナー

Sketchだいすきプロダクトデザイナー。シンプルだけどちょっとかわいいデザインが得意。 好きな食べものは生ハムとお寿司とカレーです。

はらた

はらた エンジニア

サーバーサイドエンジニア Ruby on Railsを使った開発を行なっています

うえまつゆい エンジニア

サーバーサイドエンジニアからフロントエンドエンジニアになりました。主にReact Nativeでのアプリ開発をしています。

CONTACT PAGE TOP