kama0244
@kama0244 (カマ ちゃん)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

【初心者です】VSCodeでFirebaseを使いたい

解決したいこと

下記のサイトに点数計算アプリを公開しました。
https://fineball.chan-kama.com/

Vue.jsを用いて制作しました。
エディターはVSCodeです。

このアプリにログイン機能や点数を保存する機能を実装したいです。
以前にプログラミングスクールで習ったFirebaseで機能を実装しようとしましたが、上手くいきません。

VSCodeでもFirebaseを使ったバックエンド開発が出来る方法を教えて欲しいです。
もしくはFirebaseではなく、何か違う方法を用いたほうが良いのでしょうか?

発生している問題・エラー

firebase.auth().onAuthStateChanged((user) => {
    if (user) {
        console.log('ログインしました');
    } else {
        console.log('ログインしていません');

        firebase
            .auth()
            .signInAnonymously() // 匿名ログインの実行
            .catch((error) => {
                // ログインに失敗したときの処理
                console.error('ログインエラー', error);
            });
    }
});

main.jsに上記のコードを書いていますが、デベロッパーツールでは
「Uncaught TypeError: firebase.auth is not a function」
というメッセージが表示されてしまいます。

ちなみに上記のコードは、公開中のアプリにはまだ書いていません。

自分で試したこと

プログラミングスクールではコードエディターにAWSのCloud9を使用していて、Firebaseのセットアップコードをhtmlファイルにコピペするだけで、Firebaseを使った開発が出来ていました。

しかしVSCodeでは、そうはいかないようです。
検索すると、ターミナルでFirebaseをインストールする必要があるようでうす。
そこでターミナルで以下のコードを実行しました。
npm install -g firebase-tools
firebase init

すると、ターミナルに以下のメッセージが出ました
Firebase initialization complete!

なんとなくFirebaseのインストール完了を知らせるメッセージのように思うのですが、相変わらずfirebase.auth()といったコードは受け付けてくれません。

0

3Answer

Uncaught TypeError: firebase.auth is not a function

上記のエラーの原因はfirebaseにモジュールが読み込まれていないからだと思います。(VSCodeは関係ないと思います。)

下記のページに書いてあることを上から順番に読んで実行していけば実装できると思います。
https://firebase.google.com/docs/auth/web/firebaseui?hl=ja

また、Firebase Authenticationが何なのか理解するために、概要のページから読まれることをお勧めします。
https://firebase.google.com/docs/auth?hl=ja

1Like

Comments

  1. @kama0244

    Questioner

    回答ありがとうございます。
    Firebaseの公式リファレンスが、こんなに丁寧に解説してくれてたんですね。
    検索して見るサイトを間違ってました。

    公式によると、npmでインストールする必要はなかったんですね。
    CDNからの読み込みでFirebaseは使えると。

    ただし、公式のとおりにやってみても、現状ではまだ上手くいきません。
    エラーが「Uncaught ReferenceError: firebase is not defined」に変化しただけでした。
    もしかして、npmでFirebaseをインストールしたのが良くないのか?
    Firebaseのプロジェクトを削除して、もう1回最初からやってみようか?
    とか考えています。
  2. Uncaught ReferenceError: firebase is not defined

    上記のエラーはFirebaseのライブラリの読み込み方に原因があるように思えます。

    状況がよく分からないので、Firebaseに関連するコードを可能な限り全部貼ってもらうことはできますか?(ライブラリを読み込んでから、初期化し、認証APIを使うまでの一連のコード)
  3. @kama0244

    Questioner

    わかりました。
    日中は仕事なので、19:00頃にはアップ出来ると思います。
  4. @kama0244

    Questioner

    index.htmlの<body>末尾に、以下のコードを記載しています。
    IDのような箇所はXXXXで隠させてもらいました。
    ```
    <!-- Firebase -->
    <!-- Insert these scripts at the bottom of the HTML, but before you use any Firebase services -->

    <!-- Firebase App (the core Firebase SDK) is always required and must be listed first -->
    <script src="https://www.gstatic.com/firebasejs/7.23.0/firebase-app.js"></script>

    <!-- If you enabled Analytics in your project, add the Firebase SDK for Analytics -->
    <script src="https://www.gstatic.com/firebasejs/7.23.0/firebase-analytics.js"></script>

    <!-- Add Firebase products that you want to use -->
    <script src="https://www.gstatic.com/firebasejs/7.23.0/firebase-auth.js"></script>
    <script src="https://www.gstatic.com/firebasejs/7.23.0/firebase-firestore.js"></script>
    <script src="https://www.gstatic.com/firebasejs/7.23.0/firebase-database.js"></script>

    <!-- Previously loaded Firebase SDKs -->

    <script>
    // TODO: Replace the following with your app's Firebase project configuration
    // For Firebase JavaScript SDK v7.20.0 and later, `measurementId` is an optional field
    var firebaseConfig = {
    apiKey: "xxxxxxxxxxxxxxxxxxxxxxxxxx",
    authDomain: "fineball-xxxxx.firebaseapp.com",
    databaseURL: "https://fineball-xxxxx.firebaseio.com",
    projectId: "fineball-xxxxx",
    storageBucket: "fineball-xxxxx.appspot.com",
    messagingSenderId: "xxxxxxxxxxxxxxx",
    appId: "xxxxxxxxxxxxxx",
    measurementId: "xxxxxxxxxxxxxxx"
    };

    // Initialize Firebase
    firebase.initializeApp(firebaseConfig);
    </script>

    <script src="https://www.gstatic.com/firebasejs/ui/4.6.1/firebase-ui-auth.js"></script>
    <link type="text/css" rel="stylesheet" href="https://www.gstatic.com/firebasejs/ui/4.6.1/firebase-ui-auth.css" />

    </body>
    </html>
    ```

解決出来ました。

原因はFirebaseの読み込みscriptを、main.jsの読み込みscriptよりも後に書いていることでした。
どうしてmain.jsの後だとエラーになるのかは、正直分かりませんが・・・。

main.jsに書いたFirebaseの匿名ログインのコードが、エラー無く実行されていました。

とりあえずエラーが解消して良かったです。
スクリーンショット 2020-11-24 9.54.01.png

質問に回答してくださったanonymousさん、ありがとうございました。

1Like

Comments

  1. @kama0244

    Questioner

    追記します。
    scriptの読み込みの順番について。
    下記の記事を参考にしました。
    https://techacademy.jp/magazine/31046

    main.jsにFirebaseの関数を書いても、その前にFirebaseのscriptを書いていないと、「えっ!? firebaseって何?」となると。
    だからmain.jsの読み込みの前に、Firebaseの読み込みをしておくと。

    もっと分かりやすく言うと「scriptはデカイやつから順番に読み込むこと」、ということですね。
    今なら「確かにそのとおりだよね」と思いますが、そこに気づけないのが初心者・・・。
    改めましてお騒がせしたことをお詫びします。

すみません、急用のため昨日は確認できませんでした。
しかし、ご自分で解決されたとのこと、大変喜ばしく思います:thumbsup:

1Like

Your answer might help someone💌