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設定は悩むポイントなので、どこかでご紹介していきたいと思います。

Ruby on Railsのお仕事に関するご相談

Bageleeの運営会社、palanではRuby on Railsに関するお仕事のご相談を無料で承っております。
zoomなどのオンラインミーティング、お電話、貴社への訪問、いずれも可能です。
ぜひお気軽にご相談ください。

無料相談フォームへ

4

1

AUTHOR

eishis

Eishi Saito 総務

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

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

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

簡単に自分で作れるWebAR

「palanAR」はオンラインで簡単に作れるWebAR作成ツールです。WebARとはアプリを使用せずに、Webサイト上でARを体験できる新しい技術です。

palanARへ
palanar

palanはWebARの開発を
行っています

弊社では企画からサービスの公開終了まで一緒に関わらせていただきます。 企画からシステム開発、3DCG、デザインまで一貫して承ります。

webar_waterpark

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

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

話を聞いてみたい

運営メンバー

eishis

Eishi Saito 総務

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

sasakki デザイナー

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

yamakawa

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

フロントエンドデザイナー。デザインからHTML / CSS、JSの実装を担当しています。最近はReactやReact Nativeをよく触っています。

Sayaka Osanai デザイナー

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

はらた

はらた エンジニア

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

kobori

こぼり ともろう エンジニア

サーバーサイドエンジニア。SIerを経て2019年7月に入社。日々学習しながらRuby on Railsを使った開発を行っています。

sasai

ささい エンジニア

フロントエンドエンジニア WebGLとReactが強みと言えるように頑張ってます。

damien

Damien

WebAR/VRの企画・開発をやっています。森に住んでいます。

ゲスト bagelee

ゲスト bagelee

かっきー

かっきー

まりな

まりな

suzuki

suzuki

miyagi

ogawa

ogawa

雑食デザイナー。UI/UXデザインやコーディング、時々フロントエンドやってます。最近はARも。

いわもと

いわもと

デザイナーをしています。 好きな食べ物はラーメンです。

kobari

taishi kobari

フロントエンドの開発を主に担当してます。Blitz.js好きです。

shogokubota

kubota shogo

サーバーサイドエンジニア。Ruby on Railsを使った開発を行いつつ月500kmほど走っています!

nishi tomoya

aihara

aihara

グラフィックデザイナーから、フロントエンドエンジニアになりました。最近はWebAR/VRの開発や、Blender、Unityを触っています。モノづくりとワンコが好きです。

nagao

SIerを経てアプリのエンジニアに。xR業界に興味があり、unityを使って開発をしたりしています。

kainuma

Kainuma

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

sugimoto

sugimoto

asama

ando

iwasawa ayane

oshimo

oshimo

異業界からやってきたデザイナー。 palanARのUIをメインに担当してます。 これからたくさん吸収していきます!

CONTACT PAGE TOP