生成AIの利用により、アプリケーションのソースコードを生成させることができる。しかし、これは常に完璧というわけではなく、誤ったコードが生成されたり、動作しないコードが生成されることもある。

そこで今回は、生成AIを使って、生成された動作しないPythonスクリプトをデバッグする方法を紹介する。

連載「開発&生成AI」のこれまでの回はこちらを参照

前回までの作業のおさらい

前回はChatGPTでTodoアプリで使用するデータベースのデータ構造設計、それを利用するための基本的なPythonスクリプトの生成、そのコードを2つのファイルに整理するといったところまで作業を行った。

それぞれの成果は次のとおり。

列名 内容
id INTEGER (主キー) Todoアイテムの一意識別子
title TEXT Todoアイテムのタイトル
description TEXT Todoアイテムの詳細な説明
due_date DATE Todoアイテムの期日
priority INTEGER Todoアイテムの優先度。1が最も高い優先度で、3が最も低い優先度
completed INTEGER Todoアイテムが完了したかどうかを示すフラグ。0は未完了、1は完了
ファイル名 内容
todo_app.py CUIの処理を行うファイル。ユーザーが直接操作する。
todo_db_manager.py SQLiteデータベースとのやり取りを担当するファイル。

todo_app.py

from todo_db_manager import create_todo_table, add_todo, get_todos

def main():
    # テーブルの作成
    create_todo_table()

    # Todoの追加
    add_todo("買い物", "牛乳を買う", priority=1)
    add_todo("プロジェクトの提出", "プレゼンテーション資料を完成させる", due_date=datetime(2024, 6, 10), priority=2)

    # すべてのTodoを取得して表示
    todos = get_todos()
    for todo in todos:
        print(todo)

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

Pythonに詳しい方ならこのスクリプトを読んだだけで、このままでは実行できないことに気がつだろう。今回は、ChatGPTを使って生成されたコードをデバッグしていく方法を取り上げる。