GASでfirebaseの情報をスプシに書き起こす

Firestore

Firebase

はじめに

色々調べながら手探りでやって行ったので、変なところ多いかもしれません🙏 🙏何卒🙏

準備

Firestoreにデータはあるものとします。

スクリーンショット 20211107 2.58.48.png

スプレッドシートにGASのスクリプト作成とライブラリの追加

  1. スプレッドシートを作成し、「ツール」から「スクリプト エディタ」を選択します。

スクリーンショット 20211107 3.02.45.png

  1. ライブラリに「1VUSl4b1r1eoNcRWotZM3e87ygkxvXltOgyDZhixqncz9lQ3MjfT1iKFw」と入力し、FirestoreAppを追加

スクリーンショット 20211107 3.06.08.png

マイアプリの作成

(正直これ要るのかわからない)

  1. firebase consoleの設定から「プロジェクトの設定」へ

スクリーンショット 20211107 3.07.46.png

  1. マイアプリのアプリの追加から「</>」を選択

スクリーンショット 20211107 3.12.25.png

  1. 入力項目を埋めていく

秘密鍵の作成

プロジェクトの設定の「サービスアカウント」へ移動 スクリーンショット 20211107 3.18.30.png

「Firebase Admin SDK」が選択されていることを確認し、「新しい秘密鍵の作成」を押す。 JSONファイルがダウンロードされたらOK

中身はこんな感じ

json
{ "type": "service_account", "project_id": "ahiahi", "private_key_id": "himitudayo", "private_key": "-----BEGIN PRIVATE KEY-----\nkusonagai\n-----END PRIVATE KEY-----\n", "client_email": "nantoka@name.iam.gserviceaccounko.com", "client_id": "123456789", "auth_uri": "https://authauth", "token_uri": "https://tokentoken", "auth_provider_x509_cert_url": "https://authth", "client_x509_cert_url": "https://cliant" }

コードを書いていくっ!!

スプシから作ったエディタに書き込んでいく まずは、firebaseの設定のための関数

.gs
function firestoreData() { const dataArray = { "email": "nantoka@name.iam.gserviceaccounko.com", "key": "-----BEGIN PRIVATE KEY-----\najhiank\n-----END PRIVATE KEY-----\n", "projectId": "botbotbotbot" } return dataArray; }

中身は今まで作った鍵とかから参照

次に、firebaseからデータを取ってくるべ!

.gs
function myFunction() { // ここで設定 const dataArray = firestoreData(); const firestore = FirestoreApp.getFirestore(dataArray.email, dataArray.key, dataArray.projectId); // usersを取得 const docs = firestore.getDocuments("users"); // 今回欲しいのはユーザーネームと技術タグのみなので、それを取り出す const res = docs.map((doc) =&gt; { const technologys = doc.fields.technology.arrayValue.values.map((tech) =&gt; { return tech.stringValue }) return [ doc.fields.userName.stringValue, technologys.join(", ") ] }) console.log(res) }

やってることはコメントアウトを参照!

取り出したデータの形が変だったから色々処理を書かないとダメだった...

実際に実行してみると、上手く取れてる!

最初、実行の時にアクセス権がどうとか言われたが、詳細から危険なページ(みたいなニュアンスのリンク)に飛んだらアクセス権を与えることができる!小さいので分かりにくいから注意

ここから、スプシにデータを送るコード

.gs
myFunction() { // さっきのコードは省略 // ここから追加 // SpreadsheetAppを使用 const sheet = SpreadsheetApp.getActiveSheet(); // 今後データの種類が変わるかもなので一応格納 const row = 2 const rowNum = res.length const colNum = 2 // ここで、スプシに記入 詳しくはwebへ! sheet.getRange(row, 1, rowNum, colNum).setValues(res) }

さあ、ここまででできがったコードを実行してみると、、

スクリーンショット 20211107 3.47.17.png

いい感じに出力されてる!!

まとめ

そういう感じで、上手く繋げることができました! 自分はfirebaseの設定周りで永遠時間を溶かしてしまったので、誰かの助けになれればと思います🙌

ただし、この記事を信じるか信じないかはあなた次第です。

みきどーざん

@take_cantik

目次