AIの業務活用

繰り返し使えるAIプロンプトのテンプレート集を作る

繰り返すAI作業は、プロンプトの構成を統一すると確認と再利用がしやすくなります。このガイドでは、変数、例、タスク別チェックリストを含む小さなプロンプトテンプレート集の作り方を説明します。

目次を表示

この翻訳はAIで作成しました。コード、単位、数値は原文と併せて確認してください。各言語のネイティブ話者による校閲は、まだ完了していません。 English

対象読者似た作業をAIチャットアシスタントに繰り返し依頼し、一貫性があり確認しやすいプロンプトを再利用したい人向けです。

準備するもの
  • Python 3.12
  • プロンプト作成とテキストファイル編集の基本的な知識

01繰り返すプロンプトをテンプレート化する理由

レポートの要約、アクション項目の抽出、コードレビュー、メッセージの書き直しなど、似た作業をAIに繰り返し依頼する場合、毎回記憶だけを頼りにプロンプトを書き直すと不要なばらつきが生まれます。重要な制約が抜けたり、出力形式が変わったり、例の内容が不統一になったりすることがあります。プロンプトテンプレート集を使えば、各定型作業を再利用・確認できる小さな仕様として管理できます。

実用的なテンプレートでは、変わらない指示と毎回変わる入力値を分離します。固定部分にはタスク、ルール、期待する出力形式、確認項目を記述します。変数にはプロジェクト名、対象読者、元テキスト、日付、指定言語など、実行ごとに変化する値を入れます。

02小さな合成テンプレート集を作る

この例は合成例です。AIチャットアシスタントを使って、週次作業ログの要約と、会議メモからアクション項目を抽出する2つの作業を繰り返すとします。それぞれのタスクを、変数、指示、例、チェックリストの4つの要素で保存できます。

テンプレート変数主な出力
weekly_summaryproject, audience, log_text簡潔な週次要約
meeting_actionsmeeting_name, notesアクション項目一覧

変数は指示ではなくプレースホルダーです。たとえばprojectにはAtlas、audienceにはengineering team、log_textにはその週の記録を入れられます。値を分離しておくと、再利用するプロンプト自体が変わったのか、入力データだけが変わったのかを確認しやすくなります。

03すべてのテンプレートを同じ構成にする

複雑な表現より構成の一貫性が重要です。実用的なテンプレートには、タスク説明、変数プレースホルダー、明示的なルール、入出力例、最後の自己確認を含められます。チェックリストでは、情報の捏造、必須項目の欠落、日付の変更、根拠のない結論の追加など、実際に確認できる失敗に重点を置きます。

  1. weekly_summaryのように、繰り返すタスクに安定した識別子を付けます。
  2. プロンプトを生成する前に必要なすべての変数を列挙します。
  3. 一時的なプロジェクト情報を埋め込まずにタスク指示を書きます。
  4. 長さ、見出し、表の列、JSONキーなどの出力ルールを追加します。
  5. 必要な形式が説明より例で理解しやすい場合は、小さな例を追加します。
  6. ユーザーまたはAIが結果に適用できるチェックリストで終えます。

テンプレートを汎用化しすぎると、そのタスクを実用的にするためのルールが弱くなることがあります。多数のオプション変数を持つ万能プロンプト1つより、タスクごとに小さく分けたテンプレートを複数管理する方が扱いやすい場合が多いです。

04Pythonでテンプレートを生成する

次の標準ライブラリのスクリプトでは、2つの合成テンプレートを定義し、必須変数がそろっているか確認してから、選択したテンプレートを生成してoutputsフォルダに保存します。保存先ファイルがすでに存在する場合は停止するため、以前に生成したプロンプトを誤って上書きしません。

python
from pathlib import Path
from string import Template

TEMPLATES = {
    "weekly_summary": {
        "required": ["project", "audience", "log_text"],
        "template": Template(
            "Task: Summarize the weekly work log.\n\n"
            "Project: $project\n"
            "Audience: $audience\n\n"
            "Rules:\n"
            "- Use only information present in the log.\n"
            "- Separate completed work, open issues, and next steps.\n"
            "- Keep dates and numbers unchanged.\n"
            "- If something is unclear, label it as unclear instead of guessing.\n\n"
            "Example format:\n"
            "Completed:\n"
            "- Finished data cleanup.\n"
            "Open issues:\n"
            "- Waiting for test results.\n"
            "Next steps:\n"
            "- Review results when available.\n\n"
            "Checklist:\n"
            "- Every statement comes from the log.\n"
            "- Dates and numbers are preserved.\n"
            "- No unsupported status claims are added.\n\n"
            "Work log:\n$log_text\n"
        ),
    },
    "meeting_actions": {
        "required": ["meeting_name", "notes"],
        "template": Template(
            "Task: Extract action items from the meeting notes.\n\n"
            "Meeting: $meeting_name\n\n"
            "Rules:\n"
            "- Do not invent owners or deadlines.\n"
            "- Preserve names and dates exactly as written.\n"
            "- Mark missing owner or deadline as Not specified.\n\n"
            "Example format:\n"
            "Action | Owner | Deadline\n"
            "Send draft | Mina | 2026-09-25\n"
            "Check budget | Not specified | Not specified\n\n"
            "Checklist:\n"
            "- Each action is supported by the notes.\n"
            "- Owners are not inferred.\n"
            "- Deadlines are not invented.\n\n"
            "Meeting notes:\n$notes\n"
        ),
    },
}

selected = "weekly_summary"
values = {
    "project": "Atlas",
    "audience": "engineering team",
    "log_text": (
        "2026-09-14: Cleaned 120 test rows.\n"
        "2026-09-16: Compared two validation reports.\n"
        "Open issue: three records still have missing labels.\n"
        "Next: review those records with the team."
    ),
}

spec = TEMPLATES[selected]
missing = [name for name in spec["required"] if not values.get(name)]
if missing:
    raise SystemExit("Missing variables: " + ", ".join(missing))

rendered = spec["template"].substitute(values)

output_dir = Path("outputs")
output_dir.mkdir(exist_ok=True)
output_file = output_dir / f"{selected}_prompt.txt"

if output_file.exists():
    raise SystemExit(f"Stop: {output_file} already exists.")

output_file.write_text(rendered, encoding="utf-8")
print(f"Wrote {output_file}")

05送信前に生成されたプロンプトを確認する

合成weekly_summary例では、必須変数はproject、audience、log_textで、3つすべてが与えられています。そのため、生成後のプロンプトにはAtlas、engineering team、4行の作業ログが含まれるはずです。$projectのようなプレースホルダーが残っていてはいけません。

  • すべての必須変数に空でない値が入っているか確認します。
  • 生成されたテキストに$projectや$notesのような未置換のプレースホルダーが残っていないか検索します。
  • 例の内容と実際の入力データが明確に分離されているか確認します。
  • 一時的なデータが再利用テンプレートに誤ってコピーされず、変数にだけ保存されているか確認します。
  • チェックリストがそのタスクで実際に起こる失敗を反映しているか見直します。
  • 日付、名前、数値、識別子を正確に保つ必要がある場合は、元テキストを変更しません。

06テンプレート集を整理して変更を管理する

小規模なテンプレート集なら、1つのPythonファイルや通常のテキストフォルダで管理できます。数が増えたら、summarize-weekly-log、extract-meeting-actions、review-code、classify-feedbackのような安定したファイル名や識別子を使います。各テンプレートは1つの繰り返しタスクに集中させます。

プロンプトを変更した場合は、何をなぜ変えたのか記録します。たとえばAIが繰り返し期限を作り出してしまうなら、推測した期限を禁止するルールとチェック項目を追加できます。これにより、曖昧な指示を無計画に増やすのではなく、実際に発生した問題に対応してテンプレートを改善できます。

各テンプレートに小さな合成テストケースを1つ残しておくのも有効です。テンプレートを変更した後、同じテスト変数で再生成し、必須セクション、ラベル、制約が残っているか確認します。これだけでAIが必ず指示に従うことを保証できるわけではありませんが、意図しないプロンプトの劣化を見つける助けになります。

07よくあるミスと限界

よくあるミスの1つは、プロンプトテンプレートが出力品質を保証すると考えることです。構造化されたプロンプトは曖昧さを減らせますが、生成された回答は引き続き確認する必要があります。もう1つのミスはルールを増やしすぎて、重要な要件が見つけにくくなることです。最重要の制約はタスク説明や出力形式の近くに配置します。

再利用テンプレートや例の中に、パスワード、秘密情報、秘密鍵、不要な個人情報を入れないでください。変数を使うとプロンプトは管理しやすくなりますが、変数自体がアクセス制御やデータ保護を提供するわけではありません。

最後に、プロンプトの検証と結果の検証を区別します。すべての変数が正しく挿入されたことを確認するのは、プロンプト生成処理の検証です。それだけではAIの回答が事実として正しいかは確認できません。結果に事実、計算、分類、判断が含まれる定型作業では、プロンプト用チェックリストと別に出力確認用チェックリストも管理します。

実行・検証の記録

2026-09-21 · hand-checked example · Python 3.12

  • 合成weekly_summaryテンプレートで、必須変数がproject、audience、log_textの3つだけであることを確認しました。
  • 例の値に、必須変数3つであるAtlas、engineering team、4行の合成作業ログがすべて含まれていることを確認しました。
  • 選択したテンプレートで使われるstring.Templateのプレースホルダーが、必須変数名と一致することを確認しました。
  • 選択した合成テンプレートの出力先がoutputs/weekly_summary_prompt.txtになることを確認しました。
  • 必要に応じてoutputsディレクトリを作成し、出力ファイルがすでに存在する場合は上書きせず停止する構成であることを確認しました。
  • 合成テンプレートにタスク指示、ルール、出力例、チェックリスト、変数として渡す元テキストが含まれていることを確認しました。
  • 例の内容が合成データであり、実際の業務記録を表すものとして記述されていないことを確認しました。
検証範囲の限界
  • Pythonコードは実行していません。制御フローと小さな合成例はコードを読んで確認しました。
  • プロンプトが正しく生成されても、AIチャットアシスタントがすべての指示に従うことを保証するものではありません。
  • この例ではテンプレートをPython内に直接保存しています。規模が大きくなる場合は、別ファイル、メタデータ、テスト、バージョン管理が必要になることがあります。
  • このスクリプトは必須値の欠落を確認しますが、変数の型、機密情報、出力品質について高度な検証は行いません。

サイト全体の執筆・検証方針

参考資料

説明と例は独自に作成しました。関連する動作や概念は、以下の公式資料で確認できます。