Cloud Firestore の Datastore モードでの使用

Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQL ドキュメント データベースです。これは Datastore の最新バージョンで、Datastore のいくつかの点が改善されています。

App Engine アプリで主に使用されるデータベースの場合は、Firestore を Datastore モードで使用することをおすすめします。Firestore モードの詳細については、ネイティブ モードと Datastore モードからの選択をご覧ください。

このドキュメントでは、Google Cloud Client Library を使用して Datastore モードのデータベースにデータを格納する方法、または Datastore モードのデータベースからデータを取得する方法について説明します。

前提条件と設定

App Engine の Ruby 用「Hello, World!」の説明に従って環境とプロジェクトを設定し、App Engine での Ruby アプリの構造を理解してください。このドキュメントで説明しているサンプルアプリを実行する際に必要となるため、プロジェクト ID を書き留めておきます。

リポジトリのクローン作成

サンプルをダウンロード(クローンを作成)します。

git clone https://github.com/GoogleCloudPlatform/ruby-docs-samples
cd ruby-docs-samples/appengine/datastore

プロジェクト構成の編集と依存関係の設定

Gemfile に、Datastore モードの関数が含まれている google-cloud ライブラリを追加します。

source "https://rubygems.org"

gem "google-cloud-datastore"
gem "sinatra"

アプリケーション コード

このサンプル アプリケーションは訪問者の IP のログ記録、取得、表示を行います。ログエントリがタイプ visit の単純な 2 フィールド クラスで、save コマンドを使用して Datastore モードに保存されることがわかります。Dataset run コマンドを使用すると、最新の 10 件の訪問を降順で取得できます。

require "digest/sha2"
require "sinatra"
require "google/cloud/datastore"

get "/" do
  datastore = Google::Cloud::Datastore.new

  # Save visit in Datastore
  visit = datastore.entity "Visit" do |v|
    v["user_ip"]   = Digest::SHA256.hexdigest request.ip
    v["timestamp"] = Time.now
  end
  datastore.save visit

  # Query the last 10 visits from the Datastore
  query     = datastore.query("Visit").order("timestamp", :desc).limit(10)
  visits    = datastore.run query

  response.write "Last 10 visits:\n"

  visits.each do |visit|
    response.write "Time: #{visit['timestamp']} Addr: #{visit['user_ip']}\n"
  end

  content_type "text/plain"
  status 200
end

index.yaml ファイルの使用

このサンプルアプリは簡単なクエリを実行しています。複雑な Datastore モードのクエリには 1 つ以上のインデックスが必要です。インデックスは、アプリとともにアップロードする index.yaml ファイルで指定する必要があります。このファイルは、手動で作成することも、ローカルでアプリをテストする際に自動作成することもできます。

ローカルテスト

アプリケーションを開発してローカルでテストする必要がある場合は、Datastore モード エミュレータを使用できます。

詳細情報

最適化やコンセプトなどの Datastore モードの詳細は、Datastore モードの Cloud Firestore に関するドキュメントをご覧ください。