上京エンジニアの葛藤

都会に染まる日々

Rails と Cloud Datastore Emulator の接続方法をまとめる

Rails と Cloud Datastore Emulator を接続するのに少し嵌ったのでまとめておきます。

Cloud Datastore Emulator とは

GCP のサービスの一つである Cloud Datastore (以下 GCD) をローカル環境で動かすことができるものです。

通常 GCD を動かす場合お金がかかるので、アプリケーションを開発する際に Emulator を使うことで無料でローカル環境で開発することができるので便利です。

公式ドキュメントはこちら

必要なものを入れる

Cloud Datastore Emulator のインストール

Google Cloud SDK はすでにインストール済みという前提で書いています。

# Cloud Datastore Emulator のインストール
$ gcloud components install cloud-datastore-emulator

# プロジェクトの作成
$ gcloud beta emulators datastore env-init
$ export DATASTORE_EMULATOR_HOST=localhost:8081
$ export DATASTORE_PROJECT_ID=sample-cloud-datastore-emulator-rails

Rails アプリケーションの作成

$ rails new sandbox -O

-O をすることで Active Record をスキップしてアプリケーションを作成することができます。

これが結構キモなんですが、Active Record は GCD に対応していないので、事前にスキップしておいた方が楽です。
自分は初めスキップせずに rails new してしまい、Active Record の使用箇所把握しておらず DB接続できてないよって怒られて直すのに時間がかかりました。

rails new の option についてはこちら
5系でも -O は変わりません。

google-cloud-datastore を入れる

github.com

GCD のクライアントライブラリを入れます。 Gemfile に書いて入れるなりよしなにやって下さい。

はい、これで準備は整ったので実装してみます。

実装

config/database.yml を作成する。
今回は公開することはないので、production, test も同じにしています。

# config/database.yml
development:
  dataset_id: sample-cloud-datastore-emulator-rails

production:
  dataset_id: sample-cloud-datastore-emulator-rails

test:
  dataset_id: sample-cloud-datastore-emulator-rails

controller, model, routes を用意する

# config/routes.rb
Rails.application.routes.draw do
  resources :samples, only: [:index]
end
# app/controllers/samples_controller.rb
class SamplesController < ApplicationController
  def index
    samples = Sample.all
    render :json => samples.to_json
  end
end
# app/models/sample.rb
require 'google/cloud/datastore'

class Sample
  def self.all
    datastore = Google::Cloud::Datastore.new(
      project: Rails.application.config.database_configuration[Rails.env]["dataset_id"]
    )
    query = datastore.query("Samples")
    datastore.run(query)
  end
end

こんな感じの簡単な実装でデータを取得することができます。
クライアントライブラリがあるおかげで簡単に実装することができますね。

今回作成したサンプルコードはもあげておきますので、参考にどうぞ。
github.com

また、公式が実装している railsアプリケーションのサンプルコードもあるので貼っておきます。
github.com 公式ドキュメントはこちら

便利ツール

google-cloud-gui

ブラウザで Datastore の中を確認することができます。
ローカル開発をしていて Emulator の中身を GUI で確認したい時はかなり重宝するのでオススメです。
導入も簡単にすることができます。 github.com