Napa Log

Blog

Firebaseから「ドキュメントID」とやらを取得したいにょ

サムネイル

※本記事はfirebaseについて記載していますので、下記公式ページに従い、サムネイルには公式画像を使用しております

https://firebase.google.com/brand-guidelines?hl=ja

今回の内容

どうも。。。今回は好き勝手技術系のことを話します。
「プログラミングの話聞きたくないにょ!」という方は回れ右お願いします<(_ _)>

題名通り、firebaseの「ドキュメントID」を取得する方法です。
ドキュメントIDという名称は、もしかすると、人によって呼び方が違うかもしれませんが、下記画像のことです(一部マスクしてます)

firebaseってなに

本題からそれますので、軽くだけ・・・

firebaseは、Googleが開発者向けに提供している、BaaS(Backend as a Service)というものです(詳細は下記参照)

Googleの『Firebase』とは?メリットや始め方も紹介

firebase公式サイト

と言われても知らない人はしっくりこないと思うので、私が使った感想でまとめると
「自分でバックエンド作らずに、DBのCRUDできるし、認証システム使えるし、フロントエンドをデプロイできる、すごく便利なプラットフォーム」
です。

ReactでイケてるSPA画面作ろうにも、バックエンドも作るの大変だにょ、、、という方は、バックエンドはfirebaseに頼ってみてはどうでしょうか?
もしかすると、ご自身が作ろうとしているログイン機能だったりは、firebaseでサクッと使えるかも、、、?

firebaseのDB、firestoreを使って、詰まった

冒頭で申し上げました、ドキュメントIDなるもの。

公式がどのように記載してるかわかりませんが、見た感じ一意っぽそうだし、これを使えれば、わざわざカラムに「todo_id」とか「user_id」なるものをuuidで準備する必要はなさそう。。。
でも、パット取得の仕方がわかりませんでした。

doc.idで取得できるっぽい

chatGPTさんに聞いてみると、そういわれたので試してみました。

  useEffect(() => {
    const fetchTodos = async () => {
      try {
        const todosCollection = collection(db, 'todo');
        const todosSnapshot = await getDocs(todosCollection);
        const todosData = todosSnapshot.docs.map((doc) => ({
          doc_id: doc.id,
          user_id: doc.data().user_id,
          context: doc.data().context,
          updated_at: doc.data().updated_at,
        }));

        todosData.map((doc) => {
          console.log(doc.doc_id);
        }),
          setTodos(todosData);
      } catch (error) {
        console.error('Error fetching todos:', error);
      }
    };

この部分。getDocsで取得したSnapShotをmapでdocとして回しています。
その場合は、doc.idとして取れることができます。

   const todosCollection = collection(db, 'todo');
        const todosSnapshot = await getDocs(todosCollection);
        const todosData = todosSnapshot.docs.map((doc) => ({
          doc_id: doc.id, // ここ。doc.idでとれる。

doc.idを恐る恐る活用してみます

業務アプリとかだと、がちがちにuser_idとか、post_idとか、絶対一意となるように、インクリメントなりで試行錯誤する部分ですが
そこをfirebaseが自動生成するdocmentIdが使用できるのは、大変ありがたいです。

ただし、完璧に一意である、という文章も私は見つけられませんでしたし、きちんとした業務アプリで使用するには、まだ不安要素が多いです。
皆さんも、使用する場合は、上記をご留意ください。

ただ、私は、個人開発の範疇ですし、そこまでがちがちにしなければならないようなアプリではないので、使ってみようと思います。
また、気づきなどありましたら共有させていただきます

それでは、良いfirebaseライフを!!!!!