業務用スクリプトの依頼文に入力・出力・エラー処理のルールを入れる
「これを自動化して」を、実行可能な task description に変えます。sensitive data を含まない合成 sample と、手作業で確認した expected result を添えて、team ごとの work logs を集計する script request を完成させます。
AI生成コードは完成して見えても、入力、境界条件、依存関係、エラー処理に隠れた前提がある場合があります。小さな合成CSV例を使って、実際に使う前にコードを体系的に確認する方法を説明します。
この翻訳はAIで作成しました。コード、単位、数値は原文と併せて確認してください。各言語のネイティブ話者による校閲は、まだ完了していません。 English
対象読者AIチャットアシスタントで小さなPythonスクリプトを作成し、実データに使う前に再現可能な方法で確認したい人向けです。
AIチャットアシスタントは、構文上もっともらしいコードをすばやく生成できます。しかし、もっともらしく見えることと正しいことは同じではありません。すべての入力行が完全であると仮定したり、列を誤って解釈したり、既存の結果を上書きしたり、手元にないパッケージへ依存したり、特殊な値を受け取ったときだけ失敗したりする可能性があります。そのため、コードが自然に見えるかだけでなく、コードが置いている前提を一つずつ確認する必要があります。
簡単なレビューは5つの質問で整理できます。どのような入力を想定しているか。境界値や例外的な値ではどう動くか。エラーをどう処理するか。どの依存関係が必要か。誤った結果を見つけるにはどのテストが必要か。計算自体が正しくても既存ファイルを上書きするなら安全ではないため、出力方法も確認します。
合成ファイル orders.csv があるとします。列は order_id、quantity、unit_price の3つです。データ行は A001,2,10.00、A002,3,5.50、A003,1,8.00 です。期待される売上は手計算できます。2 × 10.00 = 20.00、3 × 5.50 = 16.50、1 × 8.00 = 8.00 なので、合計数量は6、合計売上は44.50になるはずです。
最初の例を小さくすることには意味があります。AIが作ったスクリプトが44.50を出力した場合、自分で計算した値と比較できます。最初から50,000行の実務ファイルを使うと、もっともらしい結果の中に読み取りや計算の誤りが隠れる可能性があります。
| order_id | quantity | unit_price | 期待売上 |
|---|---|---|---|
| A001 | 2 | 10.00 | 20.00 |
| A002 | 3 | 5.50 | 16.50 |
| A003 | 1 | 8.00 | 8.00 |
| 合計 | 6 | 44.50 |
単に売上を集計するスクリプトを依頼するのではなく、ファイル形式、計算内容、失敗時の動作、出力ポリシーまで指定すると確認しやすくなります。
妥当な回答では、CSVの読み取りに csv.DictReader、金額計算に Decimal、パス処理に pathlib を使い、入力を明示的に検証することがあります。コードがきれいに見えても、実装が依頼内容と一致していると決めつけず、各分岐を確認します。
from csv import DictReader
from decimal import Decimal, InvalidOperation
from pathlib import Path
INPUT_FILE = Path("orders.csv")
OUTPUT_DIR = Path("outputs")
OUTPUT_FILE = OUTPUT_DIR / "order_summary.txt"
REQUIRED_COLUMNS = {"order_id", "quantity", "unit_price"}
def main():
if not INPUT_FILE.is_file():
raise SystemExit(f"Input file not found: {INPUT_FILE}")
if OUTPUT_FILE.exists():
raise SystemExit(f"Output already exists: {OUTPUT_FILE}")
total_quantity = 0
total_revenue = Decimal("0")
with INPUT_FILE.open("r", encoding="utf-8", newline="") as file:
reader = DictReader(file)
if reader.fieldnames is None:
raise SystemExit("Input file has no header row.")
missing_columns = REQUIRED_COLUMNS - set(reader.fieldnames)
if missing_columns:
names = ", ".join(sorted(missing_columns))
raise SystemExit(f"Missing required columns: {names}")
for line_number, row in enumerate(reader, start=2):
order_id = row["order_id"].strip()
quantity_text = row["quantity"].strip()
price_text = row["unit_price"].strip()
if not order_id or not quantity_text or not price_text:
raise SystemExit(f"Missing value on line {line_number}.")
try:
quantity = int(quantity_text)
unit_price = Decimal(price_text)
except (ValueError, InvalidOperation):
raise SystemExit(f"Invalid numeric value on line {line_number}.")
if quantity < 0 or unit_price < 0:
raise SystemExit(f"Negative value on line {line_number}.")
total_quantity += quantity
total_revenue += quantity * unit_price
OUTPUT_DIR.mkdir(parents=True, exist_ok=True)
result = (
f"total_quantity={total_quantity}\n"
f"total_revenue={total_revenue:.2f}\n"
)
OUTPUT_FILE.write_text(result, encoding="utf-8")
print(f"Wrote: {OUTPUT_FILE}")
if __name__ == "__main__":
main()
| 確認項目 | 確認する質問 | この例での動作 |
|---|---|---|
| 入力 | ファイル名、列名、文字コード、データ型が明確か。 | orders.csv と指定された3列を要求し、UTF-8のCSVとして開きます。 |
| 境界値 | ヘッダー欠損、空欄、0、負の値ではどうなるか。 | 必須値の欠損と負の値は拒否し、0は許可します。 |
| エラー処理 | 不正入力で誤った結果を計算し続けず、明確に停止するか。 | 値の欠損や不正な数値がある場合、該当行番号を含むメッセージで停止します。 |
| 依存関係 | 説明されていない外部パッケージや特定バージョンを必要とするか。 | Python 3.12の標準ライブラリだけを使います。 |
| 出力の安全性 | 既存結果を上書きする可能性があるか。 | outputs/order_summary.txt が存在する場合は停止します。 |
| テスト | 小さな例について結果を事前に予測できるか。 | 合成例では合計数量6、合計売上44.50になるはずです。 |
構文だけでは見えにくい前提も確認します。たとえば、このスクリプトは quantity と unit_price が負の場合だけ拒否するため、0は許可します。数量や価格が0でもよいかどうかはPythonの問題ではなく、業務ルールの問題です。実データへ適用する前に、そのルールが目的に合っているかレビューする必要があります。
正常ケースだけをテストしてはいけません。意図的に異なる入力を少数用意すると、スクリプトの挙動をよりよく確認できます。
このチェックリストは一般的な実装ミスを見つけるのに役立ちますが、元の要件自体が正しいことまでは証明できません。返品を負の値として扱うべきか、quantity が0でもよいか、価格に税が含まれるか、重複した order_id を許可するかは、ルールを明示しない限りスクリプト自身では判断できません。
より大規模または高リスクなスクリプトでは、セキュリティ、権限、プライバシー、並行実行、数値精度、性能、ログ、自動テストまでレビュー範囲を広げます。また、パス操作、シェルコマンド、ネットワーク要求、認証情報、破壊的なファイル操作を扱うコードは、小さなローカルCSV計算より慎重に確認する必要があります。
実務では、入力条件を定義し、小さな例を独立して計算し、各失敗経路を確認し、依存関係を特定し、出力を保護し、境界値をテストするという順序で進められます。AIは実装の下書き作成には使えますが、そのコードが実際の要件に合っているかを判断するのはレビューする側です。
2026-09-21 · hand-checked example · Python 3.12
説明と例は独自に作成しました。関連する動作や概念は、以下の公式資料で確認できます。