今回はTodoアプリにタスクを削除する機能を追加する。SQLiteストレージとやりとりをしてタスクデータを削除する処理と、ユーザーとやり取りする部分の処理を生成AIに生成させることで開発を行う。既存のスクリプトをベースに機能の開発を指示する方法として参考になるので試してもらえれば幸いだ。
連載「生成AI×プログラミング」のこれまでの回はこちらを参照。
これまでの成果物
最初にこれまでの成果物をまとめる。SQLiteのデータ構造、構成しているPythonスクリプトファイル、アプリのサブコマンド、Pythonスクリプトを実行するためのPowerShellラッパースクリプトは次のようになる。
列名 | 型 | 内容 |
---|---|---|
id | INTEGER (主キー) | タスクの一意識別子 |
title | TEXT | タスクのタイトル |
description | TEXT | タスクの詳細な説明 |
due_date | DATE | タスクの期日 |
priority | INTEGER | タスクの優先度。1が最も高い優先度で、3が最も低い優先度 |
completed | INTEGER | タスクが完了したかどうかを示すフラグ。0は未完了、1は完了 |
ファイル名 | 内容 |
---|---|
todo_app.py | CUIの処理を行うファイル。ユーザーが直接操作する |
todo_db_manager.py | SQLiteデータベースとのやり取りを担当するファイル |
todo_app.ps1 | todo_app.pyを実行するためのラッパースクリプト |
サブコマンド | 引数 | 内容 |
---|---|---|
add | ー | タスクの追加 |
remove | id | タスクの削除 |
list | ー | タスクの一覧表示 |
todo_app.py
import sys
import datetime
from todo_db_manager import create_todo_table, add_todo, get_todos
def main():
# コマンドライン引数の処理
if len(sys.argv) < 2:
print("サブコマンドが指定されていません。")
return
command = sys.argv[1]
# テーブルの作成
create_todo_table()
if command == "add":
# タスクの追加
print("タスクの追加処理を実装してください。")
#add_todo("買い物", "牛乳を買う", priority=1)
#add_todo("プロジェクトの提出", "プレゼンテーション資料を完成させる", due_date=datetime.datetime(2024, 6, 10), priority=2)
elif command == "remove":
# タスクの削除
print("タスクの削除処理を実装してください。")
elif command == "list":
# すべてのタスクを一覧表示
todos = get_todos()
for todo in todos:
print(todo)
else:
print("無効なサブコマンドです。")
if __name__ == "__main__":
main(
todo_db_manager.py
import sqlite3
from datetime import datetime
DB_FILE = "todos.db"
def create_todo_table():
conn = sqlite3.connect(DB_FILE)
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS todos (
id INTEGER PRIMARY KEY,
title TEXT,
description TEXT,
due_date DATE,
priority INTEGER,
completed INTEGER
)
''')
conn.commit()
conn.close()
def add_todo(title, description=None, due_date=None, priority=3):
conn = sqlite3.connect(DB_FILE)
cursor = conn.cursor()
cursor.execute('''
INSERT INTO todos (title, description, due_date, priority, completed)
VALUES (?, ?, ?, ?, ?)
''', (title, description, due_date, priority, 0))
conn.commit()
conn.close()
def get_todos():
conn = sqlite3.connect(DB_FILE)
cursor = conn.cursor()
cursor.execute('''
SELECT * FROM todos
''')
todos = cursor.fetchall()
conn.close()
return todos
todo_app.ps1
# PythonのパスとPythonスクリプトのパスを設定する
$pythonExe = "C:\Users\daichi\AppData\Local\Microsoft\WindowsApps\python.exe"
$pythonScript = "C:\Users\daichi\Documents\python\todo\todo_app.py"
# カレントディレクトリをスクリプトのディレクトリに設定する
Set-Location (Split-Path $pythonScript -Parent)
# Pythonスクリプトを実行する
& $pythonExe $pythonScript @args
前回のプロンプトスキルを踏まえつつ、今回はタスクを削除する処理を実装していく。