Firebase Cloud Firestoreに都道府県データベースをインポートする方法

Firebase Cloud Firestoreにデータをインポートする方法がわかったので備忘録として記事にしました。

今回は、Firebase Cloud Firestoreにデータを登録する方法を実際に都道府県データを登録して解説していきます。

 

Realtime Databaseとの違い

Realtime DatabaseがJSONで構造化されたデータをストアするのに対し、Firestoreはドキュメント指向DBライクな階層型の構造化データをストアでき、クエリ処理が利用できる。MongoDBみたいなNoSQLである。

うん、まだ詳しく理解できていませんが、Realtime Databaseの上位互換になりうるのが、Firestoreらしいです。(詳しい方いたら教えてください)

 

 

Firestoreにデータをインポートする方法

【前提条件】

・Firebaseにプロジェクトを作成済み

 

Firestoreを始める

Firestoreの[使ってみる] をクリック

まずは、[テストモード]でFirestoreの使用を始めます

 

データ登録用のファイル群をローカルに作る

ローカルの適当な場所にディレクトリを作ってFirebase SDKをインストールする。

$ mkdir firestore-test
$ cd firestore-test
$ npm init -f
$ npm install --save firebase-admin@^5.7.0

これで、ディレクトリ直下にpackage.jsonが作成される。

 

秘密鍵の入ったjsonファイルをダウンロードする

  1. ダッシュボード左上の[歯車アイコン] → [ユーザーと権限] をクリック
  2. 上記メニューの[サービスアカウント]をクリック
  3. 「Firebase Admin SDK」のNode.jsを選択した状態で、[新しい秘密鍵の生成]でダウンロード

サービスアカウントの秘密鍵が入ったJSONファイルがダウンロードされるので、このJSONファイルを先ほど作ったディレクトリ(firestore-test)直下に配置する。

 

データ登録用のjsファイルを作成

下記のテストコードをディレクトリ(firestore-test)直下に作成する。

※ [JSONファイル名] の部分を先ほどダウンロードしたサービスアカウントのJSONファイル名に書き換える。

firestore-test/index.js

const admin = require('firebase-admin');

var serviceAccount = require("./[JSONファイル名]");

admin.initializeApp({
credential: admin.credential.cert(serviceAccount)
});

/* usersデータベースの登録を定義 */
var setUsers = admin.firestore().collection('users');

/* 追加するデータカラム */
setUsers.doc('alovelace').set({ first: 'Ada', last: 'Lovelace', born: 1815});

 

実行(index.jsのデータ登録)

$ node index.js

これで、firebaseでfirestoreを確認してみると、’users’が登録されているはずです。

 

※ ドキュメントの取得

なお、firestore-test/index.jsを以下のように変更して、実行するとドキュメントの取得もできる。

const admin = require('firebase-admin');

var serviceAccount = require("./[JSONファイル名]");

admin.initializeApp({
 credential: admin.credential.cert(serviceAccount)
});

var db = admin.firestore();

db.collection('users').get()
   .then((snapshot) => {
       snapshot.forEach((doc) => {
           console.log(doc.id, '=>', doc.data());
       });
   })
   .catch((err) => {
       console.log('Error getting documents', err);
   });

 

 

都道府県データベースのサンプル

はい、最後は都道府県データベースのサンプルです。

firestore-test/prefectures.js として作成します。

const admin = require('firebase-admin');
var serviceAccount = require("./gourmelinks-firebase-adminsdk-d44sk-b68ac2ddca");
admin.initializeApp({
  credential: admin.credential.cert(serviceAccount)
});

/* prefecturesデータベースを定義 */
var prefecturesRef = admin.firestore().collection('prefectures');

/* 追加するデータカラム 
.doc() → id自動割り当て
.doc('id独自定義') → id独自定義
*/
prefecturesRef.doc().set({ name: '北海道', en: 'Hokkaido'});
prefecturesRef.doc().set({ name: '青森県', en: 'Aomori'});
prefecturesRef.doc().set({ name: '岩手県', en: 'Iwate'});
prefecturesRef.doc().set({ name: '宮城県', en: 'Miyagi'});
prefecturesRef.doc().set({ name: '秋田県', en: 'Akita'});
prefecturesRef.doc().set({ name: '福島県', en: 'Fukushima'});
prefecturesRef.doc().set({ name: '茨城県', en: 'Ibaraki'});
prefecturesRef.doc().set({ name: '栃木県', en: 'Tochigi'});
prefecturesRef.doc().set({ name: '群馬県', en: 'Gunma'});
prefecturesRef.doc().set({ name: '埼玉県', en: 'Saitama'});
prefecturesRef.doc().set({ name: '千葉県', en: 'Chiba'});
prefecturesRef.doc().set({ name: '東京都', en: 'Tokyo'});
prefecturesRef.doc().set({ name: '神奈川県', en: 'Kanagawa'});
prefecturesRef.doc().set({ name: '富山県', en: 'Toyama'});
prefecturesRef.doc().set({ name: '石川県', en: 'Ishikawa'});
prefecturesRef.doc().set({ name: '福井県', en: 'Fukui'});
prefecturesRef.doc().set({ name: '山梨県', en: 'Yamanashi'});
prefecturesRef.doc().set({ name: '福井県', en: 'Fukui'});
prefecturesRef.doc().set({ name: '長野県', en: 'Nagano'});
prefecturesRef.doc().set({ name: '岐阜県', en: 'Gifu'});
prefecturesRef.doc().set({ name: '静岡県', en: 'Shizuoka'});
prefecturesRef.doc().set({ name: '愛知県', en: 'Aichi'});
prefecturesRef.doc().set({ name: '三重県', en: 'Mie'});
prefecturesRef.doc().set({ name: '滋賀県', en: 'Shiga'});
prefecturesRef.doc().set({ name: '京都府', en: 'Kyoto'});
prefecturesRef.doc().set({ name: '大阪府', en: 'Osaka'});
prefecturesRef.doc().set({ name: '兵庫県', en: 'Hyogo'});
prefecturesRef.doc().set({ name: '奈良県', en: 'Nara'});
prefecturesRef.doc().set({ name: '和歌山県', en: 'Wakayama'});
prefecturesRef.doc().set({ name: '鳥取県', en: 'Tottori'});
prefecturesRef.doc().set({ name: '島根県', en: 'Shimane'});
prefecturesRef.doc().set({ name: '岡山県', en: 'Okayama'});
prefecturesRef.doc().set({ name: '広島県', en: 'Hiroshima'});
prefecturesRef.doc().set({ name: '山口県', en: 'Yamaguchi'});
prefecturesRef.doc().set({ name: '徳島県', en: 'Tokushima'});
prefecturesRef.doc().set({ name: '香川県', en: 'Kagawa'});
prefecturesRef.doc().set({ name: '愛媛県', en: 'Ehime'});
prefecturesRef.doc().set({ name: '高知県', en: 'Kochi'});
prefecturesRef.doc().set({ name: '福岡県', en: 'Fukuoka'});
prefecturesRef.doc().set({ name: '佐賀県', en: 'Saga'});
prefecturesRef.doc().set({ name: '長崎県', en: 'Nagasaki'});
prefecturesRef.doc().set({ name: '熊本県', en: 'Kumamoto'});
prefecturesRef.doc().set({ name: '大分県', en: 'Oita'});
prefecturesRef.doc().set({ name: '宮崎県', en: 'Miyazaki'});
prefecturesRef.doc().set({ name: '鹿児島県', en: 'Kagoshima'});
prefecturesRef.doc().set({ name: '沖縄県', en: 'Okinawa'});

$ node prefectures.js実行するとfirestoreに都道府県データが格納されます。