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へpalanでは一緒に働く仲間を募集しています
正社員や業務委託、アルバイトやインターンなど雇用形態にこだわらず、
ベテランの方から業界未経験の方まで様々なかたのお力をお借りしたいと考えております。
運営メンバー
Eishi Saito 総務
SIerやスタートアップ、フリーランスを経て2016年11月にpalan(旧eishis)を設立。 マーケター・ディレクター・エンジニアなど何でも屋。 COBOLからReactまで色んなことやります。
sasakki デザイナー
アメリカの大学を卒業後、日本、シンガポールでデザイナーとして活動。
やまかわたかし デザイナー
フロントエンドデザイナー。デザインからHTML / CSS、JSの実装を担当しています。最近はReactやReact Nativeをよく触っています。
Sayaka Osanai デザイナー
Sketchだいすきプロダクトデザイナー。シンプルだけどちょっとかわいいデザインが得意。 好きな食べものは生ハムとお寿司とカレーです。
はらた エンジニア
サーバーサイドエンジニア Ruby on Railsを使った開発を行なっています
こぼり ともろう エンジニア
サーバーサイドエンジニア。SIerを経て2019年7月に入社。日々学習しながらRuby on Railsを使った開発を行っています。
ささい エンジニア
フロントエンドエンジニア WebGLとReactが強みと言えるように頑張ってます。
Damien
WebAR/VRの企画・開発をやっています。森に住んでいます。
ゲスト bagelee
かっきー
まりな
suzuki
miyagi
ogawa
雑食デザイナー。UI/UXデザインやコーディング、時々フロントエンドやってます。最近はARも。
いわもと
デザイナーをしています。 好きな食べ物はラーメンです。
taishi kobari
フロントエンドの開発を主に担当してます。Blitz.js好きです。
kubota shogo
サーバーサイドエンジニア。Ruby on Railsを使った開発を行いつつ月500kmほど走っています!
nishi tomoya
aihara
グラフィックデザイナーから、フロントエンドエンジニアになりました。最近はWebAR/VRの開発や、Blender、Unityを触っています。モノづくりとワンコが好きです。
nagao
SIerを経てアプリのエンジニアに。xR業界に興味があり、unityを使って開発をしたりしています。
Kainuma
サーバーサイドエンジニア Ruby on Railsを使った開発を行なっています
sugimoto
asama
ando
iwasawa ayane
oshimo
異業界からやってきたデザイナー。 palanARのUIをメインに担当してます。 これからたくさん吸収していきます!