「自分でもアプリが作れるのかな…?」
そんな不安から始まった私の開発チャレンジ。
今回は、ChatGPTの力を借りて、Pythonで簡単なスコア管理ツールを作った記録をまとめます。
💬 やってみたかったこと
「数値を入れたらスコアを計算して記録できる、オフラインのアプリって作れますか?」
この一言から、ChatGPTとのやり取りがスタートしました。
🧠 ChatGPTの回答は…
「はい、可能です!PythonとSQLite、Tkinterを使えば、完全オフラインで動作するアプリが作れますよ。」
この言葉に背中を押されて、アプリ開発チャレンジが本格始動しました。
🧱 まずはデータベース設計から
「ユーザーごとに複数のスコアを記録できるようにしたい」と伝えると、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検索→未登録なら登録に進むコードをください」 |
一括入力にしたい | 「名前・フリガナ・生年月日・性別を一画面で入力できるようにしたい」 |
ボタンで選ばせたい | 「性別はラジオボタンで選べるようにしたい」 |
ちょっとした伝え方の違いで、コードの質や完成度がぐっと変わります。
プログラム解説
🔍 このアプリでできること
- ユーザーIDを入力すると、登録済みかどうかを確認
- 未登録の場合は、名前・フリガナ・生年月日・性別を入力して新しく登録できる
- データは
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アプリを作れる!
- 「自分で作った」という体験は、とても楽しくて達成感あり
- 小さな工夫を積み重ねることで、実用的なツールが完成していく
※私自身、プログラミングは勉強中の身です。この記事の内容は一例であり、動作や効果を保証するものではありません。ご了承ください。