業務用スクリプトの依頼文に入力・出力・エラー処理のルールを入れる
「これを自動化して」を、実行可能な task description に変えます。sensitive data を含まない合成 sample と、手作業で確認した expected result を添えて、team ごとの work logs を集計する script request を完成させます。
CSV業務日誌からAIで週次報告書を作り、Pythonで時間と完了件数を照合します。コピーできるプロンプトで完了・進行中・計画・障害を分け、漏れを確認します。
この翻訳はAIで作成しました。コード、単位、数値は原文と併せて確認してください。各言語のネイティブ話者による校閲は、まだ完了していません。 English
対象読者短い日々の業務ログを記録しており、作業時間や完了件数を自分で確認しながらAIで週報を作成したい人向けです。
AIは短く断片的な業務記録を読みやすい文章に整理するのに役立ちますが、計算結果の基準として扱うべきではありません。週報の文章が自然でも、合計値が変わったり、同じ作業を二重に数えたり、予定中の作業を完了済みとして表現したりする可能性があります。より安全なのは、文章作成と数値照合を分ける方法です。
次の業務ログは合成データです。各行には1つの作業、その作業に使った時間、その週のうちに完了したかどうかが記録されています。このように項目を構造化しておくと、後で数値を照合しやすくなります。
| date | task | hours | status |
|---|---|---|---|
| 2026-09-14 | Clean customer CSV | 2.0 | completed |
| 2026-09-14 | Draft import script | 1.5 | completed |
| 2026-09-15 | Test import script | 2.5 | completed |
| 2026-09-16 | Investigate duplicate IDs | 1.0 | completed |
| 2026-09-17 | Update validation rules | 2.0 | completed |
| 2026-09-18 | Prepare user notes | 1.5 | in progress |
手計算では、作業時間は2.0 + 1.5 + 2.5 + 1.0 + 2.0 + 1.5 = 10.5時間です。6件の作業のうち5件がcompletedなので、完了作業数は5件です。最後の作業はまだin progressであり、完了として数えてはいけません。
業務ログをAIチャットアシスタントに貼り付け、与えたデータだけを整理するよう明確に制限します。後から確認できるように、AIが計算した合計作業時間と完了件数も書かせます。
AIへの依頼例: 下の業務ログだけを使って簡潔な週報を書いてください。完了した業務、進行中の業務、週間合計の3つに分けてください。記録にない成果や作業は追加しないでください。合計記録時間と完了した作業数を明記し、元の作業内容の意味は変えないでください。
一般的なAIの回答は次のようになります。今週は顧客データを整理し、インポートスクリプトを作成してテストし、重複IDを調査し、検証ルールを更新しました。ユーザー向けメモの作成は引き続き進行中です。合計記録時間は10.5時間で、完了した作業は5件です。
同じ合成例を、date、task、hours、status列を持つwork_log.csvとして保存します。照合スクリプトはAIが書いた文章から数値を取り出すのではなく、この元ファイルを直接読み取ります。
| 項目 | ログから求めた期待値 |
|---|---|
| 行数 | 6 |
| 合計作業時間 | 10.5 |
| 完了作業数 | 5 |
| 進行中の作業数 | 1 |
この分離が重要です。CSVは根拠データであり、週報はその根拠を読みやすく表現した成果物です。
次のPython 3.12スクリプトはwork_log.csvを読み、必須列を確認し、合計作業時間とステータス別件数を計算して、照合結果をoutputs/weekly_reconciliation.txtに保存します。既存のoutputsディレクトリは上書きしません。
from pathlib import Path
import csv
input_path = Path("work_log.csv")
output_dir = Path("outputs")
if output_dir.exists():
raise SystemExit("outputs already exists; remove or rename it before running again")
if not input_path.exists():
raise SystemExit("work_log.csv was not found")
required_fields = {"date", "task", "hours", "status"}
rows = []
with input_path.open("r", encoding="utf-8", newline="") as f:
reader = csv.DictReader(f)
if reader.fieldnames is None:
raise SystemExit("CSV has no header")
missing = required_fields - set(reader.fieldnames)
if missing:
raise SystemExit(f"Missing columns: {sorted(missing)}")
for line_number, row in enumerate(reader, start=2):
try:
hours = float(row["hours"])
except ValueError:
raise SystemExit(f"Invalid hours value on line {line_number}")
if hours < 0:
raise SystemExit(f"Negative hours on line {line_number}")
status = row["status"].strip().lower()
if status not in {"completed", "in progress"}:
raise SystemExit(f"Unexpected status on line {line_number}: {status}")
rows.append({
"date": row["date"].strip(),
"task": row["task"].strip(),
"hours": hours,
"status": status,
})
total_hours = sum(row["hours"] for row in rows)
completed_count = sum(row["status"] == "completed" for row in rows)
in_progress_count = sum(row["status"] == "in progress" for row in rows)
output_dir.mkdir()
report_path = output_dir / "weekly_reconciliation.txt"
report = (
f"Rows: {len(rows)}\n"
f"Total hours: {total_hours:.1f}\n"
f"Completed activities: {completed_count}\n"
f"In-progress activities: {in_progress_count}\n"
)
report_path.write_text(report, encoding="utf-8")
print(report, end="")
print(f"Saved: {report_path}")この例で独立して確認した値は、合計作業時間10.5時間、完了作業5件です。AIの下書きに含まれるすべての数値表現をこれらと比較します。
| 確認項目 | ログの結果 | AIの下書き | 判定 |
|---|---|---|---|
| 合計作業時間 | 10.5 | 10.5 | 一致 |
| 完了作業数 | 5 | 5 | 一致 |
| 進行中の作業数 | 1 | ユーザー向けメモは進行中 | 内容一致 |
この例ではCSVの1行を1つの数えられる作業として扱います。実際の組織では、チケット、成果物、プロジェクト、マイルストーンなどを基準に数える場合があるため、照合前に何を1件と数えるか定義する必要があります。また、このスクリプトで確認できるのは単純な時間合計とステータスだけであり、業務ログ自体が正しいか、業務の品質が十分だったかまでは判断できません。
業務日誌を週次報告書にまとめるときは、状態の異なる業務を1つの段落に混ぜないほうがよいです。完了した業務、まだ進行中の業務、翌週の計画、進行を妨げる障害事項を別々に求めると、原文との照合がしやすくなります。CSVの空欄は実際の値0とは意味が異なる場合があるため、AIが空欄を勝手に0と解釈しないよう制限します。また、各要約項目に根拠となった原文の行番号や識別子を付けさせると、その後Pythonで時間や件数を照合するときに、漏れや重複を見つけやすくなります。
以下のCSV業務日誌を使って、週次業務報告書の案を作成してください。
報告書の構成:
1. 完了した業務
2. 進行中の業務
3. 翌週の計画
4. 障害事項または確認が必要な事項
ルール:
- 各項目の後に、根拠となった原文の行番号または提供された行識別子を表示してください。
- 完了と進行中を勝手に変更しないでください。
- 翌週の計画が原文にない場合は、新しい計画を事実として作らず、「原文に計画情報なし」と表示してください。
- 障害事項が記録されていない場合でも、「障害事項0件」と断定せず、「記録された障害事項なし」と表現してください。
- CSVの空欄を数値0や「なし」に自動変換しないでください。
- 時間、件数、完了数などの数値は原文の値をそのまま維持し、計算が必要な場合は計算式も示してください。
- 異なる行の業務を1つにまとめる場合、原文の意味が変わっていないか確認してください。
- 最後に、Pythonで照合する数値項目を「検算対象」として別に列挙してください。ChatGPT Python tool · Python 3.x · standard library only
説明と例は独自に作成しました。関連する動作や概念は、以下の公式資料で確認できます。