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 を入れる
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