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

Web APP Python
スポンサーリンク

7日目のゴール

7日目のテーマは
「辞書型で作ったユーザー管理アプリの“全体像”を理解し、自分の言葉で説明できるようになること」 です。

ここまでの6日間で、あなたはすでに

ユーザーを辞書で表現する
複数ユーザーを辞書で管理する
CRUD(登録・一覧・更新・削除)を実装する
検索・並び替えを実装する
JSON ファイルへの保存・読み込みを実装する

という流れを一通り経験しています。

7日目では、それらを「バラバラのテクニック」としてではなく
ひとつのアプリとして頭の中でつながった状態にすることを目指します。


アプリ全体像を一文で言うとどうなるか

このユーザー管理アプリを、あえて一文で表現するとこうなります。

「ユーザーIDをキーとした辞書 users を中心に、
CRUD・検索・並び替え・保存/読み込みを行うコンソールアプリ」

つまり、主役はあくまで users 辞書です。
それをどう操作するかを、関数とメニューで整理しているだけ、という見方ができます。

この「中心にあるのは辞書」という感覚を持てると、
コードの構造が一気にクリアに見えてきます。


データ構造の再確認 ユーザーとユーザー一覧

ユーザー1人を表す辞書

ユーザー1人は、こういう辞書で表現していました。

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

ここで重要なのは、「キーが意味を持っている」ということです。

id は「そのユーザーを一意に識別するためのID」
name は「表示や検索に使う名前」
age は「数値として扱える年齢」
email は「連絡先としてのメールアドレス」

つまり、
「ユーザー1人=意味のあるキーを持った辞書」
という設計になっています。

複数ユーザーを管理する users 辞書

ユーザー一覧は、こういう形でした。

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

ここでのポイントは、
外側の辞書のキーが「ユーザーID」になっていることです。

これによって、

users[“u001”] で一瞬でユーザーを取り出せる
ID の重複チェックが簡単にできる
更新や削除も ID を指定するだけで済む

という、ユーザー管理アプリにとって理想的な構造になります。


主要な機能を「辞書操作」として見直す

ここからは、アプリの主な機能を
「辞書に対して何をしているのか」という視点で整理し直します。

Create ユーザーを登録する

新しいユーザーを登録する処理は、
本質的にはこれだけです。

users[user_id] = user
Python

ユーザーIDをキーにして、
そのユーザー辞書を users に追加しています。

実際の関数では、これに加えて

ID が重複していないかチェックする
年齢が数字かどうかチェックする

といった「入力の妥当性チェック」が入っていますが、
辞書に対してやっていることは「新しいキーと値を追加する」だけです。

Read 一覧表示と検索

一覧表示は、users をぐるっと回して表示するだけです。

for user_id, user in users.items():
    print(user_id, user["name"], user["age"], user["email"])
Python

検索は、「条件を満たすユーザーだけを表示する」という形になります。

ID 検索なら

if user_id in users:
    user = users[user_id]
Python

名前の一部で検索なら

for user in users.values():
    if keyword.lower() in user["name"].lower():
        print_user(user)
Python

どちらもやっていることは
「辞書から条件に合うユーザーを取り出して表示する」
という一点に集約されます。

Update ユーザー情報を更新する

更新は、「既存の辞書の中身を上書きする」操作です。

user = users[user_id]
user["name"] = new_name
user["age"] = new_age
user["email"] = new_email
Python

ここで重要なのは、
users[user_id] で取り出した user を変更すると、
users の中身も変わる、ということです。

なぜなら、userusers[user_id] と同じ辞書を指しているからです。

Delete ユーザーを削除する

削除は、「そのユーザーIDごと辞書から取り除く」操作です。

del users[user_id]
Python

これで、users の中から
そのユーザーは完全に消えます。


ファイルとのやりとり 辞書とJSONの往復

辞書をファイルに保存する

6日目で作った保存処理は、こうでした。

import json

def save_users_to_file(users, filename):
    with open(filename, "w", encoding="utf-8") as f:
        json.dump(users, f, ensure_ascii=False, indent=2)
Python

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

users 辞書を JSON というテキスト形式に変換する
そのテキストをファイルに書き込む

という二段階です。

ただし、それを json.dump が一気にやってくれているので、
コードとしては一行で済んでいます。

ファイルから辞書を読み込む

読み込みは、こうでした。

def load_users_from_file(filename):
    try:
        with open(filename, "r", encoding="utf-8") as f:
            users = json.load(f)
        return users
    except FileNotFoundError:
        return {}
Python

ここでは、

ファイルを開く
中身の JSON を読み込む
JSON を辞書に変換する

という流れを json.load がまとめてやってくれています。

結果として、
「ファイルに保存しておいた users の状態」を
そのまま辞書として復元できるわけです。


アプリ全体の流れを日本語で説明してみる

ここまで来たあなたなら、
このアプリの流れをこう説明できるはずです。

アプリを起動したら、まず users.json を探す。
あれば JSON として読み込み、辞書 users に復元する。
なければ空の users = {} から始める。

そのあと、メニューを表示して
登録・一覧・更新・削除・検索・並び替えなどの操作を
ユーザーの入力に応じて呼び分ける。

操作の対象は常に users 辞書であり、
すべての機能は「users に対して何をするか」として書かれている。

アプリを終了するときには、
今の users の状態を JSON として users.json に保存する。

この説明が自分の口からスラスラ出てくるようなら、
もうこのアプリは「なんとなく動くもの」ではなく
「構造まで理解している自分の作品」になっています。


7日目のミニチャレンジ 自分で少し変えてみる

ここからは、あえてコードは書きません。
代わりに「こう変えるなら、どこを触るか?」を考える練習です。

例えば、こんなアレンジが考えられます。

ユーザーに「電話番号」を追加したい。
この場合は、ユーザー辞書に "phone" を足し、
登録・更新・表示・保存/読み込みのそれぞれで
phone を扱うようにコードを足していきます。

「20歳未満のユーザーだけ一覧表示する」機能を作りたい。
これは、users.values() をぐるっと回しながら
user["age"] < 20 のユーザーだけを表示する関数を
ひとつ追加すれば実現できます。

「メールアドレスのドメイン(@以降)が同じユーザーをまとめて表示したい」。
これは、user["email"].split("@")[1] でドメインを取り出し、
それをキーにしてグループ化する、という発想で組み立てられます。

どれも、
「辞書から値を取り出す」
「条件で絞り込む」
「必要なら並び替える」
「表示する」

という、あなたがすでに持っているパーツの組み合わせです。


7日目のまとめ あなたが手に入れたもの

この7日間で、あなたは

辞書型 dict を「キーと値のセット」として自然に扱える力
ユーザー1人を辞書で設計し、複数ユーザーを辞書で管理する感覚
CRUD を辞書操作として実装する具体的なイメージ
検索・並び替えを「条件+sorted+ループ」で組み立てる発想
JSON を使って「辞書 ↔ ファイル」を往復させる実践的なパターン
アプリ全体の流れを、自分の言葉で説明できるレベルの理解

を手に入れています。

ここから先は、
「フィールドを増やす」「条件を増やす」「画面(UI)を変える」など、
いくらでも発展させていけます。

大事なのは、
どんな機能を足すときも、まずこう自分に問いかけることです。

「これは users 辞書に対して、どんな操作をしたいんだろう?」

この問いが自然に浮かぶようになっていたら、
もうあなたは「辞書型でアプリを設計できる人」です。

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