Skip to content

Instantly share code, notes, and snippets.

@rcmdnk
Created January 26, 2025 09:43

Python Todo List Project

###プロジェクトディレクトリ構造

todo_list/
├── config.json
├── data/
│   ├── tasks.json
│   └── completed_tasks.json
├── main.py
└── requirements.txt

###ファイル contents

config.json

_config.json_ファイルは、データベースとローカルストレージの接続情報を定義します。次のようなフォーマットで定めることができ ます。

{
  "database": {
    "host": "localhost",
    "port": 5432,
    "username": "todo_listuser",
    "password": "todo_listpass",
    "database": "todo_listdb"
  },
  "local_storage": {
    "tasks_file": "data/tasks.json",
    "completed_tasks_file": "data/completed_tasks.json"
  }
}

data/

_data_ディレクトリには、ローカルストレージに保存されているデータが格納されます。tasks.jsoncompleted_tasks.jsonという2つのファイルを書きます。

tasks.json

tasks.jsonは、未完了のタスクを格納します。

[
  {
    "id": 1,
    "description": "第1回計画"
  },
  {
    "id": 2,
    "description": "第2回計画"
  }
]

completed_tasks.json

completed_tasks.jsonは、完了されたタスクを格納します。

[
  {
    "id": 1,
    "description": "第1回計画 (完了)"
  },
  {
    "id": 2,
    "description": "第2回計画 (完了)"
  }
]

main.py

_main.py_ファイルは、Todo Listプロジェクトのメインロジックを管理するものです。次のような内容を書きます。

import os
import json
from config import Config

config = Config()
db_host = config.database["host"]
db_port = config.database["port"]
db_username = config.database["username"]
db_password = config.database["password"]
db_database = config.database["database"]

tasks_file = config.local_storage["tasks_file"]
completed_tasks_file = config.local_storage["completed_tasks_file"]

class TodoList:
    def __init__(self):
        # データベース接続
        self.conn = None

    def get_task(self, task_id):
        # 未完了タスクはローカルストレージから取得します
        with open(tasks_file, "r") as f:
            tasks = json.load(f)
            for task in tasks:
                if task["id"] == task_id:
                    return task

    def complete_task(self, task_id):
        # 完了タスクをローカルスト レジスターで保存します
        with open(tasks_file, "r+") as f:
            tasks = json.load(f)
            for i, task in enumerate(tasks):
                if task["id"] == task_id:
                    tasks[i]["status"] = "Completed"
            with open(tasks_file, "w") as f:
                json.dump(tasks, f)

# instance
todo_list = TodoList()

# test
print(todo_list.get_task(1))
todo_list.complete_task(1)

requirements.txt

_requiresments.txt_ファイルは、プロジェクト必要なパッケージをリストしてみます。次のようなコマンドが使うかもしれません。

pip install -r requirements.txt
python setup.py develop

###実行する

最後に、projectディレクトリ内のmain.pyファイルでPythonを使用してプロジェクトのロジックを実際にすることができます。

cd todo_list/
# 依存packageのインストール・build
pip install -r requirements.txt

python main.py

これでTodo Listプロジェクトが完成しました!

追加機能:

  1. データベースのタスクの取得/保存
  2. タスクのステータスの変更(未 완了/完了)
  3. タスクの削除
  4. 未完了タスクの総数と完了タスクの総数表示
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment