Python | 1 日 120 分 × 7 日アプリ学習:辞書型で作るユーザー管理アプリ(中級編)

Web APP Python
スポンサーリンク

1日目のゴール

1日目のテーマは
「辞書型 dict を使って、“ユーザー管理アプリの土台”を作れるようになること」 です。

今日つかんでほしいのは、この3つです。

辞書型とは何か(キーと値の関係)
ユーザー1人をどう表現するか
ユーザー一覧をどう辞書で管理するか(CRUDの“C”と“R”の入口)

まだ「アプリ完成」までは行きません。
でも、“ユーザー管理の頭の中のモデル” を、しっかり作る日です。


辞書型 dict を「現実のイメージ」でつかむ

辞書型は「ラベル付きの引き出し」

まず、dict を難しく考えないでほしいんです。

辞書型は、
「ラベル付きの引き出しがたくさん並んだ棚」
だと思ってください。

Python では、こう書きます。

user = {
    "name": "Taro",
    "age": 25,
    "email": "taro@example.com"
}
Python

ここでやっていることを日本語にすると、

user という箱の中に、
name というラベルの引き出しに ‘Taro’ を入れ、
age というラベルの引き出しに 25 を入れ、
email というラベルの引き出しに ‘taro@example.com’ を入れる」

ということです。

ここでの重要ポイントは、

キー("name""age")は「ラベル」
値("Taro"25)は「そのラベルに対応する中身」

という対応関係です。


キーと値をしっかりイメージする

「キーは質問、値は答え」として考える

さっきの user を使って、こう書けます。

print(user["name"])   # Taro
print(user["age"])    # 25
print(user["email"])  # taro@example.com
Python

これは、こういう会話に近いです。

「このユーザーの name は?」 → “Taro”
「このユーザーの age は?」 → 25
「このユーザーの email は?」 → “taro@example.com”

つまり、

「キーは“質問の種類”、値は“その答え”」

というイメージを持つと、すごくしっくりきます。


ユーザー1人を「辞書1つ」で表現する

ユーザー情報をどう設計するか

ユーザー管理アプリを作るとき、
まず決めるべきはこれです。

「ユーザー1人を、どんな情報のセットとして扱うか?」

例えば、こう決めてみましょう。

ユーザーID(文字列)
名前
年齢
メールアドレス

これを辞書で表現すると、こうなります。

user1 = {
    "id": "u001",
    "name": "Taro",
    "age": 25,
    "email": "taro@example.com"
}

user2 = {
    "id": "u002",
    "name": "Hanako",
    "age": 30,
    "email": "hanako@example.com"
}
Python

ここでの重要ポイントは、

「ユーザー1人=1つの辞書」

という設計です。


複数ユーザーをどう管理するか

「ユーザー一覧」を辞書で持つ発想

ユーザーが1人だけなら、user1 だけでいいですが、
アプリとしては「複数ユーザー」を扱いたいですよね。

ここで選択肢が出てきます。

リストで [user1, user2, ...] と持つ
辞書で {ユーザーID: user辞書} と持つ

今回は「ユーザー管理アプリ」なので、
ユーザーIDで素早く探せる形 にしたいです。

そこで、こうします。

users = {
    "u001": {
        "id": "u001",
        "name": "Taro",
        "age": 25,
        "email": "taro@example.com"
    },
    "u002": {
        "id": "u002",
        "name": "Hanako",
        "age": 30,
        "email": "hanako@example.com"
    }
}
Python

ここでの構造を言葉で説明すると、

users は「ユーザー一覧」を表す辞書
キーはユーザーID(”u001″ など)
値は「そのユーザーの情報が入った辞書」

という二段構造になっています。


ユーザーを「IDで取り出す」操作

users[ユーザーID] で一瞬でアクセスできる

さっきの users を使って、
ユーザーIDから情報を取り出してみます。

user_id = "u001"
user = users[user_id]

print(user["name"])   # Taro
print(user["email"])  # taro@example.com
Python

ここで起きていることは、

users という「大きな棚」から、
"u001" というラベルの引き出しを開けて、
その中に入っている user 辞書を取り出している

というイメージです。

ここでの重要ポイントは、

「辞書の中に辞書が入っている」構造を怖がらないこと

です。


CRUD の「C」と「R」を辞書で考える

CRUD ってそもそも何?

ユーザー管理アプリでは、
よく「CRUD」という言葉が出てきます。

Create(作成)
Read(読み取り)
Update(更新)
Delete(削除)

今日はこのうち、

Create(ユーザーを追加する)
Read(ユーザーを参照する)

の2つに絞って、
辞書でどう書くかを見ていきます。


Create:ユーザーを追加する

users に「新しいキーと値」を足すだけ

新しいユーザーを追加するには、
users 辞書に新しいキーを追加すればOKです。

users = {}

new_user = {
    "id": "u001",
    "name": "Taro",
    "age": 25,
    "email": "taro@example.com"
}

users[new_user["id"]] = new_user
Python

ここでの流れを日本語で説明すると、

空のユーザー一覧 users を用意する
新しいユーザー情報 new_user を作る
そのユーザーの "id" をキーとして、users に登録する

ということです。

つまり、

「Create=辞書に新しいキーと値を追加すること」

です。


Read:ユーザーを参照する

ID を指定して情報を取り出す

さっき追加したユーザーを、
ID から取り出して表示してみます。

user_id = "u001"

if user_id in users:
    user = users[user_id]
    print("ID:", user["id"])
    print("名前:", user["name"])
    print("年齢:", user["age"])
    print("メール:", user["email"])
else:
    print("そのIDのユーザーは存在しません。")
Python

ここでの重要ポイントは、

if user_id in users:
「そのIDが登録されているかどうか」をチェックしている

ということです。

存在チェックをしてから取り出す
これは、辞書を安全に扱ううえでとても大事な習慣です。


1日目のミニアプリ:超シンプルユーザー登録&表示

今日の学びをひとつの流れにする

1日目の締めとして、
「1人だけユーザーを登録して、すぐ表示する」
というミニアプリを書いてみます。

def main():
    users = {}

    print("ユーザー登録アプリ(1日目)")

    user_id = input("ユーザーIDを入力してください: ")
    name = input("名前を入力してください: ")
    age_text = input("年齢を入力してください: ")
    email = input("メールアドレスを入力してください: ")

    age = int(age_text)

    user = {
        "id": user_id,
        "name": name,
        "age": age,
        "email": email
    }

    users[user_id] = user

    print("ユーザーを登録しました。")
    print("=== 登録されたユーザー情報 ===")
    print("ID:", users[user_id]["id"])
    print("名前:", users[user_id]["name"])
    print("年齢:", users[user_id]["age"])
    print("メール:", users[user_id]["email"])


main()
Python

このプログラムがやっていることを、
あえて日本語だけで整理するとこうです。

空のユーザー一覧 users を用意する
ユーザーID・名前・年齢・メールを入力してもらう
入力された情報から user 辞書を作る
users[user_id] = user で登録する(Create)
登録したユーザーを users[user_id] から取り出して表示する(Read)

これだけで、
「辞書型で作るユーザー管理アプリの“最初の一歩”」
は踏み出せています。


重要ポイントの深掘り:なぜ dict を使うのか

リストではなく辞書を選ぶ理由

「ユーザー一覧をリストで持つこともできるのに、
なぜわざわざ辞書にするのか?」

ここを理解しておくと、
設計のセンスが一段上がります。

リストで持つ場合(例):

users = [
    {"id": "u001", "name": "Taro"},
    {"id": "u002", "name": "Hanako"}
]
Python

この場合、
「ID が u002 のユーザーを探す」には、
先頭から順番に探す必要があります。

一方、辞書で持つ場合:

users = {
    "u001": {...},
    "u002": {...}
}
Python

この場合、

user = users["u002"]
Python

と一発で取り出せます。

つまり、

「ID で素早く探したいときは、辞書が圧倒的に向いている」

ということです。

ユーザー管理アプリはまさに
「ID で探す」世界なので、
辞書型がぴったりハマります。


1日目のまとめ:今日つかんでほしい感覚

今日の本質は、これです。

辞書型 dict は「キー(ラベル)と値(中身)のセット」。
ユーザー1人を「1つの辞書」で表現できる。
ユーザー一覧を「ユーザーID → ユーザー辞書」の辞書で管理できる。
Create は「辞書に新しいキーと値を追加すること」。
Read は「キーを指定して値(ユーザー情報)を取り出すこと」。

ここまで理解できていれば、
2日目からの

「複数ユーザーを追加する」
「メニューで操作を選ぶ」
「Update(更新)と Delete(削除)を実装する」

といった、本格的なユーザー管理アプリに
スムーズに進んでいけます。

タイトルとURLをコピーしました