PR

PythonでToDoリストを作る方法|初心者向けにタスク管理アプリの作り方を解説

本ページにはプロモーションが含まれます。

python-todo-list 生活の知恵
スポンサーリンク

Pythonを勉強していると、「基本的な文法は少しわかるけれど、実際に何か作ってみたい」と思うことがありますよね。

そんなPython初心者の方におすすめなのが、ToDoリストの作成です。

ToDoリストは、やるべきことを登録して一覧表示し、終わったタスクを完了にしたり、不要になったタスクを削除したりできる便利なタスク管理ツールです。

この記事では、Pythonを使って簡単なToDoリストを作る方法を、初心者向けにわかりやすく解説します。

最初はPythonのリストを使ったシンプルなプログラムから始め、タスクの追加・表示・完了・削除と少しずつ機能を追加していきます。

最後には、作成したToDoリストをCSVファイルに保存する方法も紹介します。

Pythonのリスト、while文、if文、関数、ファイル操作などを実践的に学びたい方は、ぜひ参考にしてください。

この記事で作るToDoリストの機能

今回作成するToDoリストには、次のような機能を追加します。

  • 新しいタスクを追加する
  • 登録したタスクを一覧表示する
  • 完了したタスクを管理する
  • 不要なタスクを削除する
  • タスクをCSVファイルに保存する
  • 次回起動時に保存したタスクを読み込む

基本的なPythonの文法を使いながら、少しずつ実用的なプログラムにしていきます。

PythonでToDoリストを作る準備

今回のプログラムは、基本的なPythonの機能だけで作成できます。

そのため、特別なライブラリをインストールする必要はありません。

主に使用するPythonの機能は次のとおりです。

  • list:複数のタスクをまとめて管理する
  • input():キーボードからタスクを入力する
  • if文:選択したメニューに応じて処理を変える
  • while文:プログラムを繰り返し実行する
  • 関数:処理をわかりやすく整理する
  • csv:タスクをファイルに保存する

すべてを一度に覚える必要はありません。

実際にプログラムを動かしながら、それぞれの機能を少しずつ理解していきましょう。

まずは簡単なToDoリストを作ってみよう

最初に、Pythonのリストを使ってタスクを登録する簡単なプログラムを作ってみましょう。

リストにタスクを追加する

次のコードを実行してください。

todos = []

task = input("追加するタスクを入力してください:")

todos.append(task)

print(todos)

プログラムを実行すると、次のようにタスクを入力できます。

追加するタスクを入力してください:買い物に行く
['買い物に行く']

todos = []で、空のリストを作成しています。

そして、append()を使うことで、入力したタスクをリストに追加できます。

登録したタスクを一覧表示する

複数のタスクを見やすく表示するには、for文を使います。

todos = [
    "買い物に行く",
    "部屋を掃除する",
    "メールを確認する"
]

for task in todos:
    print(task)

実行すると、次のように表示されます。

買い物に行く
部屋を掃除する
メールを確認する

ただし、このままでは何番目のタスクなのかわかりにくいため、番号を付けて表示してみましょう。

for index, task in enumerate(todos, start=1):
    print(f"{index}. {task}")

実行結果は次のようになります。

1. 買い物に行く
2. 部屋を掃除する
3. メールを確認する

enumerate()を使うと、リストのデータと番号を同時に取得できます。

start=1を指定することで、番号を1から表示できます。

メニュー形式のToDoリストを作る

次は、メニューから操作を選択できるToDoリストを作ってみましょう。

プログラムを起動するたびに操作を選べるようにすると、より便利なタスク管理ツールになります。

操作メニューを表示する

まずは、次のようなメニューを表示します。

1. タスクを追加
2. タスクを表示
3. 終了

Pythonでは、input()を使ってユーザーが選択した番号を取得できます。

choice = input("操作を選択してください:")

print(f"選択した番号:{choice}")

while文を使って繰り返し操作する

ToDoリストを何度も操作できるように、while文を使います。

todos = []

while True:
    print("\n--- ToDoリスト ---")
    print("1. タスクを追加")
    print("2. タスクを表示")
    print("3. 終了")

    choice = input("操作を選択してください:")

    if choice == "1":
        task = input("追加するタスクを入力してください:")
        todos.append(task)
        print("タスクを追加しました。")

    elif choice == "2":
        print("\n--- タスク一覧 ---")

        for index, task in enumerate(todos, start=1):
            print(f"{index}. {task}")

    elif choice == "3":
        print("プログラムを終了します。")
        break

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

while Trueを使うと、breakが実行されるまでプログラムを繰り返せます。

ユーザーが「3」を選択すると、breakによってwhile文を終了します。

タスクがない場合の表示を追加する

ToDoリストが空の状態で「タスクを表示」を選択すると、何も表示されません。

そこで、タスクが登録されているかどうかを確認する処理を追加してみましょう。

if todos:
    for index, task in enumerate(todos, start=1):
        print(f"{index}. {task}")
else:
    print("登録されているタスクはありません。")

Pythonでは、空のリストはFalseとして扱われます。

そのため、if todos:と書くことで、リストにデータがあるかどうかを確認できます。

タスクを完了する機能を追加する

次に、完了したタスクを管理できるようにしてみましょう。

今回は、各タスクに「未完了」または「完了」という状態を持たせます。

タスクと状態をまとめて管理する

タスクの名前と完了状態をまとめて管理するため、辞書を使います。

todos = []

task = {
    "name": "買い物に行く",
    "completed": False
}

todos.append(task)

このタスクには、次の2つの情報があります。

  • name:タスクの名前
  • completed:完了しているかどうか

Falseは未完了、Trueは完了を表します。

タスクの状態を表示する

登録したタスクを表示するときに、完了状態も一緒に表示してみましょう。

for index, task in enumerate(todos, start=1):
    if task["completed"]:
        status = "完了"
    else:
        status = "未完了"

    print(f"{index}. [{status}] {task['name']}")

たとえば、次のように表示されます。

1. [未完了] 買い物に行く
2. [完了] 部屋を掃除する

タスクを完了にする

次に、番号を指定してタスクを完了にします。

number = int(input("完了したタスクの番号を入力してください:"))

todos[number - 1]["completed"] = True

print("タスクを完了にしました。")

リストの番号は0から始まるため、ユーザーが入力した番号から1を引いています。

たとえば、「1番のタスク」を選択した場合は、todos[0]のデータを変更します。

実際のプログラムでは、存在しない番号を入力した場合にエラーが発生しないよう、入力内容を確認する処理を追加すると安心です。

タスクを削除する機能を追加する

不要になったタスクを削除する機能も追加してみましょう。

number = int(input("削除するタスクの番号を入力してください:"))

deleted_task = todos.pop(number - 1)

print(f"{deleted_task['name']}を削除しました。")

pop()を使うと、指定した位置のデータをリストから削除できます。

また、削除したデータを変数に保存できるため、「どのタスクを削除したのか」をメッセージで表示することもできます。

ToDoリストをCSVファイルに保存する

ここまでのプログラムでは、Pythonを終了すると登録したタスクが消えてしまいます。

そこで、タスクをCSVファイルに保存して、次回も同じToDoリストを使えるようにしてみましょう。

タスクをCSVファイルに保存する

次の関数では、ToDoリストの内容をtodos.csvというファイルに保存します。

import csv

def save_todos(todos):
    with open("todos.csv", "w", newline="", encoding="utf-8") as file:
        writer = csv.writer(file)

        for task in todos:
            writer.writerow([
                task["name"],
                task["completed"]
            ])

今回は、”w”モードを使用しています。

“w”モードは、ファイルの内容を新しく書き換えるためのモードです。

ToDoリスト全体を保存し直すことで、タスクの追加・完了・削除などの変更をファイルへ反映できます。

保存したタスクを読み込む

次に、CSVファイルに保存したタスクを読み込む関数を作ります。

import csv
import os

def load_todos():
    todos = []

    if not os.path.exists("todos.csv"):
        return todos

    with open("todos.csv", "r", encoding="utf-8") as file:
        reader = csv.reader(file)

        for row in reader:
            task = {
                "name": row[0],
                "completed": row[1] == "True"
            }

            todos.append(task)

    return todos

os.path.exists()を使うことで、todos.csvというファイルが存在するかどうかを確認できます。

まだ一度も保存していない場合は、CSVファイルが存在しないため、空のToDoリストを返します。

また、CSVファイルから読み込んだデータは文字列になります。

そのため、row[1] == “True”と比較して、完了状態をTrueまたはFalseに変換しています。

完成版!Pythonで作るToDoリストプログラム

ここまで紹介した機能を組み合わせると、次のようなToDoリストを作れます。

import csv
import os


def save_todos(todos):
    with open("todos.csv", "w", newline="", encoding="utf-8") as file:
        writer = csv.writer(file)

        for task in todos:
            writer.writerow([
                task["name"],
                task["completed"]
            ])


def load_todos():
    todos = []

    if not os.path.exists("todos.csv"):
        return todos

    with open("todos.csv", "r", encoding="utf-8") as file:
        reader = csv.reader(file)

        for row in reader:
            task = {
                "name": row[0],
                "completed": row[1] == "True"
            }

            todos.append(task)

    return todos


def show_todos(todos):
    print("\n--- ToDoリスト ---")

    if not todos:
        print("登録されているタスクはありません。")
        return

    for index, task in enumerate(todos, start=1):
        status = "完了" if task["completed"] else "未完了"
        print(f"{index}. [{status}] {task['name']}")


todos = load_todos()

while True:
    print("\n--- メニュー ---")
    print("1. タスクを追加")
    print("2. タスクを表示")
    print("3. タスクを完了")
    print("4. タスクを削除")
    print("5. 終了")

    choice = input("操作を選択してください:")

    if choice == "1":
        name = input("追加するタスクを入力してください:")

        if name:
            todos.append({
                "name": name,
                "completed": False
            })

            save_todos(todos)
            print("タスクを追加しました。")
        else:
            print("タスク名を入力してください。")

    elif choice == "2":
        show_todos(todos)

    elif choice == "3":
        show_todos(todos)

        if todos:
            try:
                number = int(input("完了したタスクの番号を入力してください:"))

                if 1 <= number <= len(todos):
                    todos[number - 1]["completed"] = True
                    save_todos(todos)
                    print("タスクを完了にしました。")
                else:
                    print("正しい番号を入力してください。")

            except ValueError:
                print("数字を入力してください。")

    elif choice == "4":
        show_todos(todos)

        if todos:
            try:
                number = int(input("削除するタスクの番号を入力してください:"))

                if 1 <= number <= len(todos):
                    deleted_task = todos.pop(number - 1)
                    save_todos(todos)
                    print(f"{deleted_task['name']}を削除しました。")
                else:
                    print("正しい番号を入力してください。")

            except ValueError:
                print("数字を入力してください。")

    elif choice == "5":
        save_todos(todos)
        print("プログラムを終了します。")
        break

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

このプログラムを実行すると、メニューからタスクを管理できます。

たとえば、次のように操作できます。

--- メニュー ---
1. タスクを追加
2. タスクを表示
3. タスクを完了
4. タスクを削除
5. 終了

操作を選択してください:1
追加するタスクを入力してください:記事を書く
タスクを追加しました。

タスクを追加した後に「2」を選択すると、登録したタスクを確認できます。

--- ToDoリスト ---
1. [未完了] 記事を書く

タスクを完了すると、状態が次のように変わります。

1. [完了] 記事を書く

ToDoリストをさらに便利にする応用アイデア

基本的なToDoリストが完成したら、さらに便利な機能を追加してみましょう。

タスクに期限を設定する

タスクごとに期限を設定すると、「いつまでに終わらせる必要があるのか」を管理できます。

datetimeモジュールを使えば、今日の日付と期限を比較するプログラムも作れます。

優先順位を付ける

「高」「中」「低」のように優先順位を設定するのもおすすめです。

優先順位が高いタスクから表示する機能を追加すれば、より実用的なタスク管理ツールになります。

カテゴリーごとに管理する

仕事、勉強、家事など、タスクにカテゴリーを設定することもできます。

タスクが増えてきた場合でも、カテゴリーごとに整理すると管理しやすくなります。

GUIアプリにする

Pythonには、画面上にボタンや入力欄を表示するGUIアプリを作る方法もあります。

今回作成したToDoリストの基本的な仕組みを理解した後に、Tkinterなどを使って画面付きのアプリに挑戦するのもおすすめです。

初心者がつまずきやすいポイント

ToDoリストを作るときは、いくつか注意したいポイントがあります。

リストの番号は0から始まる

Pythonのリストは、最初のデータを0番目として扱います。

一方、ユーザーには1番から表示した方がわかりやすいため、番号を指定するときは次のように1を引いています。

todos[number - 1]

input()で入力した内容は文字列になる

input()で入力したデータは、すべて文字列として扱われます。

そのため、タスク番号を数値として使用する場合は、int()で整数に変換する必要があります。

number = int(input("番号を入力してください:"))

数字以外を入力するとエラーになるため、完成版ではtryとexceptを使ってエラーを防いでいます。

CSVから読み込んだデータも文字列になる

CSVファイルから読み込んだデータも文字列です。

今回のプログラムでは、完了状態を文字列からTrueまたはFalseに変換しています。

row[1] == "True"

データを保存するときと読み込むときで、データの形式を意識することが大切です。

まとめ

今回は、Pythonを使ってToDoリストを作る方法を紹介しました。

この記事のポイントは次のとおりです。

  • Pythonのリストを使って複数のタスクを管理できる
  • input()を使って新しいタスクを追加できる
  • while文を使ってメニューを繰り返し表示できる
  • if文を使って選択した操作に応じた処理を実行できる
  • 辞書を使ってタスク名と完了状態をまとめて管理できる
  • CSVファイルに保存すると、次回もタスクを利用できる

ToDoリストは、Pythonの基本的な文法を実践的に学ぶのにぴったりのテーマです。

最初からすべての機能を作る必要はありません。

まずはタスクを追加して表示する簡単なプログラムから始めて、慣れてきたら完了機能やCSV保存などを少しずつ追加してみてください。

自分で使えるプログラムを作りながら学ぶことで、Pythonの知識がより身につきやすくなります。

スポンサーリンク
タイトルとURLをコピーしました