- AI ⚙️
プロンプトの管理方法|バージョン管理と共有の管理表テンプレート
プロンプトの管理方法は、少人数なら管理表、変更が多くなったらGitでのファイル管理、という2段階で考えると決めやすくなります。 どちらの場合も、ID・版・変更理由・確認者を残すことが共通の土台です。
この記事では、表計算ソフトにそのまま貼れる管理表のテンプレートと記入例、版番号の付け方、Gitで管理するときのディレクトリ構成とプロンプトファイルの形式、変数を埋め込んで読み込むPythonのコードを、実行結果と一緒に載せます。
確認環境:Ubuntu 24.04 / Python 3.11.15 / PyYAML 6.0.3 / Git 2.43.0 / LibreOffice Calc 24.2.7(管理表の貼り付け確認)。確認日 2026-10-06。モデルの呼び出しは行わず、プロンプトの読み込みと変数の埋め込みまでを実行しています。モデル名は「モデルA」「モデルB」と書いているので、使うときは実際のモデルIDに置き換えてください。
この記事の結論
- 3人くらいまで・変更が月に数回なら、表計算ソフトの管理表で足りる。
- 変更が週に何度もある、またはプログラムから読み込むなら、1プロンプト1ファイルにしてGitで管理する。
- 版番号は3つの数字で付け、文言修正と出力が変わる修正を分ける。
- 変更するときは、理由・確認した入力・確認者を必ず残す。
管理方法の早見表
| 観点 | 管理表(表計算ソフト) | Gitでのファイル管理 | 専用ツール |
|---|---|---|---|
| 向く人数 | 1〜3人くらい | 開発者を含むチーム | 複数のチーム、開発者以外も編集する体制 |
| 向く変更頻度 | 月に数回 | 週に何度も | 日々 |
| 履歴の残り方 | 行を足して残す(手作業) | コミットごとに自動で残る | ツールの機能による |
| 差分の確認 | 目で見比べる | git diff で文字単位まで見られる |
ツールの機能による |
| レビュー | 確認者の列に名前を書く | プルリクエストで行う | ツールの機能による |
| プログラムからの読み込み | 手で貼り付ける | ファイルを読み込む | ツールのAPIによる |
| 始めるまでの手間 | すぐ | リポジトリと決まりごとの用意 | 選定と導入が必要 |
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「プロンプトの管理方法|バージョン管理と共有の管理表テンプレート」
専用ツールは製品ごとに機能が異なるため、この記事では管理表とGitの2つを詳しく扱います。
どれを選ぶかの判断基準
| 条件 | 選ぶもの |
|---|---|
| 使う人が自分だけ、または2〜3人 | 管理表 |
| プロンプトをチャット画面に貼って使う | 管理表 |
| プロンプトをプログラムから読み込む | Git |
| 同じプロンプトを同時に2人以上が直す | Git |
| 変更前の版にすぐ戻したい | Git |
| 変更のたびに別の人の確認を必ず通したい | Git(プルリクエスト) |
| 開発者以外が日々編集し、実行記録も一緒に見たい | 専用ツールを検討 |
管理表から始めて、IDと版の付け方をそのままGitへ持っていけるように、最初から同じ項目名で記録しておくのがおすすめです。
管理表テンプレート(タブ区切り)
見出し行だけのタブ区切りテキストです。ファイルに保存して表計算ソフトで開くか、A1セルに貼り付けて使います。
ID 用途 本文 変数 対応モデル 版 変更理由 確認者 更新日 状態
| 列 | 書く内容 | 記入の決まり |
|---|---|---|
| ID | プロンプトを一意に指す記号 | 種類の略号+連番(SUM-001)。一度付けたら変えない |
| 用途 | 何のために使うか | 「何から何を作るか」を1行で |
| 本文 | プロンプトの全文 | 差し替える部分は {{変数名}} と書く |
| 変数 | 本文で差し替える項目 | 本文の {{ }} と同じ名前をカンマ区切りで |
| 対応モデル | 動作を確かめたモデル | 確かめたものだけを書く |
| 版 | 版番号 | 3つの数字(1.2.0)。付け方は次の章 |
| 変更理由 | なぜ変えたか | 何を変えたか+理由+修正の種類 |
| 確認者 | 出力を確かめた人 | 書いた本人以外の名前 |
| 更新日 | その版にした日 | YYYY-MM-DD |
| 状態 | 使ってよいか | 利用中/確認中/終了 |
記入例
| ID | 用途 | 変数 | 対応モデル | 版 | 変更理由 | 確認者 | 更新日 | 状態 |
|---|---|---|---|---|---|---|---|---|
| SUM-001 | 会議メモの要約 | meeting_title, transcript | モデルA、モデルB | 1.1.0 | 宿題に担当と期限を付けるようにした(出力が変わる修正) | 鈴木 | 2026-09-20 | 利用中 |
| REV-001 | SQLレビュー | dialect, sql | モデルA | 1.0.0 | 新規作成 | 佐藤 | 2026-10-06 | 利用中 |
| MAIL-001 | 問い合わせへの返信の下書き | inquiry | モデルB | 1.0.1 | 「200字程度」を「200字以内」に修正(文言修正) | 佐藤 | 2026-10-01 | 利用中 |
本文の列も含めた、貼り付け用のタブ区切りです。1行目の本文のように改行を含むセルは、全体を二重引用符で囲みます。
ID 用途 本文 変数 対応モデル 版 変更理由 確認者 更新日 状態
SUM-001 会議メモの要約 "あなたは議事録の作成担当です。次の会議の文字起こしを読み、決定事項と宿題を取り出してください。
# 会議名
{{meeting_title}}
# 文字起こし
{{transcript}}" meeting_title, transcript モデルA、モデルB 1.1.0 宿題に担当と期限を付けるようにした(出力が変わる修正) 鈴木 2026-09-20 利用中
REV-001 SQLレビュー 次の {{dialect}} のSQLをレビューしてください。指摘は重要度(高・中・低)つきの表で出してください。{{sql}} dialect, sql モデルA 1.0.0 新規作成 佐藤 2026-10-06 利用中
MAIL-001 問い合わせへの返信の下書き 次の問い合わせに対する返信の下書きを、です・ます調で200字以内で書いてください。{{inquiry}} inquiry モデルB 1.0.1 「200字程度」を「200字以内」に修正(文言修正) 佐藤 2026-10-01 利用中
このブロックをファイルに保存して LibreOffice Calc 24.2 で開き、見出しを含めて4行×10列に分かれること、改行入りの本文が1つのセルに収まることを確かめました。
履歴の残し方(管理表の場合)
管理表では、版を上げるときに行を上書きせず、同じIDで新しい行を足します。 以前の行は状態を「終了」に変えます。こうすると、同じIDで並べ替えるだけで変更の流れを追えます。
版番号の付け方:文言修正と出力が変わる修正を分ける
版番号は「1.2.0」のように3つの数字で付けます。ソフトウェアで広く使われているセマンティック バージョニング 2.0.0 は、互換性のない変更でメジャー、後方互換性のある機能追加でマイナー、後方互換性のあるバグ修正でパッチを上げる、と定めています。これをプロンプトに当てはめると次のようになります。
| 上げる数字 | 修正の種類 | 例 | 使う側への影響 |
|---|---|---|---|
| 3つ目(1.2.0 → 1.2.1) | 文言修正 | 誤字の修正、言い回しの調整、補足の追加 | 出力の形も内容のねらいも変わらない |
| 2つ目(1.2.1 → 1.3.0) | 出力が変わる修正 | 条件の追加、例の差し替え、出力の項目を増やす | 出力の内容が変わる。呼び出し方は同じ |
| 1つ目(1.3.0 → 2.0.0) | 呼び出し方が変わる修正 | 変数の追加・削除・改名、出力形式の変更 | 呼び出し側のコードや手順の直しが必要 |
迷ったときの判断基準は次のとおりです。
| 確認すること | 答え | 上げる数字 |
|---|---|---|
| 変数の名前や数、出力の形式が変わるか | はい | 1つ目 |
| 同じ入力に対する出力の内容を変えるつもりか | はい | 2つ目 |
| どちらでもない | — | 3つ目 |
文言修正のつもりでも出力が変わることがあります。3つ目を上げる場合も、決めた入力で出力を見比べてから版を確定します。
Gitで管理する:ディレクトリ構成
1プロンプトを1ファイルにし、用途ごとのフォルダに分けます。
prompt-library/
├── CHANGELOG.md 変更履歴
├── prompts/
│ ├── summary/
│ │ └── meeting-minutes.md SUM-001 会議メモの要約
│ └── review/
│ └── sql-review.md REV-001 SQLレビュー
└── tools/
├── render.py 読み込みと変数の埋め込み
└── check_all.py 全ファイルの点検
| 決めること | この例での決まり |
|---|---|
| ファイル名 | 英小文字とハイフン。版番号や日付は入れない(版はファイルの中とGitで持つ) |
| フォルダ | 用途ごと(summary、review など)。IDの略号と対応させる |
| 1ファイルの中身 | 先頭にメタ情報、その下に本文 |
| 版の印 | ID/v版番号 のタグ(SUM-001/v1.2.0) |
YAMLのメタ情報つきプロンプトファイル
ファイルの先頭を --- で囲み、管理表と同じ項目をYAMLで書きます。その下が本文です。
---
id: SUM-001
name: 会議メモの要約
purpose: 会議の文字起こしから決定事項と宿題を取り出す
version: "1.2.0"
models: [モデルA, モデルB]
variables:
- meeting_title
- transcript
- max_items
owner: 佐藤
reviewer: 鈴木
updated: "2026-10-06"
---
あなたは議事録の作成担当です。次の会議の文字起こしを読み、決定事項と宿題を取り出してください。
# 会議名
{{meeting_title}}
# 文字起こし
{{transcript}}
# 出力形式
次のJSONだけを出力してください。各配列は最大 {{max_items}} 件です。
{"decisions": ["..."], "todos": [{"who": "...", "what": "...", "due": "..."}]}
# 条件
- 文字起こしに無い内容は書かないでください。
- 担当や期限が読み取れない場合は "不明" と書いてください。
version と updated を引用符で囲んでいるのには理由があります(「確かめて分かったこと」で実行結果を示します)。
変数を埋め込んで読み込むPythonコード
プロンプトファイルを読み、メタ情報を確かめ、{{変数名}} を値に置き換えます。宣言した変数・本文の変数・渡した変数の3つが一致しないときはエラーにするのが要点です。
# tools/render.py
"""プロンプトファイルを読み込み、変数を埋め込んで返す"""
import re
import sys
from pathlib import Path
import yaml
PLACEHOLDER = re.compile(r"\{\{\s*([a-z_][a-z0-9_]*)\s*\}\}")
REQUIRED = ["id", "name", "purpose", "version", "models", "variables", "owner", "reviewer", "updated"]
def load(path: str | Path) -> tuple[dict, str]:
"""先頭のメタ情報(--- で囲んだYAML)と本文に分けて返す"""
text = Path(path).read_text(encoding="utf-8")
if not text.startswith("---\n"):
raise ValueError(f"{path}: 先頭に --- がありません")
_, front, body = text.split("---\n", 2)
meta = yaml.safe_load(front)
missing = [k for k in REQUIRED if k not in meta]
if missing:
raise ValueError(f"{path}: メタ情報に不足があります {missing}")
if not isinstance(meta["version"], str):
raise ValueError(f"{path}: version は引用符で囲んでください(読み込んだ値: {meta['version']!r})")
used = set(PLACEHOLDER.findall(body))
declared = set(meta["variables"])
if used != declared:
raise ValueError(
f"{path}: 変数の宣言と本文が合いません "
f"本文だけにある={sorted(used - declared)} 宣言だけにある={sorted(declared - used)}"
)
return meta, body.strip() + "\n"
def render(path: str | Path, **values: str) -> str:
meta, body = load(path)
declared = set(meta["variables"])
given = set(values)
if given != declared:
raise ValueError(
f"{meta['id']} v{meta['version']}: 渡した変数が合いません "
f"不足={sorted(declared - given)} 余分={sorted(given - declared)}"
)
return PLACEHOLDER.sub(lambda m: str(values[m.group(1)]), body)
if __name__ == "__main__":
path = sys.argv[1]
meta, _ = load(path)
print(f"# {meta['id']} {meta['name']} v{meta['version']} 変数={meta['variables']}")
print(render(
path,
meeting_title="備品予約システム 定例",
transcript="佐藤:予約の上限は1人3件にします。鈴木:画面の修正は私が金曜までに行います。",
max_items=5,
))
$ python3 tools/render.py prompts/summary/meeting-minutes.md
# SUM-001 会議メモの要約 v1.2.0 変数=['meeting_title', 'transcript', 'max_items']
あなたは議事録の作成担当です。次の会議の文字起こしを読み、決定事項と宿題を取り出してください。
# 会議名
備品予約システム 定例
# 文字起こし
佐藤:予約の上限は1人3件にします。鈴木:画面の修正は私が金曜までに行います。
# 出力形式
次のJSONだけを出力してください。各配列は最大 5 件です。
{"decisions": ["..."], "todos": [{"who": "...", "what": "...", "due": "..."}]}
# 条件
- 文字起こしに無い内容は書かないでください。
- 担当や期限が読み取れない場合は "不明" と書いてください。
変数を1つ渡し忘れた場合は、IDと版つきで知らせます。
>>> render('prompts/summary/meeting-minutes.md', meeting_title='定例', transcript='...')
ValueError: SUM-001 v1.2.0: 渡した変数が合いません 不足=['max_items'] 余分=[]
全ファイルをまとめて点検する
# tools/check_all.py
"""prompts/ 以下のすべてのプロンプトファイルを点検し、一覧を出す"""
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent))
from render import load
ok = True
ids: dict[str, Path] = {}
for path in sorted(Path("prompts").rglob("*.md")):
try:
meta, body = load(path)
if meta["id"] in ids:
raise ValueError(f"{path}: id {meta['id']} が {ids[meta['id']]} と重複しています")
ids[meta["id"]] = path
print(f"OK {meta['id']} v{meta['version']} {len(body)}字 {path}")
except ValueError as e:
ok = False
print(f"NG {e}")
sys.exit(0 if ok else 1)
$ python3 tools/check_all.py
OK REV-001 v1.0.0 67字 prompts/review/sql-review.md
OK SUM-001 v1.2.0 291字 prompts/summary/meeting-minutes.md
本文に {{meeting_date}} を足して、メタ情報の variables に書き忘れた状態で実行すると、次のように知らせて終了コード1で終わります。コミット前や自動チェックで流すと、宣言の書き忘れに気づけます。
$ python3 tools/check_all.py
OK REV-001 v1.0.0 67字 prompts/review/sql-review.md
NG prompts/summary/meeting-minutes.md: 変数の宣言と本文が合いません 本文だけにある=['meeting_date'] 宣言だけにある=[]
Gitでの変更手順と差分の見方
文言修正(1.2.0 → 1.2.1)を例にした手順です。
# 1. 本文と version を直す
# 2. 点検する
python3 tools/check_all.py
# 3. 差分を文字単位で確かめる
git diff --word-diff-regex=. -U0
# 4. コミットして、版のタグを付ける
git commit -am "SUM-001 v1.2.1: 「宿題」に補足を追加(文言修正)"
git tag SUM-001/v1.2.1
手順3の出力です。足した文字は {+ +}、消した文字は [- -] で示されます。
@@ -5 +5 @@ purpose: 会議の文字起こしから決定事項と宿題を取り出す
version: "1.2.[-0-]{+1+}"
@@ -15 +15 @@ updated: "2026-10-06"
あなたは議事録の作成担当です。次の会議の文字起こしを読み、決定事項と宿題{+(次にやること)+}を取り出してください。
よく使うコマンドをまとめます。いずれも上のリポジトリで実行して確かめました。
| やりたいこと | コマンド |
|---|---|
| あるプロンプトの変更の一覧を見る | git log --oneline -- prompts/summary/meeting-minutes.md |
| 2つの版の差分を文字単位で見る | git diff --word-diff-regex=. SUM-001/v1.2.0 SUM-001/v1.2.1 -- prompts/ |
| 以前の版の全文を表示する | git show SUM-001/v1.2.0:prompts/summary/meeting-minutes.md |
| 版のタグを一覧する | git tag -l |
$ git log --oneline -- prompts/summary/meeting-minutes.md
5bf86c7 SUM-001 v1.2.1: 「宿題」に補足を追加(文言修正)
bc339b1 SUM-001 v1.2.0, REV-001 v1.0.0 を登録
変更履歴の書き方
コミットメッセージは1行で「ID・版・何をしたか・修正の種類」を書き、理由と確認の内容は CHANGELOG.md に残します。
# 変更履歴
## SUM-001 会議メモの要約
### 1.2.0 - 2026-10-06
- 種類: 出力が変わる修正
- 変更: 各配列の上限を変数 max_items で指定できるようにした
- 理由: 長い会議で宿題が20件を超え、画面に収まらなかったため
- 確認: テスト用の文字起こし3本で、件数が上限以内になることを確認(確認者: 鈴木)
| 項目 | 書く内容 | 書き方の例 |
|---|---|---|
| 種類 | 文言修正/出力が変わる修正/呼び出し方が変わる修正 | 出力が変わる修正 |
| 変更 | 何をどう変えたか | 上限を変数で指定できるようにした |
| 理由 | 変える前に起きていたこと | 宿題が20件を超え、画面に収まらなかった |
| 確認 | どの入力で、何を見て、誰が確かめたか | 文字起こし3本で件数を確認(鈴木) |
「改善」「調整」だけでは後から読んで分からないため、変える前に起きていたことを1つ具体的に書きます。
差分レビューの確認項目
| 番号 | 確認項目 | 見るところ |
|---|---|---|
| 1 | 版の上げ方が修正の種類と合っている | version の差分と変更履歴の「種類」 |
| 2 | 変数の宣言と本文が一致している | check_all.py の結果 |
| 3 | 変数が増減した場合、呼び出し側も直してある | 同じプルリクエスト内のコードの差分 |
| 4 | 指示どうしが食い違っていない | 追加した条件と、もとからある条件 |
| 5 | 出力形式の指定が1か所にまとまっている | 本文の「出力形式」 |
| 6 | 個人情報や社外に出せない情報が本文や例に入っていない | 追加された行 |
| 7 | 決めた入力で、変更の前後の出力を見比べてある | 変更履歴の「確認」 |
| 8 | 対応モデルの欄が、確かめたモデルだけになっている | models の差分 |
| 9 | 変更理由が「何が起きていたか」で書かれている | 変更履歴の「理由」 |
| 10 | 使われなくなったプロンプトは状態を変えてある | 管理表の状態、またはファイルの移動 |
確かめて分かったこと
- YAMLで
version: 1.10と書くと、数値の 1.1 として読み込まれた。version: 1.2.0は文字列になりましたが、数字が2つの版は小数として扱われます。版は引用符で囲み、render.py でも文字列でなければエラーにしています。 updated: 2026-10-06は日付型(datetime.date)として読み込まれた。 文字列として扱いたい場合は引用符で囲みます。enabled: noは False になりました。str.formatは、JSONの例を含むプロンプトでエラーになる。 本文に{"decisions": ["..."]}があるとKeyError: '"decisions"'が出ました。波かっこ2つの{{変数名}}を正規表現で置き換える方式なら、JSONの例をそのまま書けます。string.Templateは$を含む文でつまずく。 「費用は $100 以内」を含む本文でsubstituteを使うとValueError: Invalid placeholder in stringになりました。git diff --word-diffは、日本語の文では1文まるごとが1語として扱われた。 空白で区切られないためです。--word-diff-regex=.を付けると、足した「(次にやること)」だけが印つきで表示されました。- 埋め込んだ値の中の
{{ }}は、もう一度は置き換えられない。 変数 sql にSELECT 1; -- {{dialect}}を渡しても、その部分はそのまま出力されました。置き換えを1回で済ませているためで、入力された文で別の変数が展開されることがありません。 - 3つの数字の版(1.1.0)は、表計算ソフトに貼っても文字列のまま残った。 LibreOffice Calc で確かめました。更新日の列は日付として読み込まれます。
よくある質問
Q. プロンプトの管理方法でまず決めることは? A. IDと版の付け方です。この2つが決まれば、管理表でもGitでも同じ決まりで記録でき、後から移すときも項目をそのまま使えます。
Q. プロンプトのバージョン管理は、管理表とGitのどちらがよいですか? A. 少人数で変更が月に数回なら管理表、プログラムから読み込む場合や変更が多い場合はGitが向いています。同時に2人以上が直す、以前の版にすぐ戻したい、という条件があればGitを選びます。
Q. 文言を少し直しただけでも版を上げますか? A. はい、3つ目の数字を上げます。小さな修正でも出力が変わることがあるため、どの文面で得た出力かを後から特定できるようにしておきます。
Q. チームでプロンプトを共有するときに、変数名がそろわないときは? A. 変数の一覧をメタ情報に書き、本文と一致しなければエラーにする点検を入れます。この記事の check_all.py は、宣言と本文の食い違いを見つけて終了コード1で終わります。
Q. プロンプトの本文に改行がある場合、管理表にはどう入れますか? A. セル全体を二重引用符で囲んだタブ区切りにすると、1つのセルに入ります。本文が長くなってきたら、1プロンプト1ファイルでの管理に移す目安です。
まとめ
- プロンプトの管理は少人数なら管理表、変更が多くなったらGitで行う。
- 管理表の項目はID・用途・本文・変数・対応モデル・版・変更理由・確認者。履歴は行を足して残す。
- 版番号は3つの数字。文言修正は3つ目、出力が変わる修正は2つ目、呼び出し方が変わる修正は1つ目を上げる。
- Gitでは1プロンプト1ファイルにし、先頭にYAMLのメタ情報を置く。版は引用符で囲む。
- 読み込みのコードでは、宣言・本文・渡した値の変数が一致しないときにエラーにする。
- 日本語の差分は
git diff --word-diff-regex=.で文字単位に見る。 - 変更履歴には変える前に起きていたことと、確かめた入力・確認者を書く。
参考・出典
- セマンティック バージョニング 2.0.0 https://semver.org/lang/ja/
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「プロンプトの管理方法|バージョン管理と共有の管理表テンプレート」
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。