LoginSignup
1
0

More than 1 year has passed since last update.

TypeScript を使ってローカル環境で Firebase をアドミン操作する

Posted at

やりたいこと

アドミン操作をローカルで行えると、ちょっと集計したいときとかデータを書き変えたいときに便利です。アドミンならセキュリティルールを無視できますしね。
プラスして、型の恩恵が欲しいので TS を使いたい。

実装

TS プロジェクトを作成し設定

必要なパッケージを導入

npm init
yarn add -D typescript ts-node firebase-admin tsc
npx tsc --init

tsconfig.json にて設定

{
  "compilerOptions": {
    "esModuleInterop": true,
    "allowSyntheticDefaultImports": true,
    "preserveConstEnums": true,
    "strictNullChecks": true,
    "sourceMap": true,
    "allowJs": true,
    "target": "es5",
    "outDir": ".build",
    "moduleResolution": "node",
    "lib": [
      "es2015"
    ],
    "rootDir": "./"
  }
}

アドミン用秘密鍵発行

Firebase コンソールから秘密鍵の json をダウンロード

s.png

秘密鍵を読み込んで初期化

さっきの秘密鍵の json ファイルを見ながら対応するパラメータに書き込んで初期化。
JSON だとスネークケースだけどこっちはキャメルケースなのに注意。
credential.ts とかにしてこの部分だけ分離しておくと取り回ししやすい。

import * as admin from "firebase-admin";

const params = {
  type: "service_account",
  projectId: "",
  privateKeyId: "",
  privateKey: "",
  clientEmail: "",
  clientId: "",
  authUri: "",
  tokenUri: "",
  authProviderX509CertUrl: "",
  clientC509CertUrl: "",
};

export const adminApp = admin.initializeApp({
  credential: admin.credential.cert(params),
});

実際に使ってみる

初期化した adminApp が出来たので、あとはお好きにどうぞ。

import { adminApp } from "./credential";
import { firestore } from "firebase-admin";

const db = adminApp.firestore(); // app を使って firestore インスタンスの生成

async function userAdd() {
  const userRef = db.collection("users").doc();
  await userRef.create({
    name: "hoge",
    age: 21,
    createdAt: firestore.FieldValue.serverTimestamp(),
  });
}

async function main() {
  await userAdd();
}

main();
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0