1. TOPTOP
  2. Webサービス
  3. JavaScript

GoogleのFirebaseで学習するJavaScriptのインターフェースメソッド

javascript_namespace_static_method_1

firebase.initializeApp({
  apiKey: '### FIREBASE API KEY ###',
  authDomain: '### FIREBASE AUTH DOMAIN ###',
  projectId: '### CLOUD FIRESTORE PROJECT ID ###'
});

// Initialize Cloud Firestore through Firebase
var db = firebase.firestore();

最近、Googleが開発しているFirebaseの公式ガイド(新しいタブで開く)をよく見ます。Cloud Firestoreを初期化するためには上記のスクリプトを記述すると、データの追加が行われると実行されるように見えます。

settingsを追記しないとエラー発生

db.settings({
  timestampsInSnapshots: true
});

ですが、実際にはこのあとさらに上記のプロパティ(db.settings({})の部分)を追加しなければなりません。

javascript_interface_method

@firebase/firestore: Firestore (5.0.4): 
The behavior for Date objects stored in Firestore is going to change
AND YOUR APP MAY BREAK.
To hide this warning and ensure your app does not break, you need to add the
following code to your app before calling any other Cloud Firestore methods

プロパティを追加しないと、コンソール画面で、以上のようなエラーメッセージが表示されます。

インターフェースメソッドの特徴

エラーが表示される理由は、settingsがインターフェースメソッドであることです。JavaScriptの文法において、インターフェースメソッドは任意のクラスにおいて必ず実装するメソッドとなっています。

Specifies custom configurations for your Cloud Firestore instance. You must set these before invoking any other methods.

実際に、Settingsの公式ドキュメント(新しいタブで開く)を確認すると、”INTERFACE STATIC”として「firebaseクラス(オブジェクト)のときはsettingsメソッドを必ず使うように」という説明が入っています。

ライブラリ内の実装(推測)

interfase settings() {
    ...
}

自分はTypeScriptを学習したこともなく、ライブラリの中を見ていないのではっきりしたことは言えませんが、おそらくfirebase-firestore.jsかfirebase-app.jsの中に上記のような定義が含まれていると推測しています。なお、プロパティの”timestampsInSnapshots: true”という記述は必須となっています。