arrow_back

Firestore データベースにデータを読み込む

ログイン 参加
700 以上のラボとコースにアクセス

Firestore データベースにデータを読み込む

ラボ 30分 universal_currency_alt クレジット: 1 show_chart 入門
info このラボでは、学習をサポートする AI ツールが組み込まれている場合があります。
700 以上のラボとコースにアクセス

GSP642

Google Cloud セルフペース ラボのロゴ

Pet Theory バナー

概要

Lily さんは 12 年前、獣医クリニック チェーン「Pet Theory」を開業しました。Pet Theory チェーンはここ数年で急速に拡大しました。しかし、増大した負荷を古い予約システムで処理しきれなくなったため、よりスケーラブルなクラウドベースのシステムが必要になっています。

Pet Theory の運用チームのメンバーは Patrick さんだけなので、継続的なメンテナンスをあまり必要としないソリューションが必要です。そこで、サーバーレス テクノロジーを採用することになりました。

Ruby さんは、Pet Theory のサーバーレス移行を支援するコンサルタントとして雇われています。サーバーレス データベースのオプションを比較した後、チームは Cloud Firestore を採用することにしました。Firestore はサーバーレスなので、容量を事前にプロビジョニングする必要がありません。これはつまり、ストレージやオペレーションが上限に達するリスクがないということです。Firestore では、リアルタイム リスナーを通じてクライアント アプリ間でデータの同期が維持され、モバイルとウェブのオフライン サポートも提供されるので、ネットワーク レイテンシやインターネット接続に関係なく機能する、応答性の高いアプリを構築できます。

このラボでは、Patrick さんが Pet Theory の既存のデータを Cloud Firestore データベースにアップロードする作業をサポートします。Patrick さんは Ruby さんと密接に連携してこの作業を行います。

アーキテクチャ

この図は、使用するサービスの概要と、それらがどのようにつながっているかを示しています。

Firestore データベースへの移行のアーキテクチャ図

目標

このラボでは、次のタスクの実行方法について学びます。

  • Google Cloud で Firestore を設定する。
  • データベースのインポート コードを記述する。
  • テスト用の顧客データのコレクションを生成する。
  • テスト用の顧客データを Firestore に読み込む。

前提条件

これは入門レベルのラボで、Cloud コンソール環境とシェル環境を使った経験があることを前提としています。Firebase の使用経験は役立ちますが、必須ではありません。

ファイルの編集にも慣れている必要があります。ご自身で使い慣れたテキスト エディタ(nanovi など)を使用するか、上部のリボンにある Cloud Shell からコードエディタを起動できます。

[エディタを開く] ボタン

準備ができたら下にスクロールし、手順に沿ってラボ環境を設定します。

設定と要件

[ラボを開始] ボタンをクリックする前に

こちらの説明をお読みください。ラボには時間制限があり、一時停止することはできません。タイマーは、Google Cloud のリソースを利用できる時間を示しており、[ラボを開始] をクリックするとスタートします。

このハンズオンラボでは、シミュレーションやデモ環境ではなく実際のクラウド環境を使って、ラボのアクティビティを行います。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。

このラボを完了するためには、下記が必要です。

  • 標準的なインターネット ブラウザ(Chrome を推奨)
注: このラボの実行には、シークレット モード(推奨)またはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウント間の競合を防ぎ、個人アカウントに追加料金が発生しないようにすることができます。
  • ラボを完了するための時間(開始後は一時停止できません)
注: このラボでは、受講者アカウントのみを使用してください。別の Google Cloud アカウントを使用すると、そのアカウントに料金が発生する可能性があります。

ラボを開始して Google Cloud コンソールにログインする方法

  1. [ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるダイアログでお支払い方法を選択してください。 左側の [ラボの詳細] ペインには、以下が表示されます。

    • [Google Cloud コンソールを開く] ボタン
    • 残り時間
    • このラボで使用する必要がある一時的な認証情報
    • このラボを行うために必要なその他の情報(ある場合)
  2. [Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウで開く] を選択します)。

    ラボでリソースがスピンアップし、別のタブで [ログイン] ページが表示されます。

    ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。

    注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。
  3. 必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。

    {{{user_0.username | "Username"}}}

    [ラボの詳細] ペインでもユーザー名を確認できます。

  4. [次へ] をクリックします。

  5. 以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。

    {{{user_0.password | "Password"}}}

    [ラボの詳細] ペインでもパスワードを確認できます。

  6. [次へ] をクリックします。

    重要: ラボで提供された認証情報を使用する必要があります。Google Cloud アカウントの認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
  7. その後次のように進みます。

    • 利用規約に同意してください。
    • 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
    • 無料トライアルには登録しないでください。

その後、このタブで Google Cloud コンソールが開きます。

注: Google Cloud のプロダクトやサービスにアクセスするには、ナビゲーション メニューをクリックするか、[検索] フィールドにサービス名またはプロダクト名を入力します。 ナビゲーション メニュー アイコンと検索フィールド

Cloud Shell をアクティブにする

Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。

  1. Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン 「Cloud Shell をアクティブにする」アイコン をクリックします。

  2. ウィンドウで次の操作を行います。

    • Cloud Shell 情報ウィンドウで操作を進めます。
    • Cloud Shell が認証情報を使用して Google Cloud API を呼び出すことを承認します。

接続した時点で認証が完了しており、プロジェクトに各自の Project_ID が設定されます。出力には、このセッションの PROJECT_ID を宣言する次の行が含まれています。

Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}

gcloud は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。

  1. (省略可)次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list
  1. [承認] をクリックします。

出力:

ACTIVE: * ACCOUNT: {{{user_0.username | "ACCOUNT"}}} To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (省略可)次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project

出力:

[core] project = {{{project_0.project_id | "PROJECT_ID"}}} 注: Google Cloud における gcloud ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。

タスク 1. Google Cloud で Firestore を設定する

Patrick さんのタスクは、Pet Theory の既存のデータを Cloud Firestore データベースにアップロードすることです。彼はこの目標を達成するために Ruby さんと連携します。Ruby さんは、IT 部門の Patrick さんから次のメッセージを受け取りました。

Patrick

Patrick さん(IT 管理者)

Ruby さん、お世話になっております。

サーバーレス化にあたり、まず Google Cloud で Firestore データベースを作成しようと思います。こうした設定作業には不慣れなため、アドバイスをいただければと考えています。

Patrick

Ruby

Ruby さん(ソフトウェア コンサルタント)

Patrick さん、ご連絡ありがとうございます。

承知しました。喜んでお手伝いさせていただきます。つきましては、作業を開始するためのリソースを送付いたします。データベースの作成が終わり次第、ご連絡いただけますでしょうか。よろしくお願いいたします。

Ruby

Patrick さんが Cloud コンソールで Firestore データベースを設定できるようにサポートしましょう。

  1. Cloud コンソールのナビゲーション メニュー(console_nav_small.png)で [すべてのプロダクトを表示] をクリックし、[データベース] で [Firestore] を選択します。

  2. [Firestore データベースを作成] をクリックします。

  3. [Standard Edition] を選択します。

  4. [構成オプション] で [Firestore ネイティブ] を選択します。

  5. [セキュリティ ルール] には [開く] を選択します。

  6. [ロケーション タイプ] で [リージョン] をクリックし、リストから「set at lab start」リージョンを選択します。

    注: リージョンのリストが表示されない場合は、ブラウザを更新するか、Cloud コンソールのメニューからウィザードを再度実行してください。
注: どちらのモードもパフォーマンスと整合性に優れていますが、見た目が異なり、それぞれのユースケース向けに最適化されています。
  1. その他の設定はデフォルトのままにして、[データベースを作成] をクリックします。

タスクの完了後、Ruby さんから Patrick さんに次のメールが届きます。

Ruby

Ruby さん(ソフトウェア コンサルタント)

Patrick さん、ご連絡ありがとうございます。

Firestore データベースの設定、お疲れさまでした。データベースへのアクセスを管理するには、必要な権限とともに自動的に作成されたサービス アカウントを使用することになります。

以上で、古いデータベースから Firestore に移行する準備は完了です。

Ruby

Patrick

Patrick さん(IT 管理者)

Ruby さん、お世話になっております。

おかげさまで Firestore データベースは簡単に設定できました。ありがとうございます。

インポート プロセスも簡単であるとよいのですが、以前のデータベースでは、かなり複雑で手間がかかったように記憶しています。

Patrick

タスク 2. データベースのインポート コードを記述する

新しい Cloud Firestore データベースは準備できましたが、中身は空の状態です。Pet Theory の顧客データは、まだ古いデータベースにのみ存在します。

Patrick さんは Ruby さんに次のメッセージを送信します。

Patrick

Patrick さん(IT 管理者)

Ruby さん、お世話になっております。

弊社の上司の意向により、新しい Firestore データベースに対して、顧客データの移行を開始したいと考えております。

従来のデータベースから CSV ファイルをエクスポートしましたが、このデータを Firestore に読み込む方法がわかりません。

この方法につき、ご教示いただければ助かります。よろしくお願いいたします。

Patrick

Ruby

Ruby さん(ソフトウェア コンサルタント)

Patrick さん、ご連絡ありがとうございます。

承知しました。では、どのような作業が必要になるか、打ち合わせにてお話しさせていただければと思います。よろしくお願いいたします。

Ruby

Patrick さんが言うとおり、顧客データは CSV ファイルで用意されます。ここで Patrick さんをサポートしましょう。CSV ファイルから顧客レコードを読み取って Firestore に書き込むアプリを作成します。Patrick さんは JavaScript に精通しているので、Node.js JavaScript ランタイムを使用してこのアプリケーションを構築します。

  1. Cloud Shell ターミナルで次のコマンドを実行し、Pet Theory リポジトリのクローンを作成します。
git clone https://github.com/rosera/pet-theory
  1. Cloud Shell コードエディタ(または任意のエディタ)を使用してファイルを編集します。Cloud Shell セッションの上部のリボンにある [エディタを開く] をクリックすると、新しいタブでエディタが開きます。プロンプトが表示されたら、[新しいウィンドウで開く] をクリックしてコードエディタを起動します。

[エディタを開く] ボタン

  1. 次に、現在の作業ディレクトリを lab01 に変更します。
cd pet-theory/lab01

ディレクトリ内には、Patrick さんの package.json があります。このファイルは、Node.js プロジェクトが依存するパッケージをリストしたものです。これによりビルドが再現可能になり、他のユーザーとも簡単に共有できるようになります。

package.json の例を以下に示します。

{ "name": "lab01", "version": "1.0.0", "description": "This is lab01 of the Pet Theory labs", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [], "author": "Patrick - IT", "license": "MIT", "dependencies": { "csv-parse": "^5.5.3" } }

ソースコードが読み込まれたので、Patrick さんは Ruby さんに連絡を取って、移行を実施するためにどのパッケージが必要なのかを確認します。

Patrick

Patrick さん(IT 管理者)

Ruby さん、お世話になっております。

古いデータベースで使用しているコードはかなり基本的なもので、インポート用の CSV だけを作成します。始める前にダウンロードが必要なものがあれば、お知らせいただけると助かります。

Patrick

Ruby

Ruby さん(ソフトウェア コンサルタント)

Patrick さん、ご連絡ありがとうございます。

Google Cloud には Node パッケージがたくさん用意されていますので、そのいずれかを使って Firestore を操作することをおすすめします。

そうすれば、煩雑な作業をパッケージに任せられるので、既存のコードに簡単な変更を加えるだけで済みます。

Ruby

Patrick さんのコードを Firestore データベースに書き込めるようにするには、追加のピア依存関係をインストールする必要があります。

  1. 以下のコマンドを実行します。
npm install @google-cloud/firestore
  1. アプリが Cloud Logging にログを書き込めるように、追加のモジュールをインストールします。
npm install @google-cloud/logging

コマンドが正常に実行されると、package.json が自動的に更新され、新しいピア依存関係が含まれるようになります。これは次のようになります。

... "dependencies": { "@google-cloud/firestore": "^7.11.3", "@google-cloud/logging": "^11.2.0", "csv-parse": "^5.5.3" }

次に、スクリプトについて見てみます。このスクリプトは、顧客の CSV ファイルを読み取り、その CSV ファイルの各行に対応するレコードを Firestore に書き込むものです。Patrick さんの元のアプリケーションを以下に示します。

const csv = require('csv-parse'); const fs = require('fs'); function writeToDatabase(records) { records.forEach((record, i) => { console.log(`ID: ${record.id} Email: ${record.email} Name: ${record.name} Phone: ${record.phone}`); }); return ; } async function importCsv(csvFilename) { const parser = csv.parse({ columns: true, delimiter: ',' }, async function (err, records) { if (e) { console.error('Error parsing CSV:', e); return; } try { console.log(`Call write to Firestore`); await writeToDatabase(records); console.log(`Wrote ${records.length} records`); } catch (e) { console.error(e); process.exit(1); } }); await fs.createReadStream(csvFilename).pipe(parser); } if (process.argv.length < 3) { console.error('Please include a path to a csv file'); process.exit(1); } importCsv(process.argv[2]).catch(e => console.error(e));

これは、入力 CSV ファイルから出力を取得し、従来のデータベースに読み込むものです。次に、このコードを更新し、Firestore に対して書き込むようにします。

  1. ファイル pet-theory/lab01/importTestData.js を開きます。

アプリケーションから Firestore API を参照するには、既存のコードベースにピア依存関係を追加する必要があります。

  1. ファイルの 3 行目に次の Firestore 依存関係を追加します。
const { Firestore } = require("@google-cloud/firestore");

ファイルの先頭が次のようになっていることを確認します。

const csv = require('csv-parse'); const fs = require('fs'); const { Firestore } = require("@google-cloud/firestore"); // これを追加

Firestore データベースとの統合は、数行のコードで実現できます。そこで Ruby さんは、Patrick さんとあなたにテンプレート コードを共有しました。

  1. if (process.argv.length < 3) 句の後、34 行目の下に次の内容を追加します。
async function writeToFirestore(records) { const db = new Firestore({ // projectId: projectId }); const batch = db.batch() records.forEach((record)=>{ console.log(`Write: ${record}`) const docRef = db.collection("customers").doc(record.email); batch.set(docRef, record, { merge: true }) }) batch.commit() .then(() => { console.log('Batch executed') }) .catch(err => { console.log(`Batch error: ${err}`) }) return }

上記のコード スニペットは、ラボの前半で作成したデータベースを参照する新しいデータベース オブジェクトを宣言します。 この関数は、各レコードを順番に処理し、追加された ID に基づいてドキュメント参照を割り当てるバッチ プロセスを使用します。関数の最後に、バッチ コンテンツがデータベースに commit(書き込み)されます。

  1. importCsv 関数を更新して、writeToFirestore の関数呼び出しを追加し、writeToDatabase の呼び出しを削除します。次のようになります。
async function importCsv(csvFilename) { const parser = csv.parse({ columns: true, delimiter: ',' }, async function (err, records) { if (err) { console.error('Error parsing CSV:', err); return; } try { console.log(`Call write to Firestore`); await writeToFirestore(records); // await writeToDatabase(records); console.log(`Wrote ${records.length} records`); } catch (e) { console.error(e); process.exit(1); } }); await fs.createReadStream(csvFilename).pipe(parser); }
  1. アプリケーションのロギングを追加します。アプリケーションを通じて Logging API を参照するには、既存のコードベースにピア依存関係を追加します。ファイルの上部にある他の require ステートメントのすぐ下に、次の行を追加します。
const { Logging } = require('@google-cloud/logging');

ファイルの先頭が次のようになっていることを確認します。

const csv = require('csv-parse'); const fs = require('fs'); const { Firestore } = require("@google-cloud/firestore"); const { Logging } = require('@google-cloud/logging');
  1. 次に、いくつかの定数変数を追加し、Logging クライアントを初期化します。これらはファイルの上記の行(~5 行目)のすぐ下に次のように追加します。
const logName = "pet-theory-logs-importTestData"; // Logging クライアントの作成 const logging = new Logging(); const log = logging.log(logName); const resource = { type: "global", };
  1. 「console.log(Wrote ${records.length} records);」行のすぐ下に、importCsv 関数にログを書き込むための次のようなコードを追加します。
// テキスト ログエントリ success_message = `Success: importTestData - Wrote ${records.length} records`; const entry = log.entry( { resource: resource }, { message: `${success_message}` } ); log.write([entry]);

上記の更新の後、importCsv 関数のコードブロックは次のようになります。

async function importCsv(csvFilename) { const parser = csv.parse({ columns: true, delimiter: ',' }, async function (err, records) { if (err) { console.error('Error parsing CSV:', err); return; } try { console.log(`Call write to Firestore`); await writeToFirestore(records); // await writeToDatabase(records); console.log(`Wrote ${records.length} records`); // テキスト ログエントリ success_message = `Success: importTestData - Wrote ${records.length} records`; const entry = log.entry( { resource: resource }, { message: `${success_message}` } ); log.write([entry]); } catch (e) { console.error(e); process.exit(1); } }); await fs.createReadStream(csvFilename).pipe(parser); }

これで、アプリケーション コードを実行すると、Firestore データベースが CSV ファイルの内容で更新されるようになります。importCsv 関数はファイル名を取得し、コンテンツを行ごとに解析します。処理された各行は、Firestore 関数 writeToFirestore に送信されます。ここで、新しい各レコードが「顧客」データベースに書き込まれます。

注: 本番環境では、独自のバージョンのインポート スクリプトを記述します。

Patrick さんの新しい同僚が業務に慣れるよう支援する

最近まで、Pet Theory の運用チームは Patrick さん 1 人だけでした。サーバーレスの Cloud Firestore データベース ソリューションはメンテナンスが少なくて済みますが、Patrick さんの上司である Lily さんは、Patrick さんをサポートするもう 1 人のメンバーをチームに採用しました。Lily さんは、新しいチームメンバーがすぐに業務に慣れるようサポートしてほしいとあなたに頼みます。

Gemini Code Assist では AI を活用した Smart Actions をコードエディタに直接表示できるため、コンテキストの切り替えを最小限に抑えながら生産性を向上させることができます。

Cloud Shell IDE で Gemini Code Assist を有効にする

Cloud Shell などの統合開発環境(IDE)で Gemini Code Assist を使用して、コードに関するガイダンスを受けたり、コードの問題を解決したりできます。使用を開始する前に、Gemini Code Assist を有効にする必要があります。

  1. Cloud Shell で、次のコマンドを使用して Gemini for Google Cloud API を有効にします。
gcloud services enable cloudaicompanion.googleapis.com
  1. Cloud Shell ツールバーの [エディタを開く] をクリックします。
注: Cloud Shell エディタを開くには、Cloud Shell ツールバーの [エディタを開く] をクリックします。必要に応じて、[エディタを開く] または [ターミナルを開く] をクリックして、Cloud Shell とコードエディタを切り替えることができます。
  1. 左側のペインで [設定] アイコンをクリックし、[設定] ビューで「Gemini Code Assist」を検索します。

  2. [Geminicodeassist: Enable] のチェックボックスがオンになっていることを確認し、[設定] を閉じます。

  3. 画面下部のステータスバーで [Cloud Code - No Project] をクリックします。

  4. 指示に従ってプラグインを承認します。プロジェクトが自動的に選択されない場合は、[Google Cloud プロジェクトを選択する] をクリックして を選択します。

  5. ステータスバーの Cloud Code ステータス メッセージに Google Cloud プロジェクト()が表示されていることを確認します。

そこで、新しい運用チームメンバーに importTestData.js という Node.js スクリプトを説明するために Gemini Code Assist を使うことにしました。

  1. Node.js スクリプト importTestData.js が Cloud Shell コードエディタのファイル ディレクトリ pet-theory/lab01 で開いており、IDE で Gemini Code Assist が有効になっている状態で、エディタの右上に Gemini Code Assist: Smart Actions アイコンが表示されていることを確認します。

  2. Gemini Code Assist: Smart Actions アイコン Gemini Code Assist: Smart Actions をクリックし、[Explain this] を選択します。

  3. Gemini Code Assist は、「Explain this」というプロンプトが事前入力されたチャットペインを開きます。Code Assist チャットのインライン テキスト ボックスで、事前入力されたプロンプトを次のプロンプトに置き換えて、[Send] をクリックします。

You are a senior software engineer on the Ops team at the Pet Theory chain of veterinary clinics. Analyze the Node.js script importTestData.js and provide a detailed explanation for a member who is new to the team. 1. Describe the primary purpose of the script. 2. Break down the functionality of each of the key functions: importCsv and writeToFirestore. 3. Explain how the script handles the CSV file and what libraries are used for this process. 4. Detail how the data is written to Firestore and how it uses a batch operation. 5. Explain the purpose of the Google Cloud Logging integration. For the suggested improvements, don't update this file.

Node.js スクリプト importTestData.js のコードの説明が、Gemini Code Assist のチャットに表示されます。

タスク 3. テストデータを作成する

さて、それではデータを読み込みます。Patrick さんは、実際の顧客データを使ったテストの実行について懸念していることを Ruby さんに伝えます。

Patrick

Patrick さん(IT 管理者)

Ruby さん、お世話になっております。

顧客のプライバシーを保つため、テストでは顧客データを使用しないほうがよいのではと考えています。一方で、データ インポート スクリプトが正しく機能できることを確認する必要があります。

他のテスト方法などあれば、教えていただけますと助かります。

Patrick

Ruby

Ruby さん(ソフトウェア コンサルタント)

Patrick さん、ご連絡ありがとうございます。

ご心配なされていること、ごもっともと存じます。顧客データには個人を特定できる情報(PII)が含まれている可能性があるため、取り扱いに注意が必要です。

つきましては、疑似顧客データを作成するスターター コードをいくつかご紹介いたします。作成したデータを使用して、インポート スクリプトをテストできます。

Ruby

Patrick さんが、この疑似ランダムデータ生成ツールを起動して実行できるようにサポートしましょう。

  1. 最初に、疑似顧客データを生成するスクリプト用の「faker」ライブラリをインストールします。次のコマンドを実行して、package.json の依存関係を更新します。
npm install faker@5.5.3
  1. 次に、コードエディタで createTestData.js という名前のファイルを開き、コードを調べます。次のようになっていることを確認します。
const fs = require('fs'); const faker = require('faker'); function getRandomCustomerEmail(firstName, lastName) { const provider = faker.internet.domainName(); const email = faker.internet.email(firstName, lastName, provider); return email.toLowerCase(); } async function createTestData(recordCount) { const fileName = `customers_${recordCount}.csv`; var f = fs.createWriteStream(fileName); f.write('id,name,email,phone\n') for (let i=0; i<recordCount; i++) { const id = faker.datatype.number(); const firstName = faker.name.firstName(); const lastName = faker.name.lastName(); const name = `${firstName} ${lastName}`; const email = getRandomCustomerEmail(firstName, lastName); const phone = faker.phone.phoneNumber(); f.write(`${id},${name},${email},${phone}\n`); } console.log(`Created file ${fileName} containing ${recordCount} records.`); } recordCount = parseInt(process.argv[2]); if (process.argv.length != 3 || recordCount < 1 || isNaN(recordCount)) { console.error('Include the number of test data records to create. Example:'); console.error(' node createTestData.js 100'); process.exit(1); } createTestData(recordCount);
  1. コードベースに Logging を追加します。3 行目に、アプリケーション コードから Logging API モジュールへの参照を追加します。
const { Logging } = require("@google-cloud/logging");

ファイルの先頭は次のようになります。

const fs = require("fs"); const faker = require("faker"); const { Logging } = require("@google-cloud/logging"); //これを追加
  1. 次に、いくつかの定数変数を追加し、Logging クライアントを初期化します。これは const ステートメントのすぐ下に追加します。
const logName = "pet-theory-logs-createTestData"; // Logging クライアントの作成 const logging = new Logging(); const log = logging.log(logName); const resource = { // この例では、わかりやすくするために「global」リソースをターゲットにしています type: "global", };
  1. 「console.log(Created file ${fileName} containing ${recordCount} records.);」行のすぐ下に、createTestData 関数にログを書き込むための次のようなコードを追加します。
// テキスト ログエントリ const success_message = `Success: createTestData - Created file ${fileName} containing ${recordCount} records.`; const entry = log.entry( { resource: resource }, { name: `${fileName}`, recordCount: `${recordCount}`, message: `${success_message}`, } ); log.write([entry]);
  1. 更新後、createTestData 関数のコードブロックは次のようになります。
async function createTestData(recordCount) { const fileName = `customers_${recordCount}.csv`; var f = fs.createWriteStream(fileName); f.write('id,name,email,phone\n') for (let i=0; i<recordCount; i++) { const id = faker.datatype.number(); const firstName = faker.name.firstName(); const lastName = faker.name.lastName(); const name = `${firstName} ${lastName}`; const email = getRandomCustomerEmail(firstName, lastName); const phone = faker.phone.phoneNumber(); f.write(`${id},${name},${email},${phone}\n`); } console.log(`Created file ${fileName} containing ${recordCount} records.`); // テキスト ログエントリ const success_message = `Success: createTestData - Created file ${fileName} containing ${recordCount} records.`; const entry = log.entry( { resource: resource }, { name: `${fileName}`, recordCount: `${recordCount}`, message: `${success_message}`, } ); log.write([entry]); }

新しいチームメンバーのオンボーディングを続行する

Gemini Code Assist は、必要なときにその場で AI を活用したコーディング支援を提供します。

このセクションでは、新しい運用チームメンバーのオンボーディングを続けるために、別の Node.js スクリプトの説明を Gemini Code Assist に依頼します。

  1. Cloud Shell コードエディタのファイル ディレクトリ pet-theory/lab01 で Node.js スクリプト createTestData.js を開いた状態で、Gemini Code Assist: Smart ActionsGemini Code Assist: Smart Actions)アイコンをクリックし、[Explain this] を選択します。

  2. Gemini Code Assist は、「Explain this」というプロンプトが事前入力されたチャットペインを開きます。Code Assist チャットのインライン テキスト ボックスで、事前入力されたプロンプトを次のプロンプトに置き換えて、[Send] をクリックします。

You are a senior software engineer on the Ops team at the Pet Theory chain of veterinary clinics. Analyze the Node.js script createTestData.js and provide a detailed explanation for a new team member. 1. Describe the overall purpose of the script. 2. Explain the role of the "createTestData" function, detailing how it uses the "faker" library to generate data. 3. Describe how the script writes data to a CSV file. 4. Explain the purpose of the Google Cloud Logging integration and what information is logged. 5. Explain the command-line argument handling at the end of the script. For the suggested improvements, don't update this file.

Node.js スクリプト createTestData.js のコードの説明が、Gemini Code Assist のチャットに表示されます。

  1. Cloud Shell ターミナルで次のコマンドを実行して、customers_1000.csv ファイルを作成します。このファイルには、1,000 件のテストデータ レコードが含まれます。
node createTestData 1000

次のような出力が返されます。

Created file customers_1000.csv containing 1000 records.
  1. customers_1000.csv ファイルを開き、テストデータが作成されていることを確認します。

完了したタスクをテストする

[進行状況を確認] をクリックして、実行したタスクを確認します。Firestore データベースのサンプル テストデータを正常に作成していれば、評価スコアが表示されます。

Firestore データベース用のテストデータを作成する

タスク 4. テスト用の顧客データを読み込む

  1. インポート機能をテストするには、インポート スクリプトと前に作成したテストデータの両方を使用します。
node importTestData customers_1000.csv

次のような出力が返されます。

Writing record 500 Writing record 1000 Wrote 1000 records
  1. 次のようなエラーが発生することがあります。
Error: Cannot find module 'csv-parse'

その場合は、次のコマンドを実行して、csv-parse パッケージを環境に追加します。

npm install csv-parse
  1. 次に、コマンドを再実行します。次の出力が表示されます。

出力:

Writing record 500 Writing record 1000 Wrote 1000 records

ここまで、テストデータとスクリプトを作成して、Firestore にデータを読み込む方法を見てきました。 Patrick さんは、顧客データを Firestore データベースに読み込む作業に自信を持てるようになりました。

完了したタスクをテストする

[進行状況を確認] をクリックして、実行したタスクを確認します。 サンプル テストデータが Firestore データベースに正常に読み込まれた場合は、評価スコアが表示されます。

Firestore データベースにテストデータを読み込む

タスク 5. Firestore でデータを調べる

あなたと Ruby さんが少しサポートしたおかげで、Patrick さんはテストデータを Firestore データベースに問題なく移行できました。Firestore を開いて、結果を確認してください。

  1. Cloud コンソールのタブに戻ります。ナビゲーション メニューconsole_nav_small.png)で [すべてのプロダクトを表示] をクリックし、[データベース] で [Firestore] を選択して、[default] データベースをクリックしてから、鉛筆アイコンをクリックします。 鉛筆アイコン

  2. /customers と入力し、Enter キーを押します。

  3. ブラウザのタブを更新すると、以下の顧客リストが正常に移行されたことがわかります。

顧客リスト

お疲れさまでした

このラボでは、Firestore の実践演習を行い、Gemini Code Assist の Smart Actions を IDE で直接使用する方法を学びました。テスト用顧客データのコレクションを生成してから、スクリプトを実行してデータを Firestore に読み込みました。次に、Cloud コンソールを通じて Firestore のデータを操作する方法を学びました。

Google Cloud トレーニングと認定資格

Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。

マニュアルの最終更新日: 2025 年 8 月 27 日

ラボの最終テスト日: 2025 年 8 月 27 日

Copyright 2025 Google LLC. All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。

始める前に

  1. ラボでは、Google Cloud プロジェクトとリソースを一定の時間利用します
  2. ラボには時間制限があり、一時停止機能はありません。ラボを終了した場合は、最初からやり直す必要があります。
  3. 画面左上の [ラボを開始] をクリックして開始します

シークレット ブラウジングを使用する

  1. ラボで使用するユーザー名パスワードをコピーします
  2. プライベート モードで [コンソールを開く] をクリックします

コンソールにログインする

    ラボの認証情報を使用して
  1. ログインします。他の認証情報を使用すると、エラーが発生したり、料金が発生したりする可能性があります。
  2. 利用規約に同意し、再設定用のリソースページをスキップします
  3. ラボを終了する場合や最初からやり直す場合を除き、[ラボを終了] はクリックしないでください。クリックすると、作業内容がクリアされ、プロジェクトが削除されます

このコンテンツは現在ご利用いただけません

利用可能になりましたら、メールでお知らせいたします

ありがとうございます。

利用可能になりましたら、メールでご連絡いたします

1 回に 1 つのラボ

既存のラボをすべて終了して、このラボを開始することを確認してください

シークレット ブラウジングを使用してラボを実行する

このラボの実行には、シークレット モードまたはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウントの競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。