【Pythonで学ぶ次の一歩】ToDoリストの作り方|リスト操作を完全マスター 更新日: 2026年1月20日 私がまだエンジニアになる前、事務職をしていた頃の話です。 毎日のタスクを付箋や裏紙に書いて管理していたのですが、ある日、重要なタスクが書かれたメモを紛失してしまいました。 「あれ、今日締め切りの書類どこだっけ...?」 顔面蒼白でゴミ箱まで探しましたが見つからず、結局上司にこっぴどく怒られました。 「もう紙なんて信用できない!デジタルで管理したい!」 そう思ってPythonの勉強を始め、最初に作った実用的なツールが、この「ToDoリストアプリ」でした。 黒い画面に自分のタスクがズラリと並び、完了したものを消していけた時の、「自分の手で道具を作った」という感動は今でも忘れられません。 今日は、当時の私のように「文法は覚えたけど、何を作ればいいか分からない」というあなたへ、Pythonで最も重要なデータ構造である「リスト」の扱い方を、ToDoアプリ開発を通して伝授します。 📝 完成形と機能の確認 今回作成するToDoリストアプリの動きを先に見てみましょう。このアプリには3つのシンプルな機能があります。 タスクを追加できる (add) 現在のタスクを一覧表示できる (list) タスクを番号で指定して完了(削除)できる (done) 実行結果のイメージ コマンドを選択してください (add, list, done, exit): add 追加するタスクを入力してください: Pythonのブログ記事を書く コマンドを選択してください (add, list, done, exit): add 追加するタスクを入力してください: 牛乳を買う コマンドを選択してください (add, list, done, exit): list --- ToDoリスト --- 1: Pythonのブログ記事を書く 2: 牛乳を買う ------------------ コマンドを選択してください (add, list, done, exit): done 完了にするタスクの番号を入力してください: 2 コマンドを選択してください (add, list, done, exit): list --- ToDoリスト --- 1: Pythonのブログ記事を書く ------------------ コマンドを選択してください (add, list, done, exit): exit アプリを終了します。 完成コード全体 先に全体のコードを示します。このコードの各パーツが何を意味しているのか、これから一つずつ丁寧に解説していきます。 # ToDoリストを保存するための空のリスト todos = [] print("シンプルなToDoリストアプリ") while True: command = input("コマンドを選択してください (add, list, done, exit): ") if command == "add": task = input("追加するタスクを入力してください: ") todos.append(task) print("タスクを追加しました。") elif command == "list": print("--- ToDoリスト ---") # enumerateを使って、インデックスと要素を同時に取得 for i, task in enumerate(todos, start=1): print(f"{i}: {task}") print("------------------") elif command == "done": try: done_index_str = input("完了にするタスクの番号を入力してください: ") done_index = int(done_index_str) - 1 # ユーザー入力は1から、リストは0から # 有効なインデックスかチェック if 0 <= done_index < len(todos): removed_task = todos.pop(done_index) print(f"タスク「{removed_task}」を完了しました。") else: print("無効な番号です。") except ValueError: print("番号で入力してください。") elif command == "exit": print("アプリを終了します。") break else: print("無効なコマンドです。") 🧩 コードの組み立て方をステップ解説 1. データを保存する「器」を用意する (リスト) まず、ユーザーが追加したToDoタスクを保存しておく場所が必要です。複数のデータを順番にしまっておける便利な箱、それがリストです。 # ToDoリストを保存するための空のリスト todos = [] [] は、中身が何もない空のリストを意味します。この todos というリストに、これからタスクを追加したり、削除したりしていきます。 2. コマンドを受け付けるメインループ 数当てゲームの時と同じように、ユーザーが「exit」と入力するまで、何度もコマンドを受け付けるための無限ループを作ります。そして、if-elif-else を使って、入力されたコマンドに応じて処理を分岐させます。 while True: command = input("コマンドを選択してください (add, list, done, exit): ") if command == "add": # 追加処理 elif command == "list": # 一覧表示処理 elif command == "done": # 削除処理 elif command == "exit": break # ループを抜ける else: print("無効なコマンドです。") 3. 機能の実装 (1) - タスクの追加 (append) add コマンドが入力されたら、新しいタスクを受け取り、todos リストの末尾に追加します。リストに要素を追加するには append() というメソッドを使います。 # if command == "add": の中身 task = input("追加するタスクを入力してください: ") todos.append(task) print("タスクを追加しました。") たったこれだけで、todosリストにどんどんタスクが溜まっていくようになります。 4. 機能の実装 (2) - タスクの一覧表示 (for と enumerate) list コマンドが入力されたら、todos リストの中身を順番に、番号付きで表示します。ここで活躍するのが for ループと enumerate() 関数です。 # elif command == "list": の中身 print("--- ToDoリスト ---") for i, task in enumerate(todos, start=1): print(f"{i}: {task}") print("------------------") enumerate(todos, start=1) は、リストの中身を順番に取り出す際に、「1から始まる通し番号」も一緒に付けてくれる便利な機能です。 5. 機能の実装 (3) - タスクの削除 (pop) done コマンドが入力された時が、一番の腕の見せ所です。ユーザーが指定した番号のタスクをリストから削除します。 # elif command == "done": の中身 done_index_str = input("完了にするタスクの番号を入力してください: ") done_index = int(done_index_str) - 1 # ユーザー入力は1から、リストは0から removed_task = todos.pop(done_index) print(f"タスク「{removed_task}」を完了しました。") 💡【超重要】Pythonのインデックスは「0」から始まる! これが初心者が最もつまずくポイントです。人間はモノを数える時「1, 2, 3...」と数えますが、Pythonのリストは「0番目, 1番目, 2番目...」と数えます。 そのため、ユーザーが「1番目のタスク」を指定したら、プログラム内部では「0番目の要素」を操作する必要があります。だから int(done_index_str) - 1 のように -1 をしているのです。 todos.pop(done_index) は、リストの指定した場所(インデックス)の要素を削除し、同時にその要素を返してくれる便利なメソッドです。 まとめ お疲れ様でした!実用的なToDoリストアプリを通して、Pythonにおける最も基本的なデータ構造「リスト」の扱い方を学びました。 空のリストを [] で作り、 .append() で要素を追加し、 for と enumerate で中身を順番に見て、 .pop() で指定した場所の要素を削除する。 この4つの操作は、今後あなたがどんなプログラムを作る上でも必ず使うことになる、まさに「基本のキ」です。 ぜひ、このアプリをベースに「タスクをファイルに保存する機能」や「タスクを編集する機能」などを追加して、あなただけのオリジナルアプリに改造してみてください! プログラミング学習に必須ツール! 記事で紹介したコードがよく分からなかったり、ご自身のコードについてもっと知りたい場合は、AIコード解説ツールが便利です。コードを貼り付けるだけで、AIが日本語で分かりやすく解説します。 AIコード解説ツールを使ってみる →