🙆

【Rails】Firestore に値を格納する

2021/02/27に公開

環境

  • Rails: 6.1.0
  • Ruby: 2.7.2

事前準備

公式ドキュメントにしたがって Cloud Firestore データベースを作成する。

手順

  1. Gemfileにgem "google-cloud-firestore" を記述
  2. bundle install
  3. 認証設定

Tips

認証設定

ドキュメント記載通りFirestoreへ接続するための認証を設定する。方法は、

  • 環境変数としてセットする
  • 手動でセットする(今回自分が使ったもの)
    のどちらか。どちらも設定しないで接続しようとすると、Could not load the default credentials. Browse to (RuntimeError) が発生する。注意点としては、環境変数としてセットすると、それがデフォルトになるらしい。なのでデフォルト以外の環境へアクセスしたい場合は、手動でセットする必要がある。脳死で環境変数を設定すると、思わぬ事故が起こるかも(?)

今回は手動でセットしたの。やり方は以下の通り

  1. コンソール画面から使用したいプロジェクトを選択
  2. プロジェクトの概要横にある歯車マークからユーザーと権限を選択
  3. サービスアカウント > Firebase Admin SDK > 新しい秘密鍵の生成 > 生成されるjsonファイルを任意の場所におく(特段理由がなければRails.root配下でいいかと)

ここまで出来たら、後はコードを書くだけ。以下コード例

hoge.rb
require 'google/cloud/firestore'

class Hoge < ApplicationRecord
  def write
    firestore = Google::Cloud::Firestore.new(project_id: 'ダウンロードしたjsonファイルに書かれているproject_id', credentials: 'ダウンロードしたjsonファイルのパス')  # firestreインスタンスを作成
    doc_ref = firestore.doc("user/admin") # 保存先のパスを指定
    doc_ref.set(id: User.id, name: User.name) # 値を書き込む
  end
end

(credentialsのファイルパスは、File.new('ファイル名.json').to_pathで指定した。本当はRails.rootを使いたかったけど、なぜかうまく読み込めなかった。。。)

ちなみに環境変数を設定している場合、引数のcredentialsは必要ない。また保存先のパスは、書き込み時にそのパスがなければ自動で作られる。値の型も自動で設定される。
実行するとFirestoreのコンソール上でも値が格納されているのが確認出来るはず。

一応読み込みの例も以下に示す。

hoge.rb
  def read
    firestore = Google::Cloud::Firestore.new(project_id: 'ダウンロードしたjsonファイルに書かれているproject_id', credentials: File.new('ダウンロードしたjsonファイル名').to_path)
    doc_ref = firestore.doc("user/admin") # 読み込み先パスを指定
    document = doc_ref.get
    puts document.document_id
    puts document.data[:id]
    puts document.data[:name]
  end

まとめ

鍵ファイルをどこから作成するのかわからなかったのと、ファイル読み込みもがうまく出来なくて結構苦戦した。でも一回設定してしまえば、後は問題ないと思う。

参考

https://firebase.google.com/docs/firestore/quickstart?hl=ja

Discussion