🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

【コピペで動く】Pythonで簡単なToDoリストアプリを作ろう!(テキストベース)

PythonをコマンドプロンプトやPowerShellでPC上で動かすには、Pythonをダウンロードしてインストールする必要があります。
まだの方はPythonのインストールと開発環境の構築の記事を参考にして、Pythonをインストールしてください。

こんにちは!数ヶ月前までプログラミング知識ゼロだった私が、AIと一緒にWebサイトを立ち上げる中で学んだことを発信しています。

今回は、プログラミング学習の第一歩として超おすすめな「ToDoリストアプリ」をPythonで作っていきます。この記事のゴールはただ一つ!あなたに「自分で作ったプログラムが動いた!」という感動を体験してもらうことです。

難しい理論は後回し!まずはコピペで動くコードを触りながら、「なるほど、こうやって動いてるのか!」を実感していきましょう。専門用語は私がつまづいた経験を元に、とことん噛み砕いて説明するので安心してくださいね。


まずは完成品を動かしてみよう!

論より証拠!まずは完成版のToDoリストアプリを動かしてみましょう。下のコードを全部コピーして、todo.pyという名前でファイルを作成し、貼り付けて保存してください。


# -*- coding: utf-8 -*-

TASKS_FILE = "tasks.txt"

def load_tasks():
    """ファイルからタスクを読み込む関数"""
    try:
        with open(TASKS_FILE, "r", encoding="utf-8") as f:
            # strip()で各行の末尾にある改行文字を取り除く
            tasks = [line.strip() for line in f.readlines()]
    except FileNotFoundError:
        # ファイルが存在しない場合は空のリストを返す
        tasks = []
    return tasks

def save_tasks(tasks):
    """タスクをファイルに保存する関数"""
    with open(TASKS_FILE, "w", encoding="utf-8") as f:
        # 各タスクの末尾に改行を追加して書き込む
        for task in tasks:
            f.write(task + "\n")

def list_tasks(tasks):
    """タスクの一覧を表示する関数"""
    if not tasks:
        print("✅ タスクはありません。")
        return
    
    print("--- ToDoリスト ---")
    # enumerateを使って、インデックス(番号)とタスクを同時に取得
    for i, task in enumerate(tasks):
        print(f"{i + 1}: {task}")
    print("------------------")

def add_task(tasks):
    """タスクを追加する関数"""
    task = input("追加するタスクを入力してください: ")
    if task:
        tasks.append(task)
        save_tasks(tasks)
        print(f"✨ タスク「{task}」を追加しました。")
    else:
        print("⚠️ タスクが入力されていません。")

def delete_task(tasks):
    """タスクを削除する関数"""
    list_tasks(tasks)
    if not tasks:
        return
        
    try:
        # ユーザーに番号でタスクを選んでもらう
        num_str = input("削除するタスクの番号を入力してください: ")
        num = int(num_str)
        
        # ユーザーは1から数えるが、リストのインデックスは0からなので調整
        if 1 <= num <= len(tasks):
            removed_task = tasks.pop(num - 1)
            save_tasks(tasks)
            print(f"🗑️ タスク「{removed_task}」を削除しました。")
        else:
            print("⚠️ その番号のタスクはありません。")
            
    except ValueError:
        # 数字以外のものが入力された場合のエラー処理
        print("⚠️ 番号を正しく入力してください。")

def main():
    """メインの処理を行う関数"""
    tasks = load_tasks()
    
    while True:
        print("\n何をしますか?")
        command = input("1:一覧表示, 2:追加, 3:削除, 9:終了 > ")
        
        if command == "1":
            list_tasks(tasks)
        elif command == "2":
            add_task(tasks)
        elif command == "3":
            delete_task(tasks)
        elif command == "9":
            print("👋 アプリを終了します。お疲れ様でした!")
            break
        else:
            print("⚠️ 1, 2, 3, 9 のいずれかを入力してください。")

if __name__ == "__main__":
    main()
        

保存したら、ターミナル(WindowsならコマンドプロンプトやPowerShell)を開いて、保存したファイルがあるディレクトリに移動し、次のコマンドを実行します。


python todo.py
        

どうでしょう?「何をしますか?」と聞かれましたか? 「2」を入力してタスクを追加したり、「1」で一覧を確認したり、「3」で削除したりしてみてください。「9」でアプリを終了できます。すごい、もう立派なアプリです!

ここからは、この魔法の呪文(コード)が、一体何をやっているのかを一緒に解き明かしていきましょう。


ステップ1:タスクの「追加」と「一覧表示」だけの超シンプル版

いきなり全部を理解しようとすると大変です。まずは、アプリの心臓部である「タスクの追加」と「一覧表示」機能だけに絞った、もっと簡単なコードから見ていきましょう。


# タスクを保存するための空のリスト(配列のようなもの)を用意
tasks = []

# 無限に処理を繰り返す
while True:
    print("\n何をしますか?")
    command = input("1:一覧表示, 2:追加, 9:終了 > ")

    if command == "1":
        print("--- ToDoリスト ---")
        for task in tasks:
            print(task)
        print("------------------")
    
    elif command == "2":
        task = input("追加するタスクを入力してください: ")
        tasks.append(task)
        print(f"✨ タスク「{task}」を追加しました。")

    elif command == "9":
        print("👋 アプリを終了します。")
        break # ループを抜ける

    else:
        print("⚠️ 1, 2, 9 のいずれかを入力してください。")
        

この短いコードに、プログラミングの基本がギュッと詰まっています。


ステップ2:「削除機能」と「エラー対策」を追加する

次に追加したタスクを削除できるようにしましょう。ただ削除するだけでは不便なので、どのタスクを消すか番号で選べるようにします。ここで少しレベルアップしますよ!


# ... (ステップ1のコードの `if command == "1":` の部分を以下に差し替え) ...

    if command == "1":
        print("--- ToDoリスト ---")
        # enumerate を使うと、リストの番号と中身を同時に取り出せる
        for i, task in enumerate(tasks):
            # iは0から始まるので、表示するときは1を足す
            print(f"{i + 1}: {task}") 
        print("------------------")

# ... (ステップ1のコードの `elif command == "2":` の後に以下を追加) ...
    
    elif command == "3": # 削除機能を追加
        # 先に現在のリストを表示して、ユーザーが選びやすくする
        for i, task in enumerate(tasks):
            print(f"{i + 1}: {task}")

        try:
            num_str = input("削除するタスクの番号を入力してください: ")
            num = int(num_str) # 入力された文字を数字に変換

            # pop()で指定した番号(インデックス)の要素をリストから削除
            removed_task = tasks.pop(num - 1) 
            print(f"🗑️ タスク「{removed_task}」を削除しました。")
        
        except ValueError:
            print("⚠️ 番号を正しく入力してください。")
        except IndexError:
            print("⚠️ その番号のタスクはありません。")
        

新しいポイントがいくつか出てきました。

「ユーザーは開発者の思った通りには操作してくれない」というのは鉄則です。こうしたエラー対策を入れることで、アプリが不意に落ちてしまうのを防ぎ、より親切で頑丈なプログラムになります。


ステップ3:データをファイルに保存して、消えないようにする

今のアプリには大きな弱点があります。一度プログラムを終了すると、追加したタスクが全て消えてしまうのです。これではToDoリストとして使えませんよね。そこで、タスクをファイルに保存し、次回起動時に読み込む機能を追加します。


# ファイル名を決めておく
TASKS_FILE = "tasks.txt"

# --- 関数の定義 ---
def load_tasks():
    try:
        # "r"は読み込み(read)モード
        with open(TASKS_FILE, "r", encoding="utf-8") as f:
            # readlines()で全行をリストとして読み込み、strip()で改行文字を削除
            tasks = [line.strip() for line in f.readlines()]
    except FileNotFoundError:
        # 最初の一回など、ファイルがない場合はエラーになるので、空のリストを返す
        tasks = []
    return tasks

def save_tasks(tasks):
    # "w"は書き込み(write)モード。ファイルがなければ新規作成される
    with open(TASKS_FILE, "w", encoding="utf-8") as f:
        for task in tasks:
            # ファイルに書き込むときは、各タスクの最後に改行(\n)を入れる
            f.write(task + "\n")

# --- メインの処理 ---
# アプリ起動時に、まずファイルからタスクを読み込む
tasks = load_tasks()

# タスクを追加・削除するたびに、save_tasks(tasks)を呼び出すように変更する
# (最初の完成版コードを参照してください)
        

ここでのポイントは「ファイルの読み書き」です。

そして、一番最初に紹介した完成コードのように、処理の塊をdefを使って「関数」としてまとめてあげる(これをリファクタリングと言います)と、コードがスッキリして、どこで何をやっているのかが格段に分かりやすくなります。コードが長くなってきたら、機能ごとに箱(関数)に分けて整理整頓する癖をつけると、後々の自分が楽になりますよ。


まとめ:動けば勝ち!そして次のステップへ

お疲れ様でした!これであなたは、Pythonで自分だけのToDoリストアプリを作る力を手に入れました。重要なのは、完璧に理解することよりも、「コピペでもいいから、まず動かしてみる」ことです。動くものがあって、それを少しずついじりながら「これを変えたらどうなるんだろう?」と実験していくのが、上達への一番の近道だと、私は身をもって体験しました。

エラーは怖いものではなく、あなたのプログラムがもっと良くなるためのヒントです。エラーメッセージが読めなくても、そのままAIに貼り付けて「このエラーはどういう意味で、どうすれば直る?」と聞けば、大抵は解決策を教えてくれます。

ぜひ、今回作ったアプリに「タスクの編集機能」や「完了したタスクにチェックを入れる機能」などを追加して、あなただけの最強のToDoリストに育ててみてください!

次のステップへ

基本的なアプリが作れるようになったら、次はいよいよ計算に挑戦してみませんか?四則演算ができるシンプルな電卓アプリの作り方を紹介しています。

Pythonで電卓アプリを作ってみよう(四則演算)