Python | 1 日 120 分 × 7 日アプリ学習:JSON保存アプリ(中級編)

Web APP Python
スポンサーリンク

3日目のゴール

3日目のテーマは
「JSON に保存されたデータを“検索・更新・削除”できるようにする」
つまり、アプリとして必要な“データ操作の基礎(CRUD)”を身につけることです。

1日目:JSON の基本
2日目:複数データを JSON に保存し、起動時に復元
3日目:保存されたデータを自由に操作できるようにする

ここまで来ると、JSON は単なるファイルではなく
「あなた専用の小さなデータベース」 として扱えるようになります。


CRUDという考え方を理解する

データ操作の4つの柱

アプリでデータを扱うとき、必ず次の4つが必要になります。

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

2日目までで Create と Read はできました。
3日目では Update と Delete を追加して、
アプリとしての完成度を一気に高めます。


今日扱うデータの形を確認する

JSON と Python の対応を頭に置く

例として「ユーザー情報」を扱います。

Python のデータはこうです。

users = [
    {"name": "Taro", "age": 25},
    {"name": "Hanako", "age": 30}
]
Python

JSON にするとこうなります。

[
  {"name": "Taro", "age": 25},
  {"name": "Hanako", "age": 30}
]

3日目では、この users に対して

  • 名前で検索する
  • 年齢を更新する
  • ユーザーを削除する

という操作を追加します。


検索:特定のデータを見つける

find_user 関数を作る

まずは「検索」から始めます。

def find_user(users, name):
    for user in users:
        if user["name"] == name:
            return user
    return None
Python

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

  • 見つかったらそのユーザー(dict)を返す
  • 見つからなければ None を返す

という「検索関数の基本形」を作っていることです。

この関数があるだけで、
更新も削除も一気に書きやすくなります。


更新:データの一部を書き換える

update_user_age 関数を作る

検索を使って、年齢を更新する関数を作ります。

def update_user_age(users, name, new_age):
    user = find_user(users, name)
    if user is None:
        print("ユーザーが見つかりません。")
        return False

    user["age"] = new_age
    print("年齢を更新しました。")
    return True
Python

ここで深掘りしたいのは、

「更新は検索してから値を変えるだけ」
というシンプルな構造です。

更新処理は複雑に見えますが、
実は「検索 → 値を変更」の2ステップだけで成立します。


削除:データを取り除く

delete_user 関数を作る

削除は「リストから要素を取り除く」だけです。

def delete_user(users, name):
    for i, user in enumerate(users):
        if user["name"] == name:
            del users[i]
            print("ユーザーを削除しました。")
            return True

    print("ユーザーが見つかりません。")
    return False
Python

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

  • enumerate で「インデックス+データ」を取り出す
  • インデックスを使って削除する

という「削除の基本形」を覚えることです。


更新・削除したら JSON に保存し直す

データ操作 → 保存 の流れを徹底する

更新や削除をしたら、
必ず JSON に書き戻します。

if update_user_age(users, name, new_age):
    save_users("users.json", users)
Python
if delete_user(users, name):
    save_users("users.json", users)
Python

この「変更したらすぐ保存する」習慣が
アプリの信頼性を高めます。


3日目のミニアプリ:検索・更新・削除つきユーザー管理アプリ

全体コード(理解しやすいように整理済み)

import json
import os

FILENAME = "users.json"

def load_users(filename):
    if not os.path.exists(filename):
        return []
    with open(filename, "r", encoding="utf-8") as f:
        return json.load(f)

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

def add_user(users):
    name = input("名前: ")
    age_text = input("年齢: ")

    try:
        age = int(age_text)
    except ValueError:
        print("年齢は数字で入力してください。0 として保存します。")
        age = 0

    users.append({"name": name, "age": age})
    print("ユーザーを追加しました。")

def find_user(users, name):
    for user in users:
        if user["name"] == name:
            return user
    return None

def update_user_age(users, name, new_age):
    user = find_user(users, name)
    if user is None:
        print("ユーザーが見つかりません。")
        return False
    user["age"] = new_age
    return True

def delete_user(users, name):
    for i, user in enumerate(users):
        if user["name"] == name:
            del users[i]
            return True
    return False

def show_users(users):
    if not users:
        print("ユーザーはいません。")
        return
    print("=== ユーザー一覧 ===")
    for u in users:
        print(f"{u['name']} ({u['age']}歳)")

def main():
    users = load_users(FILENAME)
    print("JSONファイルから読み込みました。")

    while True:
        print("\n1: 追加")
        print("2: 一覧表示")
        print("3: 年齢更新")
        print("4: 削除")
        print("0: 終了")

        choice = input("番号を選んでください: ")

        if choice == "1":
            add_user(users)
            save_users(FILENAME, users)

        elif choice == "2":
            show_users(users)

        elif choice == "3":
            name = input("更新するユーザー名: ")
            age = int(input("新しい年齢: "))
            if update_user_age(users, name, age):
                save_users(FILENAME, users)
                print("更新しました。")
            else:
                print("ユーザーが見つかりません。")

        elif choice == "4":
            name = input("削除するユーザー名: ")
            if delete_user(users, name):
                save_users(FILENAME, users)
                print("削除しました。")
            else:
                print("ユーザーが見つかりません。")

        elif choice == "0":
            save_users(FILENAME, users)
            print("終了します。")
            break

        else:
            print("正しい番号を入力してください。")

main()
Python

3日目で絶対に押さえておきたいこと

JSON保存アプリの「データ操作の基本パターン」

今日の本質はこれです。

検索 → 更新 or 削除 → 保存

この流れを理解すれば、
どんな JSON 保存アプリでも応用できます。

特に重要なのは次の3つ。

検索関数を作ると、他の処理が劇的に楽になる
更新は「検索してから値を変える」だけ
削除は enumerate でインデックスを使うと安全

この3つは、
Python でデータ操作をするうえでの“基本技術”です。


次の日へのつながり

4日目では、
「アプリ全体の構造を整理して、読みやすく・壊れにくくする」
という、アプリ開発で最も重要なスキルに進みます。

ここまで来れば、
あなたはもう JSON を使った“本格的なアプリ開発者”の仲間入りです。
あなたはもう“JSONを使ったアプリ開発者”の仲間入りです。

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