RubyでBigQuery Emulatorを使う

そもそもBigQuery Emulatorについて

BigQuery EmulatorはGoogleBigQueryのモックサービスのようなもので、 これまで、BigQueryを利用した分析クエリの実装など、ユニットテストの実装がコストが高く、 面倒なところだったので、ユニットテストは作らずレビューのみでカバーしていたりしたのですが、これは便利そうです。今のところ他にも決定版はなさそうで、現状これ一択かなと。

ですが、Rubyのクライアントで使ってみるまでに少し対応が必要だったので、動かすまでの方法を残しておく。

ここでは、BigQueryEmulatorの基本的な使い方だったりは他の記事でもそれなりに情報があるので、 それをどうやってRubyのクライアントで使うか?の説明にとどめます。

1. queryが動かないので、ForkされたBigQuery Emulatorを利用する

2023/09/18 現在、issueにもあるのですが、情報が足りないため、RubyのClientではqueryメソッドを実行すると、情報は取得できているものの、クライアントがレスポンスを組み立てる際に、エラーになるようです。

現状、このコードはMergeされていないので、Forkされた実装を利用するしかないです。 Docker Composeで動かしたかったので、Forkされたコードをビルドしてレジストリにプッシュして対応しました。

2. クライアントの設定を行う

クライアントには gem 'google-cloud-bigquery'を利用しています。

クライアントの設定を下記で行ってください。 特筆するべき点は、config.endpointで0.0.0.0:9050を設定していて、 Docker Composeで立ち上げているBigQuery Emulatorを参照するようにしています。 ちゃんと/まで入力しないとエラーになるので気をつけてください。

def initialize
  Google::Cloud::Bigquery.configure do |config|
    config.project_id  = "dummy_project_name"
    config.credentials = Rails.root.join("config/service_account.json")
    config.endpoint = "http://0.0.0.0:9050/"
  end
  @bigquery = Google::Cloud::Bigquery.new
end

以上の設定を行うと、BigQuery Emulatorを接続先としてGoogle::Cloud::Bigqueryからおこなうようにできるようになりました。

まとめ

このエミュレーターがどこまで利用できるかは現在も検証中ですが、最新鋭の機能を使ったりしなければ問題なく使えそうな感じがしました。 エミュレーターを使ってRSpecやMiniTest上でBigQueryのクエリを利用した実装のユニットテストを書いたりできるので、RubyとBigQueryを組み合わせたプロダクトの開発や作りたいツールがあるので活用できればと考えています。