GSP642


概要
Lily さんは 12 年前、獣医クリニック チェーン「Pet Theory」を開業しました。Pet Theory チェーンはここ数年で急速に拡大しました。しかし、増大した負荷を古い予約システムで処理しきれなくなったため、よりスケーラブルなクラウドベースのシステムが必要になっています。
Pet Theory の運用チームのメンバーは Patrick さんだけなので、継続的なメンテナンスをあまり必要としないソリューションが必要です。そこで、サーバーレス テクノロジーを採用することになりました。
Ruby さんは、Pet Theory のサーバーレス移行を支援するコンサルタントとして雇われています。サーバーレス データベースのオプションを比較した後、チームは Cloud Firestore を採用することにしました。Firestore はサーバーレスなので、容量を事前にプロビジョニングする必要がありません。これはつまり、ストレージやオペレーションが上限に達するリスクがないということです。Firestore では、リアルタイム リスナーを通じてクライアント アプリ間でデータの同期が維持され、モバイルとウェブのオフライン サポートも提供されるので、ネットワーク レイテンシやインターネット接続に関係なく機能する、応答性の高いアプリを構築できます。
このラボでは、Patrick さんが Pet Theory の既存のデータを Cloud Firestore データベースにアップロードする作業をサポートします。Patrick さんは Ruby さんと密接に連携しながら作業を完了します。
アーキテクチャ
この図は、使用するサービスの概要と、それらがどのようにつながっているかを示しています。

目標
このラボでは、次のタスクの実行方法について学びます。
- Google Cloud で Firestore を設定する。
- データベースのインポート コードを記述する。
- テスト用の顧客データのコレクションを生成する。
- テスト用の顧客データを Firestore に読み込む。
前提条件
これは入門レベルのラボで、Cloud コンソール環境とシェル環境に精通していることを前提としています。Firebase の使用経験も推奨されますが、必須ではありません。
ファイルの編集にも慣れている必要があります。ご自身で使い慣れたテキスト エディタ(nano、vi など)を使用するか、上部のリボンにある Cloud Shell からコードエディタを起動できます。
![[エディタを開く] ボタン](https://cdn.qwiklabs.com/UqR6a8QkaHUK41NyziQtVya67mqA9ivrzslZSt4sIoo%3D)
準備ができたら下にスクロールし、手順に沿ってラボ環境を設定します。
設定と要件
[ラボを開始] ボタンをクリックする前に
こちらの説明をお読みください。ラボには時間制限があり、一時停止することはできません。タイマーは、Google Cloud のリソースを利用できる時間を示しており、[ラボを開始] をクリックするとスタートします。
このハンズオンラボでは、シミュレーションやデモ環境ではなく実際のクラウド環境を使って、ラボのアクティビティを行います。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。
このラボを完了するためには、下記が必要です。
- 標準的なインターネット ブラウザ(Chrome を推奨)
注: このラボの実行には、シークレット モード(推奨)またはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウント間の競合を防ぎ、個人アカウントに追加料金が発生しないようにすることができます。
- ラボを完了するための時間(開始後は一時停止できません)
注: このラボでは、受講者アカウントのみを使用してください。別の Google Cloud アカウントを使用すると、そのアカウントに料金が発生する可能性があります。
ラボを開始して Google Cloud コンソールにログインする方法
-
[ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるダイアログでお支払い方法を選択してください。
左側の [ラボの詳細] ペインには、以下が表示されます。
- [Google Cloud コンソールを開く] ボタン
- 残り時間
- このラボで使用する必要がある一時的な認証情報
- このラボを行うために必要なその他の情報(ある場合)
-
[Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウで開く] を選択します)。
ラボでリソースがスピンアップし、別のタブで [ログイン] ページが表示されます。
ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。
注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。
-
必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。
{{{user_0.username | "Username"}}}
[ラボの詳細] ペインでもユーザー名を確認できます。
-
[次へ] をクリックします。
-
以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。
{{{user_0.password | "Password"}}}
[ラボの詳細] ペインでもパスワードを確認できます。
-
[次へ] をクリックします。
重要: ラボで提供された認証情報を使用する必要があります。Google Cloud アカウントの認証情報は使用しないでください。
注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
-
その後次のように進みます。
- 利用規約に同意してください。
- 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
- 無料トライアルには登録しないでください。
その後、このタブで Google Cloud コンソールが開きます。
注: Google Cloud のプロダクトやサービスにアクセスするには、ナビゲーション メニューをクリックするか、[検索] フィールドにサービス名またはプロダクト名を入力します。
Cloud Shell をアクティブにする
Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。
-
Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン
をクリックします。
-
ウィンドウで次の操作を行います。
- 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 にプリインストールされており、タブ補完がサポートされています。
- (省略可)次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list
- [承認] をクリックします。
出力:
ACTIVE: *
ACCOUNT: {{{user_0.username | "ACCOUNT"}}}
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- (省略可)次のコマンドを使用すると、プロジェクト 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 データベースにアップロードすることです。Patrick さんはこの目標を達成するために、Ruby さんと密接に連携する必要があります。Ruby さんは、Patrick さんから次のメッセージを受け取りました……
|

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

Ruby さん(ソフトウェア コンサルタント)
|
Patrick さん、こんにちは。
承知しました。喜んでお手伝いさせていただきます。つきましては、作業を開始するためのリソースを送付いたします。データベースの作成が完了したら、改めてご連絡いたします。
Ruby
|
Patrick さんが Cloud コンソールで Firestore データベースを設定できるようにサポートしましょう。
-
Cloud コンソールのナビゲーション メニュー(
)で [すべてのプロダクトを表示] をクリックし、[データベース] で [Firestore] を選択します。
-
[Firestore データベースを作成] をクリックします。
-
[Standard Edition] を選択します。
-
[構成オプション] で [Firestore ネイティブ] を選択します。
-
[セキュリティ ルール] には [開く] を選択します。
-
[ロケーション タイプ] で [リージョン] をクリックし、リストから「set at lab start」リージョンを選択します。
注: リージョンのリストが表示されない場合は、ブラウザを更新するか、Cloud コンソールのメニューからウィザードを再度実行してください。
注: どちらのモード(Firestore ネイティブと Datastore)も高パフォーマンスで強整合性ですが、見た目が異なり、それぞれのユースケース向けに最適化されています。
- その他の設定はデフォルトのままにして、[データベースを作成] をクリックします。
タスクの完了後、Ruby さんから Patrick さんに次のメールが届きます。
|

Ruby さん(ソフトウェア コンサルタント)
|
Patrick さん、こんにちは。
Firestore データベースの設定、お疲れさまでした。データベースへのアクセスを管理するには、必要な権限とともに自動的に作成されたサービス アカウントを使用することになります。
以上で、古いデータベースから Firestore に移行する準備は完了です。
Ruby
|
|

Patrick さん(IT 管理者)
|
Ruby さん、こんにちは。
おかげで Firestore データベースは簡単に設定できました。ありがとうございます。
インポート プロセスも簡単であるとよいのですが、以前のデータベースでは、かなり複雑で手間がかかったように記憶しています。
Patrick
|
タスク 2. データベースのインポート コードを記述する
新しい Cloud Firestore データベースは準備できましたが、中身は空の状態です。Pet Theory の顧客データは、まだ古いデータベースにのみ存在します。
Patrick さんは Ruby さんに次のメッセージを送信します。
|

Patrick さん(IT 管理者)
|
Ruby さん、こんにちは。
上司から、新しい Firestore データベースへの顧客データの移行を開始するよう指示がありました。
従来のデータベースから CSV ファイルをエクスポートしましたが、このデータを Firestore に読み込む方法がわかりません。
教えていただけますか?
Patrick
|
|

Ruby さん(ソフトウェア コンサルタント)
|
Patrick さん、こんにちは。
承知しました。では、どのような作業が必要になるか、打ち合わせをしましょう。
Ruby
|
Patrick さんが言うとおり、顧客データは CSV ファイルで用意されます。ここで Patrick さんをサポートしましょう。CSV ファイルから顧客レコードを読み取って Firestore に書き込むアプリを作成します。Patrick さんは JavaScript に精通しているので、Node.js JavaScript ランタイムを使用してこのアプリケーションを構築します。
- Cloud Shell ターミナルで次のコマンドを実行し、Pet Theory リポジトリをクローンします。
git clone https://github.com/rosera/pet-theory
- Cloud Shell コードエディタ(または任意のエディタ)を使用してファイルを編集します。Cloud Shell セッションの上部のリボンにある [エディタを開く] をクリックすると、新しいタブでエディタが開きます。プロンプトが表示されたら、[新しいウィンドウで開く] をクリックしてコードエディタを起動します。
![[エディタを開く] ボタン](https://cdn.qwiklabs.com/UqR6a8QkaHUK41NyziQtVya67mqA9ivrzslZSt4sIoo%3D)
- 次に、現在の作業ディレクトリを
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 さん(IT 管理者)
|
Ruby さん、こんにちは。
古いデータベースで使用しているコードはかなりシンプルで、インポート処理用にCSVファイルを作成するだけのものです。始める前にダウンロードが必要なものがあれば、教えてください。
Patrick
|
|

Ruby さん(ソフトウェア コンサルタント)
|
Patrick さん、こんにちは。
Google Cloud には Node パッケージがたくさん用意されていますので、そのいずれかを使って Firestore を操作することをおすすめします。
そうすれば、煩雑な作業をパッケージに任せられるので、既存のコードに簡単な変更を加えるだけで済みます。
Ruby
|
Patrick さんのコードを Firestore データベースに書き込めるようにするには、追加のピア依存関係をインストールする必要があります。
- 以下のコマンドを実行します。
npm install @google-cloud/firestore
- アプリが 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 に対して書き込むようにします。
- ファイル
pet-theory/lab01/importTestData.js を開きます。
アプリケーションから Firestore API を参照するには、既存のコードベースにピア依存関係を追加する必要があります。
- ファイルの 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 さんとあなたにテンプレート コードを共有しました。
- 34 行目の下、または
if (process.argv.length < 3) 条件文の下に次の内容を追加します。
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
}
上記のコード スニペットは、ラボの前半で作成したデータベースを参照する新しいデータベース オブジェクトを宣言します。
この関数は、バッチプロセスを使用して各レコードを順番に処理し、レコード内の識別子に基づいてドキュメント参照を作成します。関数の最後に、バッチ コンテンツがデータベースに commit(書き込み)されます。
-
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);
}
- アプリケーションのロギングを追加します。アプリケーションを通じて 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');
- 次に、いくつかの定数変数を追加し、Logging クライアントを初期化します。これらはファイルの上記の行(~5 行目)のすぐ下に次のように追加します。
const logName = "pet-theory-logs-importTestData";
// ロギング クライアントを作成する
const logging = new Logging();
const log = logging.log(logName);
const resource = {
type: "global",
};
- 「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 に送信されます。ここで、新しい各レコードが「顧客(customers)」コレクションに書き込まれます。
注: 本番環境では、独自のバージョンのインポート スクリプトを記述します。
Patrick さんの新しいチームメンバーが業務に慣れるよう支援する
最近まで、Pet Theory の運用チームは Patrick さん 1 人だけでした。サーバーレスの Cloud Firestore データベース ソリューションはメンテナンスが少なくて済みますが、Patrick さんの上司である Lily さんは、Patrick さんをサポートするもう 1 人のメンバーをチームに採用しました。Lily さんは、新しいチームメンバーがすぐに業務に慣れるようサポートしてほしいと考えています。
Gemini Code Assist は、AI を活用したスマート アクションをコードエディタ内で直接提供するため、コンテキストの切り替えを最小限に抑えながら生産性を向上させることができます。
Cloud Shell IDE で Gemini Code Assist を有効にする
Cloud Shell などの統合開発環境(IDE)で Gemini Code Assist を使用して、コードに関するガイダンスを受けたり、コードの問題を解決したりできます。使用を開始する前に、Gemini Code Assist を有効にする必要があります。
- Cloud Shell で、次のコマンドを使用して Gemini for Google Cloud API を有効にします。
gcloud services enable cloudaicompanion.googleapis.com
- Cloud Shell ツールバーの [エディタを開く] をクリックします。
注: Cloud Shell エディタを開くには、Cloud Shell ツールバーの [エディタを開く] をクリックします。必要に応じて、[エディタを開く] または [ターミナルを開く] をクリックして、Cloud Shell とコードエディタを切り替えることができます。
-
左側のペインで [設定] アイコンをクリックし、[設定] ビューで「Gemini Code Assist」を検索します。
-
[Geminicodeassist: Enable] のチェックボックスがオンになっていることを確認し、[設定] を閉じます。
-
画面下部のステータスバーで [Cloud Code - No Project] をクリックします。
-
指示に従ってプラグインを承認します。プロジェクトが自動的に選択されない場合は、[Google Cloud プロジェクトを選択する] をクリックして を選択します。
-
ステータスバーの Cloud Code ステータス メッセージに Google Cloud プロジェクト()が表示されていることを確認します。
ここでは、Gemini Code Assist を使って Node.js スクリプト importTestData.js を新しい運用チームメンバーに説明します。
-
Cloud Shell コードエディタのファイル ディレクトリ pet-theory/lab01 で Node.js スクリプト importTestData.js を開き、IDE で Gemini Code Assist を有効にします。エディタの右上隅に
アイコンが表示されていることを確認します。
-
Gemini Code Assist: Smart Actions アイコン
をクリックし、[この内容を説明] を選択します。
-
Gemini Code Assist は、「Explain this」というプロンプトが事前入力されたチャットペインを開きます。Code Assist チャットのインライン テキスト ボックスで、事前入力されたプロンプトを次のプロンプトに置き換えて、[送信] をクリックします。
あなたは、獣医クリニック チェーン「Pet Theory」の運用チームのシニア ソフトウェア エンジニアです。Node.js スクリプト importTestData.js を分析し、チームに新しく加わったメンバーに詳細な説明をしてください。
1. スクリプトの主な目的を説明する。
2. 主要な関数である importCsv と writeToFirestore の機能をそれぞれ詳しく説明する。3. スクリプトで CSV ファイルを処理する方法と、このプロセスで使用されるライブラリについて説明する。
4. データが Firestore に書き込まれる方法と、バッチ オペレーションが使用される方法について詳しく説明する。
5. Google Cloud Logging の統合の目的を説明する。
改善案があってもこのファイルは更新しないこと。
Node.js スクリプト importTestData.js のコードの説明が、Gemini Code Assist のチャットに表示されます。
タスク 3. テストデータを作成する
さて、それではデータを読み込みます。Patrick さんは、実際の顧客データを使ったテストの実行について懸念していることを Ruby さんに伝えます。
|

Patrick さん(IT 管理者)
|
Ruby さん、こんにちは。
顧客のプライバシーを保つため、テストでは顧客データを使用しないほうがよいのではと考えています。一方で、データ インポート スクリプトが正しく機能できることを確認する必要があります。
他のテスト方法などあれば、教えてもらえますか?
Patrick
|
|

Ruby さん(ソフトウェア コンサルタント)
|
Patrick さん、こんにちは。
確かにそうですね。顧客データには個人を特定できる情報(PII)が含まれている可能性があるため、取り扱いに注意が必要です。
疑似顧客データを作成するスターター コードをいくつかご紹介いたします。このコードで作成したデータを使用してインポート スクリプトをテストできます。
Ruby
|
Patrick さんが、この疑似ランダムデータ生成ツールを起動して実行できるようにサポートしましょう。
- 最初に、疑似顧客データを生成するスクリプト用の「faker」ライブラリをインストールします。次のコマンドを実行して、
package.json の依存関係を更新します。
npm install faker@5.5.3
- 次に、コードエディタで 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);
- コードベースに Logging を追加します。3 行目に、アプリケーション コードから Logging API モジュールへの参照を追加します。
const { Logging } = require("@google-cloud/logging");
ファイルの先頭は次のようになります。
const fs = require("fs");
const faker = require("faker");
const { Logging } = require("@google-cloud/logging"); //これを追加
- 次に、いくつかの定数変数を追加し、Logging クライアントを初期化します。これは
const ステートメントのすぐ下に追加します。
const logName = "pet-theory-logs-createTestData";
// ロギング クライアントを作成する
const logging = new Logging();
const log = logging.log(logName);
const resource = {
// この例では、わかりやすくするために「global」リソースを対象とする
type: "global",
};
- 「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]);
- 更新後、
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 にリクエストします。
-
Cloud Shell コードエディタのファイル ディレクトリ pet-theory/lab01 で Node.js スクリプト createTestData.js を開き、その状態で Gemini Code Assist: Smart Actions
アイコンをクリックして [Explain this] を選択します。
-
Gemini Code Assist は、「Explain this」という事前入力されたプロンプトを含むチャットペインを開きます。Code Assist チャットのインライン テキスト ボックスで、事前入力されたプロンプトを次のプロンプトに置き換えて、[送信] をクリックします。
あなたは、獣医クリニック チェーン「Pet Theory」の運用チームのシニア ソフトウェア エンジニアです。Node.js スクリプト createTestData.js を分析し、新しいチームメンバー向けに詳細な説明を提供してください。
1. スクリプトの全体的な目的を説明する。
2. 「createTestData」関数の役割を説明し、「faker」ライブラリを使用してデータを生成する方法を詳しく説明する。
3. スクリプトがデータを CSV ファイルに書き込む方法を説明する。
4. Google Cloud Logging の統合の目的と、ログに記録される情報を説明する。
5. スクリプトの最後にあるコマンドライン引数の処理について説明する。
改善案があってもこのファイルは更新しないこと。
Node.js スクリプト createTestData.js のコードの説明が、Gemini Code Assist のチャットに表示されます。
- Cloud Shell で次のコマンドを実行して、
customers_1000.csv ファイルを作成します。このファイルには、テストデータ 1,000 レコードが含まれます。
node createTestData 1000
次のような出力が返されます。
Created file customers_1000.csv containing 1000 records.
-
customers_1000.csv ファイルを開き、テストデータが作成されていることを確認します。
完了したタスクをテストする
[進行状況を確認] をクリックして、実行したタスクを確認します。Firestore データベースのサンプル テストデータを正常に作成していれば、評価スコアが表示されます。
Firestore データベース用のテストデータを作成する
タスク 4. テスト用の顧客データを読み込む
- インポート機能をテストするには、インポート スクリプトと前に作成したテストデータの両方を使用します。
node importTestData customers_1000.csv
次のような出力が返されます。
Writing record 500
Writing record 1000
Wrote 1000 records
- 次のようなエラーが発生することがあります。
Error: Cannot find module 'csv-parse'
その場合は、次のコマンドを実行して、csv-parse パッケージを環境に追加します。
npm install csv-parse
- 次に、コマンドを再実行します。次の出力が表示されます。
出力:
Writing record 500
Writing record 1000
Wrote 1000 records
ここまで、テストデータとスクリプトを作成して、Firestore にデータを読み込む方法を見てきました。
Patrick さんは、顧客データを Firestore データベースに読み込む作業に自信を持てるようになりました。
完了したタスクをテストする
[進行状況を確認] をクリックして、実行したタスクを確認します。
サンプル テストデータが Firestore データベースに正常に読み込まれた場合は、評価スコアが表示されます。
Firestore データベースにテストデータを読み込む
タスク 5. Firestore でデータを調べる
あなたと Ruby さんが少しサポートして、Patrick さんはテストデータを Firestore データベースに問題なく移行できました。Firestore を開いて、結果を確認してください。
-
Cloud コンソールのタブに戻ります。ナビゲーション メニュー(
)で [すべてのプロダクトを表示] をクリックし、[データベース] で [Firestore] を選択して、[デフォルト] データベースをクリックして表示したら、鉛筆アイコンをクリックします。

-
/customers と入力し、Enter キーを押します。
-
ブラウザのタブを更新すると、以下の顧客リストが正常に移行されたことがわかります。

お疲れさまでした
このラボでは、Firestore の実践演習を行い、IDE で直接 Gemini Code Assist のスマート アクションを使用する方法を学びました。テスト用顧客データのコレクションを生成してから、スクリプトを実行してデータを Firestore に読み込みました。それから、Cloud コンソールを通じて Firestore のデータを操作する方法を学びました。
Google Cloud トレーニングと認定資格
Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。
マニュアルの最終更新日: 2025 年 8 月 27 日
ラボの最終テスト日: 2025 年 10 月 13 日
Copyright 2025 Google LLC. All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。