ユーザー情報を設定しよう！

こんにちは！🐶

前回は、データの送信について学びテキストや画像の情報を送りました！

今回はその発展編で、ユーザー情報にユーザーネームやユーザー自己紹介文を設定することで、ユーザーの情報を充実させていきましょう！

# 会員管理に設定できるユーザー情報は限られている
まず初めに、前置として、Firebaseが持っている会員管理(Auth)にはユーザー情報を多く設定できないというのと、Twitterなどのようにプロフィール情報を他のユーザーが参照するようなアプリはAuthとは別にFirestoreにユーザー情報を登録する必要があります。

なので、今回も新規登録した際は会員管理とは別にFirestoreのデータベースにuserコレクションを作ってあげることにより、様々な情報の設定をできるようにしたいと思います！

#新規登録のコードを書き換えよう！
では、ます初めに完成形から見せたいと思います！👇
見た目
![スクリーンショット 2021-06-08 21.53.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694910/a4fc9939-af9e-d8e1-32fd-3e4359df9cf5.png)

データベース
![スクリーンショット 2021-06-08 21.56.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694910/b90848d8-6a79-725e-8afd-7ea949d69c92.png)


このように、新規登録の際にユーザー情報を設定するとFirestoreでuserコレクションが作られ情報が送られるという形になっています！

そしてコードはこのようになっています👇

```php:SignUpViewcontroller
import UIKit
import FirebaseAuth
import Firebase

class SignUpViewController: UIViewController {
    
    @IBOutlet var emailTextField : UITextField!
    @IBOutlet var passwordTextField : UITextField!
    @IBOutlet var userNameTextField : UITextField!
    //Firestoreのデータベースを用意
    let db = Firestore.firestore()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
    }
    
    @IBAction func SignUp(){
        if let email = emailTextField.text,let password = passwordTextField.text {
            Auth.auth().createUser(withEmail: email, password: password) { authResult, error in
                if error != nil {
                    print("エラー")
                }  else {
                    //新規等速成功した時
                    let uid = Auth.auth().currentUser?.uid as! String
                    //userコレクションのドキュメントにuserIdを追加、userNameフィルターにユーザーネームを入れる
                    self.db.collection("Users").document(uid).setData(["userName" : self.userNameTextField.text]) { (error) in
                        if error != nil {
                            print("ユーザー情報追加失敗")
                        }  else {
                            print("ユーザー情報追加seikou")
                        }
                    }
                    self.performSegue(withIdentifier: "SignUptoHome", sender: nil)
                }
            }
        }
    }
}

```

まず今までしてきたことと違う点はこちらですね！👇

```php:SignUpViewcontroller
                    //新規等速成功した時
                    let uid = Auth.auth().currentUser?.uid as! String
                    //userコレクションのドキュメントにuserIdを追加、userNameフィルターにユーザーネームを入れる
                    self.db.collection("Users").document(uid).setData(["userName" : self.userNameTextField.text]) { (error) in
                        if error != nil {
                            print("ユーザー情報追加失敗")
                        }  else {
                            print("ユーザー情報追加seikou")
                        }
                    }
```
違う点としては、document()の中にユーザーIDが入っています。実際にFirestoreを見てみると、ドキュメントの中にユーザーIDが記入されています。
![スクリーンショット 2021-06-08 21.56.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694910/165a622a-574a-cf21-aa73-84d59a784531.png)


これはどういう事かと言いますと、今までしてきた投稿にはドキュメントIDを設定する必要がなく、ランダムでIDが入っていました。
しかしUerコレクションに関しては、ドキュメントIDがランダムだと、どのユーザー情報なのかが区別できず、後でプロフィール画面を作る際などに、呼び出すことができなくなってしまいます。
それを避けるために、document()の（）の中にユーザーIDを指定することにより、ドキュメントIDを設定することができ、後で呼び出す際は、呼び出したいユーザーのIDと一致するドキュメント名を持ってくることで、ユーザー情報を取得することができます。

また、前回のデータ送信の際は、 db.collection("Post").addDocumentのようにaddDocumentを使っていましたが今回はsetDataを使っています。
この2つの違いとしては、addDocumentはドキュメントIDを指定せず、データを送る際はドキュメントIDがランダムに設定されるのに対し、setDataの方はドキュメントIDを指定します。
ですので、ドキュメントIDがランダムか指定するのかの違いだと思ってください！

#お疲れ様でした！
今回は、データ送信の発展編として、ドキュメントIDを指定する方法をやってみました！
次回は、送ったデータの更新をしていきます！