GASでスプレッドシートからFirestoreにデータをインポートする方法
個人開発のサービスを作るときに、色々な技術スタックを使ってまずはプロトタイピングをしてみたいと思いました。
特にフロントエンドの開発をする際には、APIを用意するのですが、毎回APIを準備するのも面倒なので何かいい方法はないかなと思っていたときに、Googleのスプレッドシートでもととなるデータを用意しておいて、それを各種バックエンドのDBに流し込めばいいじゃん!と思ったので今回はその記録です。
Firestoreにデータを流し込みます。
今回書いたコード
Githubにも公開してあります https://github.com/isaka1022/import-to-firestore-from-spreadsheet-gas
function setDataToFireStore() {
var sheet = SpreadsheetApp.openById('<your-spread-sheet-id>').getSheetByName('<your-sheet-name>');
var certification = fireStoreCertification();
var firestore = FirestoreApp.getFirestore(certification.email, certification.key, certification.projectId);
try {
// スプレッドシートに応じてここは変更してください
for ( var i = 2; i < 55; i++ ) {
var titleValue = sheet.getRange(i,1).getValue();
var newData = {
title: titleValue
}
firestore.createDocument("<your-firebase-collection-name>", newData);
}
} catch(e) {
Logger.log(e)
}
}
function fireStoreCertification() {
var certification = {
"email": "<your-service-account>",
"key": "-----BEGIN PRIVATE KEY-----\ ... \----END PRIVATE KEY-----",
"projectId": "<your-project-id>"
}
return certification;
Firestore事前準備
まずはfirestoreを作っていきます。
ここでは詳細は解説しませんが、以下の公式を読み進めました。https://firebase.google.com/docs/firestore/quickstart?hl=ja
またプロジェクトの設定の「サービスアカウト」から、「新しい秘密鍵の設定をしておきます。!## GASにFirestoreのライブラリを追加
続いて、GASを使います
ご自身のGoogleドライブの新規追加ボタンからGoogle Apps Scriptsを追加します。
!追加後に、ツールからスクリプトエディタを起動し、 リソース>ライブラリ>ライブラリを追加から、
1VUSl4b1r1eoNcRWotZM3e87ygkxvXltOgyDZhixqncz9lQ3MjfT1iKFw
を入力し、その最新のバージョンを選択してください。識別子はFirestoreになっているかと思います。
Firestoreへの認証情報を入力
コードのfirestoreCertificationに認証情報を書きます
function fireStoreCertification() {
var certification = {
"email": "<your-service-account>",
"key": "-----BEGIN PRIVATE KEY-----\ ... \----END PRIVATE KEY-----",
"projectId": "<your-project-id>"
}
スプレッドシートを開く
var sheet = SpreadsheetApp.openById('<your-spread-sheet-id>').getSheetByName('<your-sheet-name>');
では開くスプレッドシートを指定します。
- getActiveSpreadsheet()
- openById(id)
- openByUrl(url)
などいくつか開く方法がありますが、僕は上記の方法でやりました。
データを入力
for ( var i = 2; i < 55; i++ ) {
var titleValue = sheet.getRange(i,1).getValue(); var newData = { title: titleValue } firestore.createDocument("<your-firebase-collection-name>", newData); }
に関しては、僕は2行目から54行目のデータを取りたかったのでその数文のループを回しています。 これでnewDataオブジェクトを作成し、createDocumentに渡して上げればあとはFirestoreにデータが追加されました。
参考記事

GAS:SpreadSheetに登録したデータをFirestoreに送信する - Qiita
Goolgle SpreadSheetに登録したデータをFirestoreに送信するGASを実装してみました。 その記録です。 英語ですが詳しいことは、grahamearley/FirestoreGoogleAppsScriptに書かれています。 日本語で自分が参考にした記...

Firebase Cloud Firestoreの使い方 - Qiita
概要 Firebase Realtime Databaseの次世代版。Realtime Databaseはデーターベース制約でいろいろとパフォーマンス等考慮したデータ構造にしないといけなかったが、Cloud Firestoreは自由度が高まったため、データベース制約をあま...

getRangeいろいろ(Google Apps Script、SpreadSheet) - Qiita
はじめに セルの getRange() の引数の種類がたくさんあって列だっけ?行だっけ?ってよくなるので、各メソッドの使用例と範囲指定のイメージ画像をつけて羅列してみることにしました。 サンプルスプレッドシート この画像のデータをいろいろ getRange() して、ど...
blog.8basetech.com/google-apps-script/gas-for/
記事の更新をメールで受け取る
質問・リクエストを送る
記事についての質問や、取り上げてほしいテーマがあればお気軽にどうぞ。いただいた質問はブログ記事として回答し、Q&Aページで公開することがあります。