ベイビーステップで学ぶマップリストの値の操作① -Ectoスキーマからパターンマッチを使用してパラメータを取り出す

こんにちは！
プログラミング未経験文系出身、Elixirの国に迷い込んだ？！見習いアルケミストのaliceと申します。
今回はEctoスキーマからパターンマッチを使用してパラメータを取り出す方法について学んだことをまとめます。

# 目次
1.Ectoスキーマからパターンマッチを使用してパラメータを取り出す(本記事)
2.[Ectoスキーマからパラメータを取り出して更新する(iex内のみ)](https://qiita.com/Alicesky2127/items/13a3edbf441256054a3b)
3.[Enum.mapの紹介](https://qiita.com/Alicesky2127/items/34c751267a254522bae6)
4.[Enum.filterの紹介](https://qiita.com/Alicesky2127/items/a9069ee013c3b1603920)
5.[String.contains?の紹介](https://qiita.com/Alicesky2127/items/ca81efcf8cca6907364a)
6.[Enum.intoの紹介](https://qiita.com/Alicesky2127/items/b399d2a6dde4f4129ece)
7.[Map.putの紹介](https://qiita.com/Alicesky2127/items/4700d913c6df3b81a1a5)
8.[(番外編)元データがマップ→リスト→マップのもう一段深い入れ子構造だったらどうするか？(Map.getの紹介)](https://qiita.com/Alicesky2127/items/23c8d9ed8d47c22fd6aa)


# 目的 
リストの要素がマップ(あるいはその逆)になっている場合に値を取り出して操作できるようになりたい。

## 実行環境
Windows 11 ＋ WSL2 ＋ Ubuntu 22.04
Elixir v1.14.3
Erlang v26.0.2
Phoenix v1.7.10

# 今回やりたいこと 
Ectoスキーマからパラメータを取り出したい

# 今回やったこと
## Ectoスキーマの作成
`mix phx.gen.live`でEctoスキーマを作ってもらいます。

```bash
mix phx.new nov11
cd nov11
mix phx.gen.live Users User users name:string age:integer
```

```diff_elixir:/lib/nov11_web/router.ex
 scope "/", Nov11Web do
     pipe_through :browser

+    live "/users", UserLive.Index, :index
+    live "/users/new", UserLive.Index, :new
+    live "/users/:id/edit", UserLive.Index, :edit

+    live "/users/:id", UserLive.Show, :show
+    live "/users/:id/show/edit", UserLive.Show, :edit

     get "/", PageController, :home
 end
```

```bash
mix ecto.migrate
```

## データを投入してみる
```bash
iex -S mix phx.server
```

画面上からユーザーのデータを1件登録しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677280/640dca53-9c38-6b58-bdcb-934641a26525.png)



この画面上に表示されている1件のデータのnameの値を取り出したいです。

## :nameの値を取り出す
### Ectoスキーマからデータを取り出して変数userにバインドする
```diff_elixir:【iex上で実行】
iex()> user = Nov11.Users.get_user!(1)
[debug] QUERY OK source="users" db=1.4ms idle=1150.7ms
SELECT u0."id", u0."name", u0."age", u0."inserted_at", u0."updated_at" FROM "users" AS u0 WHERE (u0."id" = $1) [1]
↳ :erl_eval.do_apply/7, at: erl_eval.erl:746
%Nov11.Users.User{
  __meta__: #Ecto.Schema.Metadata<:loaded, "users">,
  id: 1,
  name: "hogehoge",
  age: 10,
  inserted_at: ~U[2023-11-11 14:34:43Z],
  updated_at: ~U[2023-11-11 14:34:43Z]
}
```

### パターンマッチを使用して変数nameに:nameの値をバインドする
```diff_elixir:【iex上で実行】
iex()> %{name: name} = user
%Nov11.Users.User{
  __meta__: #Ecto.Schema.Metadata<:loaded, "users">,
  id: 1,
  name: "hogehoge",
  age: 10,
  inserted_at: ~U[2023-11-11 14:34:43Z],
  updated_at: ~U[2023-11-11 14:34:43Z]
}
```

### 値を取り出す
```diff_elixir:【iex上で実行】
iex()> name
"hogehoge"
```
取り出せました(^▽^)/



# ～Elixirの国のご案内～
↓Elixirって何ぞや？と思ったらこちらもどぞ。Elixirは先端のアレコレをだいたい全部できちゃいます:laughing::sparkles::sparkles:

https://qiita.com/piacerex/items/09876caa1e17169ec5e1

↓ゼロからElixirを始めるなら「エリクサーチ」がおすすめ！私もエンジニア未経験から学習中です。

https://elixir-lang.info/topics/entry_column


↓[We Are The Alchemists, my friends!:bouquet:](https://qiita.com/torifukukaiou/items/6bcd5bbb80df9e594e9e "Awesome-san's Awesome article")[^10]
Elixirコミュニティは本当に優しくて温かい人たちばかり！
私が挫折せずにいられるのもこの恵まれた環境のおかげです。
まずは気軽にコミュニティを訪れてみてください。[^11]


https://speakerdeck.com/elijo/elixirkomiyunitei-falsebu-kifang-guo-nei-onrainbian




[^10]: @torifukukaiouさんのAwesomeな名言をお借りしました。Elixirコミュニティを一言で表すと、これに尽きます。


[^11]: @kn339264さんの素敵なスライドをお借りしました。Elixirコミュニティはいろんな形で活動中！