Firexport のロゴ

Firexportガイド

Firebase Authentication のユーザーをエクスポートする方法

Firebase Authentication のユーザー(Users)タブにはプロジェクトのすべてのアカウントが表示されますが、ダウンロードはできません。そこにあるメニューは 1 つだけで、中身はパスワード ハッシュ パラメータです。ユーザーをファイルとして取り出す方法は 3 つあります。どれが合うかはファイルの用途によります。読む・共有する・メールを送るための一覧か、別のプロジェクトへの移行かです。

2026年10月7日 更新。 方法 1 の拡張機能 Firexport は私たちのものです。方法 2 と 3 には不要です。

結論から言うと

  • いま、スプレッドシートで使うユーザー一覧が欲しい: ユーザー(Users)タブからブラウザ拡張機能でエクスポートします。 方法 1
  • パスワードも含めて、ユーザーを別のプロジェクトに移したい: firebase auth:export のあと、firebase auth:import。 方法 2
  • スケジュールで実行したい、または列を自分で決めたい: 短い Admin SDK スクリプト。 方法 3
1. コンソール + 拡張機能2. Firebase CLI3. Admin SDK スクリプト
準備Chrome 拡張機能をインストールNode.js と Firebase CLINode.js と Google Cloud の認証情報
形式ヘッダー行つきの CSV、または JSONヘッダー行なしの CSV、または JSONヘッダー行つきの CSV(またはコードが書き出すもの)
日時コンソールの日付(Advanced では ISO 8601)エポックからのミリ秒ISO 8601
カスタム クレームAdvanced で含む含む含む
パスワード ハッシュ一切読み取らない含む(編集者またはオーナーのロール)含めない

1. Firexport で Firebase コンソールからエクスポート

Firebase コンソールの Authentication > ユーザー(Users)には、ユーザーが表に 1 ページずつ表示されますが、それをダウンロードする手段はありません。 Firexport は、その表にエクスポート ボタンを追加する無料の Chrome 拡張機能です。

  1. Chrome ウェブストアから Firexport をインストールします。
  2. Firebase コンソールで Authentication を開き、ユーザー(Users)タブを開きます。
  3. ユーザーを追加(Add user)の右にあるエクスポートをクリックします。Firexport が表の全ページをたどり、CSV ファイルを 1 つダウンロードします。JSON にするには、ボタンの横の ⋮ メニューを開いて JSON にエクスポートを選びます。
Firebase Authentication のユーザー(Users)タブと、Firexport がユーザーを追加(Add user)の横に追加したエクスポート ボタン(メニューを開いた状態)
エクスポート ボタンはユーザーを追加(Add user)の右にあります。そのメニューに CSV と JSON があります。

ファイルに入るもの:

  • 無料版では、ユーザーごとに 1 行、uid、identifier、disabled、providers、creationTime、lastSignInTime の列です。コンソールが表示する表そのままです。日付は時刻を含まないコンソールの表示形式で、プロバイダは Email や Google といった名前です。
  • 有料プランの Firexport Advanced は、各ユーザーのレコード全体を Admin SDK の名前で書き出します。email、emailVerified、displayName、phoneNumber、photoURL、providerData、customClaims、multiFactor、そして ISO 8601(UTC)の作成・ログイン・トークンの日時です。
  • 列名はコンソールの言語にかかわらず英語なので、どのエクスポートも同じ列になります。

パスワード ハッシュは一切読み取らず、ユーザーのデータはブラウザの中にとどまります。ファイルはブラウザの中で作られ、ダウンロード先以外のどこにも送られません。すでにサインインしているコンソールのセッションで動くので、サービス アカウント キーも CLI の設定も不要です。Chrome とその他の Chromium ベースのブラウザで動きます。

ユーザーを 1 人ずつ確認する

1 人のユーザーを確認するには、その行にマウスを重ねます。行の操作の先頭にある情報アイコンで、レコード全体を載せたカードが開きます。表示名、メール確認済み、プロバイダ、ログインとトークンの日時、カスタム クレーム、第 2 要素です。カードのコピー アイコンで、このユーザーを JSON としてクリップボードにコピーできます。どちらも無料です。

ユーザー(Users)の表の横に開いたユーザーの詳細カード。プロバイダ、ログイン日時、カスタム クレーム、第 2 要素が表示されている
カードには、ユーザー(Users)の表には出ない情報が表示されます。

CLI もサービス アカウント キーもなしで、Firebase のユーザーをコンソールからエクスポートしましょう。

Chrome に追加 — 無料

2. Firebase CLI でエクスポート

Firebase CLI の auth:export コマンドは、プロジェクトのすべてのアカウントを 1 つのファイルにダウンロードします。auth:import でユーザーを別のプロジェクトに移すためのものなので、パスワード ハッシュとソルトも含まれます。そのため、このファイル自体が認証情報になります。共有ドライブやメールには置かないでください。ハッシュとソルトのフィールドを得るには、プロジェクトで編集者またはオーナーのロールを持つアカウントが必要です。

npm install -g firebase-tools
firebase login
firebase auth:export users.json --project your-project-id
  • ファイル名で形式が決まります: users.json または users.csv。
  • CSV にはヘッダー行がありません。列の順序は固定です: UID、メールアドレス、メール確認済み、パスワード ハッシュ、ソルト、名前と写真の URL、Google・Facebook・Twitter・GitHub それぞれに 4 列、続いて作成日時、最終ログイン日時、電話番号、ほか数列。列の一覧は Google の auth:export のリファレンスにあります。日時はエポックからのミリ秒です。
  • JSON は API 自身の名前のままです: localId、createdAt、lastSignedInAt、providerUserInfo、そしてカスタム クレームを表す customAttributes(JSON 文字列)。
  • エクスポートされるのは、Firebase の scrypt でハッシュされたパスワードだけです。別のアルゴリズムでインポートされ、その後一度もログインしていないユーザーは、ハッシュとソルトのフィールドが空になります。

ユーザーを移すには、元のプロジェクトのハッシュ パラメータ(Authentication > ユーザー(Users) > ⋮ > パスワード ハッシュ パラメータ(Password hash parameters))を指定して、ファイルを移行先のプロジェクトにインポートします。ユーザーは UID を保ったまま、同じパスワードでログインできます。

firebase auth:import users.json --project new-project-id \
  --hash-algo=SCRYPT --hash-key=BASE64_SIGNER_KEY --salt-separator=BASE64_SALT_SEPARATOR \
  --rounds=ROUNDS --mem-cost=MEM_COST

3. Admin SDK スクリプトでエクスポート

独自の列が欲しい場合や、エクスポートをスケジュールで実行したい場合は、Firebase Admin SDK を使う短い Node.js スクリプトで、すべてのユーザーを一覧してヘッダー行つきの CSV を書き出せます。ユーザーを読み取れるアカウントが必要です。プロジェクトのオーナーか編集者、または Firebase Authentication 閲覧者のロールです。

  1. SDK をインストール: npm install firebase-admin
  2. ローカルの認証情報でサインイン: gcloud auth application-default login。サーバーでは代わりに GOOGLE_APPLICATION_CREDENTIALS でサービス アカウント キーを指定します。
  3. 下のスクリプトを export-users.mjs として保存し、your-project-id を置き換えて、 node export-users.mjs を実行します。
// Usage: node export-users.mjs   → writes users.csv
import { writeFileSync } from 'node:fs';
import { initializeApp } from 'firebase-admin/app';
import { getAuth } from 'firebase-admin/auth';

initializeApp({ projectId: 'your-project-id' });
const auth = getAuth();

// listUsers returns at most 1,000 users per call, so follow the page token to the end.
const users = [];
let pageToken;
do {
  const page = await auth.listUsers(1000, pageToken);
  users.push(...page.users);
  pageToken = page.pageToken;
} while (pageToken);

// One row per user. Times become ISO 8601. Password hashes are left out: this is a user list, not a backup.
const iso = (time) => (time ? new Date(time).toISOString() : '');
const rows = users.map((user) => ({
  uid: user.uid,
  email: user.email,
  emailVerified: user.emailVerified,
  displayName: user.displayName,
  phoneNumber: user.phoneNumber,
  disabled: user.disabled,
  providers: user.providerData.map((provider) => provider.providerId).join(' '),
  creationTime: iso(user.metadata.creationTime),
  lastSignInTime: iso(user.metadata.lastSignInTime),
  customClaims: user.customClaims ? JSON.stringify(user.customClaims) : '',
}));

// Quote any cell with a comma, a quote or a line break.
function cell(value) {
  const text = value === undefined || value === null ? '' : String(value);
  return /[",\r\n]/.test(text) ? `"${text.replaceAll('"', '""')}"` : text;
}

const columns = ['uid', 'email', 'emailVerified', 'displayName', 'phoneNumber', 'disabled',
  'providers', 'creationTime', 'lastSignInTime', 'customClaims'];
const lines = [columns, ...rows.map((row) => columns.map((column) => row[column]))];
// The byte order mark at the start makes Excel read names in any language correctly.
writeFileSync('users.csv', '' + lines.map((line) => line.map(cell).join(',')).join('\r\n'));
console.log(`Wrote ${rows.length} users to users.csv`);
  • 呼び出しが「requires a quota project」(割り当てプロジェクトが必要)というエラーで失敗した場合は、gcloud auth application-default set-quota-project your-project-id を実行して、もう一度試してください。
  • listUsers はユーザーを登録日順ではなく UID 順に返します。その順序が必要なら、行を並べ替えてください。
  • SDK がパスワード ハッシュを返すのは firebaseauth.configs.getHashConfig 権限を持つアカウントに対してだけで、このスクリプトはいずれにしてもハッシュを含めません。パスワードごとユーザーを移すには、方法 2 を使ってください。

FAQ

Firebase コンソールから Authentication のユーザーをエクスポートできますか?

いいえ。ユーザー(Users)タブにあるのは、検索ボックス、ユーザーを追加(Add user)、更新ボタン、そして項目がパスワード ハッシュ パラメータ(Password hash parameters)だけのメニューです。ユーザーをファイルに取り出すには、Firebase CLI(firebase auth:export)、Admin SDK、またはそのタブにエクスポート ボタンを追加するブラウザ拡張機能が必要です。

Firebase の全ユーザーのメールアドレス一覧はどう取得しますか?

ユーザーをエクスポートして、メールアドレスの列を残します。Firexport の無料版のエクスポートでは identifier 列がそれにあたり、コンソールの表示どおり、メールアドレス(電話番号でログインするユーザーなら電話番号)が入ります。Admin SDK スクリプトなら、listUsers から user.email を集めます。

エクスポートにユーザーのパスワードは含まれますか?

平文のパスワードはどの方法でも得られません。Firebase はそもそもパスワードを保存していないからです。firebase auth:export にはパスワード ハッシュとソルトが含まれ、firebase auth:import はそれを使って、パスワードが使える状態のままユーザーを移します。Firexport はハッシュを一切読み取らず、Admin SDK は追加の権限があるときだけハッシュを返します。

ユーザーを別の Firebase プロジェクトにどう移しますか?

元のプロジェクトで firebase auth:export users.json を実行し、新しいプロジェクトで firebase auth:import users.json を実行します。その際、--hash-algo=SCRYPT と、元のプロジェクトのパスワード ハッシュ パラメータ(Password hash parameters)にあるハッシュ キー、ソルト区切り文字、ラウンド数、メモリ コストを指定します。Firexport やスクリプトで作ったハッシュのないファイルでは、パスワードでログインするユーザー全員がパスワードを再設定することになります。

エクスポートを Excel や Google スプレッドシートで開けますか?

はい。ここで紹介したどの方法も CSV を書き出し、どちらでも開けます。Firexport とスクリプトの CSV はバイト順マークで始まるので、Excel はどの言語の名前も正しく読みます。バイト順マークのない CSV で名前が文字化けする場合は、データ > テキストまたは CSV から(Data > From Text/CSV)で取り込み、元のファイル(File Origin)を 65001: Unicode (UTF-8) にしてください。