ChatGPTとPythonで始めたスコア記録アプリ!初心者でもできたID検索&登録アプリ

ChatGPTとPythonで始めたスコア記録アプリ!初心者でもできたID検索&登録アプリ

「自分でもアプリが作れるのかな…?」
そんな不安から始まった私の開発チャレンジ。
今回は、ChatGPTの力を借りて、Pythonで簡単なスコア管理ツールを作った記録をまとめます。


目次

💬 やってみたかったこと

「数値を入れたらスコアを計算して記録できる、オフラインのアプリって作れますか?」

この一言から、ChatGPTとのやり取りがスタートしました。


🧠 ChatGPTの回答は…

「はい、可能です!PythonとSQLite、Tkinterを使えば、完全オフラインで動作するアプリが作れますよ。」

この言葉に背中を押されて、アプリ開発チャレンジが本格始動しました。


🧱 まずはデータベース設計から

「ユーザーごとに複数のスコアを記録できるようにしたい」と伝えると、ChatGPTはこんな構成を提案してくれました。

あわせて読みたい
ChatGPTとPythonで始めたスコア記録アプリ|SQLiteで2テーブルのDBを作ってみた話 💬 スタート:やりたいことをChatGPTに伝えてみた 私:「ChatGPTと一緒に、オフラインで使えるスコア計算アプリを作ってみたいんです。数値を入力したらスコアを計算し...

💻 GUIアプリを作りたい!

「IDを入力してユーザー情報を呼び出す画面を作りたい。リストにないIDは登録できるようにしたい」と相談すると…

ChatGPTがPythonコードでシンプルなTkinter画面を用意してくれました。


🎉 実行してみたら…

「すごい。あっさりできるもんですね。」

本当に、びっくりするくらい簡単に、ID検索&登録ツールが動きました!

import sqlite3
import tkinter as tk
from tkinter import messagebox

# データベース接続
def get_connection():
    return sqlite3.connect("user_data.db")

# ユーザー情報を検索
def find_user_by_id(patient_id):
    conn = get_connection()
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM user_info WHERE patient_id = ?", (patient_id,))
    result = cursor.fetchone()
    conn.close()
    return result

# ユーザー情報を登録
def register_user(patient_id, name, kana, birth_date, sex):
    conn = get_connection()
    cursor = conn.cursor()
    cursor.execute(
        "INSERT INTO user_info (patient_id, name, kana, birth_date, sex) VALUES (?, ?, ?, ?, ?)",
        (patient_id, name, kana, birth_date, sex),
    )
    conn.commit()
    conn.close()

# 新規登録フォームを表示
def open_register_window(patient_id):
    def submit():
        name = entry_name.get()
        kana = entry_kana.get()
        birth_date = entry_birth.get()
        sex = sex_var.get()

        if not all([name, kana, birth_date, sex]):
            messagebox.showwarning("入力エラー", "すべての項目を入力してください。")
            return

        register_user(patient_id, name, kana, birth_date, sex)
        messagebox.showinfo("登録完了", "ユーザーを登録しました。")
        reg_win.destroy()

    reg_win = tk.Toplevel(root)
    reg_win.title("新規ユーザー登録")
    reg_win.geometry("300x250")

    tk.Label(reg_win, text="名前").pack()
    entry_name = tk.Entry(reg_win)
    entry_name.pack()

    tk.Label(reg_win, text="フリガナ").pack()
    entry_kana = tk.Entry(reg_win)
    entry_kana.pack()

    tk.Label(reg_win, text="生年月日(YYYY-MM-DD)").pack()
    entry_birth = tk.Entry(reg_win)
    entry_birth.pack()

    tk.Label(reg_win, text="性別").pack()
    sex_var = tk.StringVar()
    tk.Radiobutton(reg_win, text="男性", variable=sex_var, value="男性").pack()
    tk.Radiobutton(reg_win, text="女性", variable=sex_var, value="女性").pack()

    tk.Button(reg_win, text="登録", command=submit).pack(pady=10)

# メイン処理
def search_user():
    patient_id = entry_id.get()

    if not patient_id:
        messagebox.showwarning("入力エラー", "ユーザーIDを入力してください。")
        return

    user = find_user_by_id(patient_id)

    if user:
        msg = f"登録済みユーザー:\nID:{user[0]}\n名前:{user[1]}\nフリガナ:{user[2]}\n生年月日:{user[3]}\n性別:{user[4]}"
        messagebox.showinfo("ユーザー情報", msg)
    else:
        result = messagebox.askyesno("未登録", "このIDは未登録です。新しく登録しますか?")
        if result:
            open_register_window(patient_id)

# UI構築
root = tk.Tk()
root.title("ユーザー検索と登録")
root.geometry("400x200")

tk.Label(root, text="ユーザーIDを入力:").pack(pady=10)
entry_id = tk.Entry(root)
entry_id.pack()

tk.Button(root, text="検索", command=search_user).pack(pady=20)

root.mainloop()

🔧 改良もどんどん進む!

「性別はラジオボタンで選びたいな」
「名前や生年月日をまとめて1画面で入力したい」

そんな要望にも、ChatGPTは即対応。以下のように改良されました。

  • 名前/フリガナ/生年月日/性別を一括入力できるフォーム
  • 性別は「男性/女性」のラジオボタンで選択
  • 入力内容のチェックや登録後のメッセージ表示まで完備

これで、GUIとしてもとても使いやすい画面ができあがりました!


📝 ここまででできたこと

機能状況
ID入力 → 情報取得✅ 実装済み
新規ユーザー登録✅ 一括フォームで登録可能
入力チェック✅ 未入力防止バリデーションあり
性別選択✅ ラジオボタンで選択可能
DB保存user_info テーブルに登録される

💡 ChatGPTへの指示の工夫

開発に慣れていなくても、「目的」「見た目」「操作方法」を意識して伝えるだけで、ChatGPTがかなり丁寧に対応してくれます。

指示の出し方のコツ

やりたいこと指示例
IDで検索したい「TkinterでID入力→DB検索→未登録なら登録に進むコードをください」
一括入力にしたい「名前・フリガナ・生年月日・性別を一画面で入力できるようにしたい」
ボタンで選ばせたい「性別はラジオボタンで選べるようにしたい」

ちょっとした伝え方の違いで、コードの質や完成度がぐっと変わります。


プログラム解説

🔍 このアプリでできること

  1. ユーザーIDを入力すると、登録済みかどうかを確認
  2. 未登録の場合は、名前・フリガナ・生年月日・性別を入力して新しく登録できる
  3. データは user_data.db に保存される(SQLiteデータベース)

🧱 使っている技術

技術目的
Tkinterボタンや入力欄など、画面を作るためのライブラリ
sqlite3データ保存用のデータベース(ファイル1つで使える)
messageboxメッセージウィンドウの表示

✅ コード解説(ポイントごとに)

① データベース接続

def get_connection():
    return sqlite3.connect("user_data.db")

→ データベース(user_data.db)につなぐ関数。毎回これで接続します。


② ユーザーIDで検索

def find_user_by_id(patient_id):
    ...

→ 入力されたIDがすでに登録されているかを調べます。


③ 新しいユーザーの登録

def register_user(patient_id, name, kana, birth_date, sex):
    ...

→ 入力された情報をデータベースに保存します。


④ 新規登録フォームの表示

def open_register_window(patient_id):
    ...

→ 登録されていなかったときに、
名前・フリガナ・生年月日・性別を一画面で入力するウィンドウを開きます。

  • 性別はラジオボタン(選択式)で入力しやすく
  • 「登録」ボタンを押すと保存されます

⑤ メインの処理(検索ボタンの動き)

def search_user():
    ...

→ ユーザーIDを入力して「検索」を押すと、

  • 登録済み → 情報を表示
  • 未登録 → 新規登録フォームを表示

⑥ アプリ画面の設定

root = tk.Tk()
...
root.mainloop()

→ アプリのウィンドウを作って表示します。


👀 画面イメージ(ざっくり)

┌────────────────────────────┐
│ ユーザーIDを入力: │
│ [ ここに入力 ] │
│ │
│ [検索] │
└────────────────────────────┘

未登録なら、次のような画面がポップアップ:

┌──────────── 新規ユーザー登録 ───────────┐
│ 名前: [ ] │
│ フリガナ:[ ] │
│ 生年月日:[ ](YYYY-MM-DD) │
│ 性別: ○男性 ○女性 │
│ │
│ [登録] │
└────────────────────────────────┘

✨ 初心者が知っておきたいポイント

ポイント説明
Tk()mainloop()ウィンドウを表示する基本
Entry()入力欄を作る
messageboxメッセージや警告を表示
Radiobutton選択肢をラジオボタンで作成
SQLiteファイル1つで使えるシンプルなDB(保存も簡単)

🔚 まとめ

このプログラムは、データベースを使ったGUIアプリの基礎を学ぶのに最適です。

  • 「入力 → 確認 → 登録」という基本の流れを理解できる
  • 実際に保存・表示されることで達成感がある
  • ChatGPTがあれば、コードの修正や追加も安心!

🔜 次回に向けて

このアプリは、今後こういう機能を追加していく予定です。

  • 数値Yや検査日を入力 → 年齢とスコアを自動計算
  • 履歴一覧の表示
  • 必要に応じて、データの修正や削除も

☑ 今回のまとめ

  • ChatGPTがいれば、初心者でもGUIアプリを作れる!
  • 「自分で作った」という体験は、とても楽しくて達成感あり
  • 小さな工夫を積み重ねることで、実用的なツールが完成していく

※私自身、プログラミングは勉強中の身です。この記事の内容は一例であり、動作や効果を保証するものではありません。ご了承ください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

このブログ「Re:AI Life」では、
ChatGPTを中心に、AIをちょっとだけ生活に取り入れて、毎日がちょっとラクになる方法をお届けしています。
「AIなんてわからないよ〜」という方こそ大歓迎!
同世代の仲間として、安心して読める・試せる・相談できる場所を目指しています。
どうぞよろしくお願いします😊

目次