0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

🍅ChatGPTと一緒に作った!ポモドーロタイマー付きToDoアプリ【Python × tkinter】

0
Posted at

🧠 はじめに

PythonでGUIアプリを作ってみたいけど、
「何から始めればいいかわからない…」という方、いませんか?

そんな時は、ChatGPTを相棒にすれば安心です!

この記事では、ChatGPTに相談しながら
📋ToDoリストと⏰ポモドーロタイマーを組み合わせたアプリを作成した体験を共有します。

✅ GUIアプリの構築方法
✅ ChatGPTの活用方法
✅ 実用的なコードの紹介

を初心者向けに丁寧に解説します。


🤝 ChatGPTに聞いたこと

今回の開発で、ChatGPTにはこんな質問をしました:

  • PythonでToDoリストアプリを作るには?
  • tkinterでボタンや入力欄を使いたい
  • ポモドーロタイマーを追加するには?
  • UIを止めずにタイマーを動かすには?
  • 作業中のタスク名を表示したい

質問に対する返答だけでなく、サンプルコードや改善提案までしてくれるので、本当に頼れる開発パートナーでした!


🖥️ 作ったアプリの機能

機能 内容
✅ タスク管理 タスクの追加・削除ができるToDoリスト
⏲️ ポモドーロタイマー 25分作業+5分休憩のサイクルを回せる
🔁 選択タスクに連動 選んだタスクが作業中に画面に表示される

🧪 完成コード

import tkinter as tk
from tkinter import messagebox
import time
import threading

tasks = []
timer_running = False
pomodoro_minutes = 25
break_minutes = 5

def add_task():
    task = task_entry.get().strip()
    if task:
        tasks.append(task)
        task_listbox.insert(tk.END, task)
        task_entry.delete(0, tk.END)
    else:
        messagebox.showwarning("入力エラー", "タスクを入力してください。")

def delete_task():
    selected = task_listbox.curselection()
    if selected:
        index = selected[0]
        tasks.pop(index)
        task_listbox.delete(index)
    else:
        messagebox.showinfo("選択なし", "削除するタスクを選んでください。")

def start_pomodoro():
    global timer_running
    if timer_running:
        return

    selected = task_listbox.curselection()
    if not selected:
        messagebox.showinfo("タスク未選択", "タイマーを開始するにはタスクを選択してください。")
        return

    current_task = tasks[selected[0]]
    task_label.config(text=f"作業中: {current_task}")
    timer_thread = threading.Thread(target=lambda: run_timer(current_task))
    timer_thread.daemon = True
    timer_thread.start()

def run_timer(task_name):
    global timer_running
    timer_running = True
    countdown(pomodoro_minutes * 60, "作業タイム")
    countdown(break_minutes * 60, "休憩タイム")
    task_label.config(text="🍅 タイマー完了!")
    timer_running = False

def countdown(seconds, label):
    for remaining in range(seconds, 0, -1):
        if not timer_running:
            break
        mins, secs = divmod(remaining, 60)
        time_str = f"{label}{mins:02}:{secs:02}"
        timer_label.config(text=time_str)
        time.sleep(1)

def reset_timer():
    global timer_running
    timer_running = False
    timer_label.config(text="タイマー停止中")
    task_label.config(text="")

# GUI構築
root = tk.Tk()
root.title("🍅 ポモドーロToDoアプリ")

task_entry = tk.Entry(root, width=40)
task_entry.pack(pady=5)

add_button = tk.Button(root, text="追加", command=add_task)
add_button.pack()

task_listbox = tk.Listbox(root, width=50, height=8)
task_listbox.pack(pady=5)

delete_button = tk.Button(root, text="削除", command=delete_task)
delete_button.pack()

task_label = tk.Label(root, text="", font=("Helvetica", 12))
task_label.pack(pady=10)

timer_label = tk.Label(root, text="タイマー停止中", font=("Helvetica", 18), fg="green")
timer_label.pack(pady=10)

start_button = tk.Button(root, text="▶️ タイマー開始", command=start_pomodoro)
start_button.pack(pady=5)

reset_button = tk.Button(root, text="⏹️ リセット", command=reset_timer)
reset_button.pack(pady=5)

root.mainloop()

🧪 完成イメージ

スクリーンショット 2025-09-21 23.40.36.png


🧠 工夫ポイント

ポイント 説明
threading タイマーを別スレッドで動かしてUIが固まらないようにする
Labelでタスク名表示 タイマー中は対象タスク名を明示的に表示して集中しやすく
messagebox 操作エラーをポップアップで丁寧に通知

✨ 作ってみて感じたこと

  • ChatGPTとの開発はめちゃくちゃ楽しい!
  • バグで止まっても、すぐ質問して解決できるのでストレスが少ない
  • 作って動いたときの喜びが大きい!(達成感🔥)

初心者でも「ChatGPT + Python + tkinter」で、
1人で使える本格的なツールが作れるという自信になりました。


🤖 ChatGPT活用Tips

ChatGPTにお願いするコツは、「何をしたいか」を明確に伝えることです!

🙅‍♂️ 悪い例:
→ タイマー作って

🙆‍♀️ 良い例:
→ tkinterでポモドーロタイマー(25分→5分休憩)を作るコードを教えて。UIは止まらないようにしたい。

📌 今後のアイデア(次の記事に向けて)

  • 💾 作業履歴の保存(ログ記録機能)
  • 📊 日別作業の可視化(棒グラフ)
  • ☁️ Googleカレンダー連携
  • 🗂️ カテゴリ別ToDo管理

📝 まとめ

ChatGPTと一緒なら、Python初心者でもGUIアプリ開発が楽しめます!

今回のアプリは以下の技術がぎゅっと詰まっています:

  • tkinterでGUI構築
  • threadingでタイマー管理
  • ChatGPTで設計・実装サポート

「作って楽しい」「使って便利」なアプリ、ぜひ一緒に育ててみてください!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?