14
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

株式会社デジタルクエストAdvent Calendar 2020

Day 11

firebaseのsetメソッドの使い方と活用方法

Last updated at Posted at 2020-12-10

#firebaseって何?
個人的には費用面、手軽さなど、多方面で最強のアーキテクチャだと思っています。

#firebaseのデータ登録、更新について

処理内容 登録 更新
addメソッド ×
updateメソッド ×
setメソッド

上記のように、新規登録にも更新にも使えるsetメソッドですが、addメソッド、updateメソッドとちょっと使い方が違うんですよね。
そのあたりをわかりやすくまとめられたらと思っています。

#(データの新規追加)addメソッドとsetメソッドの違いについて
一番大きな違いは、ドキュメントIDを自動発行するかどうかという違いです。

addメソッド:ドキュメントIDを自動発行する。
setメソッド:ドキュメントIDを自動発行しない。

使い分け!!
ドキュメントIDにこだわらない場合(どんな値でも良いっす!)はaddメソッドを使うのが楽!
ドキュメントIDを指定したい場合は、setメソッドを利用する。

いろんなところで言われている内容ではあると思いますが、ドキュメントIDを自動発行して、setメソッドを利用することもできます。

set.js
// ドキュメントをランダムIDで発行
const ref = firebase.firestore().collection('test').doc();
// 先ほど取得したドキュメントのIDを明示的に指定
await firebase.firestore().collection('test').doc(ref.id).set({
  name: テスト太郎,
  phone: 080-0000-0000
})
.then(function(){
  // データ登録成功時の処理
  // firebaseコマンドは、promiseオブジェクトなので、thenでつなげられる。
})
.catch(function(err){
  // データ登録失敗時
});

addメソッドの場合は、上記のソース上から、ドキュメントIDを取得してくる処理がまるまる省略できるってことですね。

ざっくり分けて、firebaseのデータ登録機能には以下の2工程に分けられます。
①ドキュメントIDを発行
②データ更新

上記を一つにまとめているのが、addメソッド、別々に分けているのがsetメソッドです。

#(データ更新)updateメソッドと、setメソッドの違い
一番大きな違いは、特定のフィールドのみ更新するか、全部上書きするかの違いです。

updateメソッド:指定したフィールドのみ更新
setメソッド:全て更新

例えば、以下のようなコレクションがあったとします。

コレクション名:test
 ドキュメントID:1234567890abcdefg
  name:テスト太郎,
  phone:080-0000-0000,
  address:東京都千代田区

updateメソッド.js
firebase.firestore().collection('test').doc('1234567890abcdefg').update({
  name:テスト次郎
});
setメソッド.js
firebase.firestore().collection('test').doc('1234567890abcdefg').set({
  name:テスト次郎
});

単純にメソッドが違うだけですね。
これが、それぞれどうなるのかを見てみましょう。

updateメソッド
コレクション名:test
 ドキュメントID:1234567890abcdefg
  name:テスト次郎, ← ここのみ更新
  phone:080-0000-0000,
  address:東京都千代田区

setメソッド
コレクション名:test
 ドキュメントID:1234567890abcdefg
  name:テスト次郎,
※全上書きされ、明示的に記載したものだけが残る。

#setの活用方法を考えてみた
以下の条件なんかの時はsetメソッドが輝きます。
・ドキュメントIDが指定したIDである。(自動生成ではない)
・新規作成と更新が同ソース内に両方とも含まれる。
→ データがなかった場合は、新規作成、あった場合は更新みたいなケースですね。

上記のようなときは、setメソッドを利用することによって、新規作成なのか、更新なのかを考慮する必要がなく、ソースを記載することができます。

普通に利用しようとすると、ちょっと使いづらいsetメソッドですが、設計次第でかなり便利なメソッドになります。

14
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?