2018年12月11日
プログラミング
Rubyからfirebase-rubyでRealtime Databaseにアクセスする


はじめに
新しい技術にチャレンジし続けるeishisのアドベントカレンダーDay11です!
昨日はSketchのシンボル管理を使ってLP制作をする記事でした。
今回はFirebaseのRealtime DatabaseのデータをRubyから、firebase-rubyというGemで操作していきます。
Realtime Databaseとは
GoogleによるFirebaseの機能で、NoSQLのクラウド データベースです。
名前の通り、リアルタイムでのデータ同期が大きな特徴です。例えばチャットのようなリアルタイム性が必要な処理でも利用可能です。
また、クライアント端末(アプリやブラウザ側)でも実行が可能という点も大きく、アプリケーションサーバを立てずともシステムを構築できることも特徴です。
POINT!!
弊社のゆるっぷるというダイエットアプリでも、Realtime Databaseを使用し、チャットシステムを構築しています。また体重の管理やユーザー情報などすべての情報をRealtime Databaseに集約し、アプリケーションを使わないサーバレス構成としています。
ゆるっぷるでのRealtime Databaseのチャットイメージ

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の使い方はまた別の記事でご紹介していきます。
では、まずこちらからプロジェクトの設定を選択します。

次に、サービスアカウントから新しい秘密鍵の生成を選択します。

注意モーダルが出ますが、そのままキーを生成しましょう。

すると、jsonファイルがダウンロードされます。
今回はconfig ディレクトリに、jsonファイルを firebase-auth.json とリネームして設置してみます。
プロジェクトによってはconfig/settingsやkeyfileディレクトリを作って格納することなどもあると思いますので、ここは好みで変えてください。
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設定は悩むポイントなので、どこかでご紹介していきたいと思います。
Ruby on Railsのお仕事に関するご相談
Bageleeの運営会社、palanではRuby on Railsに関するお仕事のご相談を無料で承っております。
zoomなどのオンラインミーティング、お電話、貴社への訪問、いずれも可能です。
ぜひお気軽にご相談ください。
この記事は
参考になりましたか?
4
1
関連記事

2021年12月23日
RailsアプリにGoogle Mapから緯度経度情報を取得する機能を追加する

2021年12月22日
RDBでセットメニューを表現する方法

2021年12月11日
Railsでツリー構造アプリを作ってみた

2021年12月10日
Dockerで作成したRailsアプリケーションをHerokuにデプロイする

2021年12月9日
モデルに書いていたメソッドをPOROに切り出してみた!

2021年12月7日
gem cancancanを使ってみた!
簡単に自分で作れるWebAR
「palanAR」はオンラインで簡単に作れるWebAR作成ツールです。WebARとはアプリを使用せずに、Webサイト上でARを体験できる新しい技術です。
palanARへ








