Firebase Admin SDK  vs Firebase SDK 

##サーバーに Firebase Admin SDK を追加する
https://firebase.google.com/docs/admin/setup?authuser=0

Admin SDK を使用すると、特権環境から Firebase と対話し、次のような操作を行うことができます。

- Realtime Database のデータの読み取りと書き込みを完全な管理者権限で実行する。
- FCM サーバー プロトコルに対する簡単な代替アプローチを使用して、プログラムにより Firebase - 
- Cloud Messaging メッセージを送信する。
-  Firebase Auth トークンを生成し確認する。
- Google Cloud Platform リソース（Cloud Storage バケットや、Firebase プロジェクトに関連付けられた Firebase データベースなど）にアクセスする。
- 独自の簡単な管理コンソールを作成して、認証のためにユーザーデータの検索やユーザーのメールアドレス変更などの作業を行う。

特権環境（サーバーなど）からの管理者アクセスではなく、エンドユーザー アクセスのクライアントとして Node.js SDK を使用することを検討している場合（Node.js デスクトップ、IoT アプリケーションなど）、このドキュメントではなく、クライアント JavaScript **Firebase SDK** の設定に関する手順をご覧ください。

####SDK の追加

````.sh
$ npm install firebase-admin --save
````

````.js
var admin = require('firebase-admin');
````
あるいは ES2015 を使用している場合は、次のようにモジュールを import できます。

````.ts
import * as admin from 'firebase-admin';
````
####SDK の初期化
Firebase プロジェクトでは Google サービス アカウントがサポートされています。これを使用して、アプリサーバーまたは信頼できる環境から Firebase サーバー API を呼び出せます。コードをローカルで開発しているか、またはアプリケーションをオンプレミスでデプロイしている場合、このサービス アカウントで取得した認証情報を使用してサーバー リクエストを承認できます。

サービス アカウントを認証して Firebase サービスへのアクセスを承認するには、秘密鍵ファイルを JSON 形式で生成する必要があります。
サービス アカウントを介して承認する場合、アプリケーションの認証情報を指定するには 2 つの選択肢があります。GOOGLE_APPLICATION_CREDENTIALS 環境変数を設定することも、サービス アカウント キーへのパスをコードで明示的に渡すこともできます。1 つ目の選択肢のほうが安全であるため、強くおすすめします。
1.Firebase コンソールで、[設定] > [サービス アカウント] を開きます。
2.[新しい秘密鍵の生成] をクリックし、[キーを生成] をクリックして確定します。
3.キーを含む JSON ファイルを安全に保管します。

````.sh
$env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\service-account-file.json"

````
上記の手順を完了すると、アプリケーションのデフォルト認証情報（ADC）は認証情報を暗黙的に判別できるようになり、Google 以外の環境でテストするか実行するときに、サービス アカウントの認証情報を使用できます。

SDK を初期化します

````.ts
admin.initializeApp({
  credential: admin.credential.applicationDefault(),
  databaseURL: 'https://<DATABASE_NAME>.firebaseio.com'
});

````


##Firebase を JavaScript プロジェクトに追加する
https://firebase.google.com/docs/web/setup?authuser=0

このガイドでは、Firebase JavaScript SDK をウェブアプリで使用する手順について説明します。また、Node.js デスクトップや IoT アプリケーションなどのエンドユーザー アクセスのクライアントとして使用する場合も、この手順に従ってください。

**特権環境（サーバーなど）からの管理アクセスを設定する場合は、Firebase Admin SDK を設定してください。**

ステップ 1: Firebase プロジェクトを作成する
ステップ 2: アプリを登録する
ステップ 3: **Firebase SDK** を追加して Firebase を初期化する

````
var firebaseConfig = {
  apiKey: "api-key",
  authDomain: "project-id.firebaseapp.com",
  databaseURL: "https://project-id.firebaseio.com",
  projectId: "project-id",
  storageBucket: "project-id.appspot.com",
  messagingSenderId: "sender-id",
  appID: "app-id",
};

````

ステップ 4:（省略可）CLI をインストールし、Firebase Hosting にデプロイする

````
npm install -g firebase-tools
firebase login
firebase init
````
- ローカルアプリ ディレクトリを Firebase にリンクします。
- firebase.json ファイル（Firebase Hosting に必要なファイル）を生成します

````firebase.json
{
  "firestore": {
    "rules": "firestore.rules",
    "indexes": "firestore.index.json"
  },
  "functions": {
    "predeploy": [
      "npm --prefix \"$RESOURCE_DIR\" run lint",
      "npm --prefix \"$RESOURCE_DIR\" run build"
    ]
  }
}

````
- Firebase が検索するディレクトリのデフォルト名は「public」です。firebase.json ファイルを直接編集することで、公開ディレクトリを設定することもできます。

````
firebase deploy
`````

ステップ 5: アプリで Firebase にアクセスする

````init-firebase.js
// TODO: Replace the following with your app's Firebase project configuration
var firebaseConfig = {
  // ...
};

// Initialize Firebase
firebase.initializeApp(firebaseConfig);

````
Firebase JavaScript SDK は、次の Firebase プロダクトをサポートしています。各プロダクトはオプションで、firebase 名前空間からアクセスできます。

````
Firebase プロダクト	名前空間	
Authentication	firebase.auth()		
Cloud Firestore	firebase.firestore()		
Cloud Functions for Firebase Client SDK	firebase.functions()		
Cloud Messaging	firebase.messaging()		
Cloud Storage	firebase.storage()		
Performance Monitoring (ベータ版リリース）	firebase.performance()		
Realtime Database	firebase.database()		
````
#####開発用のローカル ウェブサーバーを実行する

````
firebase serve
````