🐂
「LLMのプロンプトエンジニアリング」から考えるプロンプトテンプレート
今回は「LLMのプロンプトエンジニアリング」を読んだ内容を踏まえ、ClaudeCodeに投げているプロンプトを考え直してみたいと思います。
全体で意識すること
- 区切りをはっきりさせる = markdownが分かりやすく良い
- 「すべきこと」「してはいけないこと」をしっかり伝える
- 「しないで」 → 「して欲しい」というように、ポジティブな表現の方が良い
- いきなり回答させないことで正答率を上げる:step by step / Plan and Solve
プロンプトの順序
- プロンプトはトークン単位に分けられた上で前から読まれていき、後戻りはできないため、なるべく重要な情報を始めに置く必要がある。
- 最後に「結局何をすれば良いのか?」を書いて目的を明確にする。
1. 導入
- 一番大事な情報を持ってくる
- 大まかな情報を示す
2. コンテキスト
- 問題解決のために必要な情報
- 関係ないコンテキストは含めすぎないように注意
3. 求めること
- 短く端的に「今回行って欲しいこと」を述べる
書いてみる
ここまでの情報を踏まえ、ClaudeCodeのためのmdファイルを考えてみましょう。
今回は「単体テストを書くためのカスタムコマンドを作成する」というテーマで進めてみます。
# 導入
このプロンプトは、**Jestを利用したフロントエンド開発における単体テストコード**を、自動生成するための指示書です。
テスト対象の仕様やコード構造を正しく反映させ、**バグを防ぎ、保守性を高めるテストコード**を得ることを目的とします。
---
# コンテキスト
## ルール
- **Jestテストコードとして記述**する
- テストは **可読性・再利用性の高い構造**にする
- 単体テストの粒度を明確にし、**副作用を持たない純粋なテスト**を作成する
- コメントやテストケース名は **機能仕様がすぐ分かる表現**を用いる
- すぐに完成コードを出さず、**Step by Stepで思考過程を分けて対応**する
---
# 求めること
以下の手順で進めてください。
1. **テスト対象コードの仕様を要約**
2. **必要なテストケース一覧を作成**
3. Jestで実装可能なテストコードを出力(`describe` と `it`/`test` を活用)
4. 実行方法と依存ライブラリの説明を追加
---
# 実行例
次のReactコンポーネント `Button.jsx` に対して、上記ルールを使ってテストコードを作成してください。
```jsx
// Button.jsx
import React from "react";
export default function Button({ label, onClick, disabled }) {
return (
<button disabled={disabled} onClick={onClick}>
{label}
</button>
);
}
…このような感じでしょうか…?
お気づきかと思いますが、今回の記事の内容をChatGPTに投げて、それを基にプロンプトを書いてもらいました。
おわりに
今回はざっくりプロンプトの書き方についてのコツをまとめ、それに沿ってmdファイルを書いてみました。
コンテキストはもっと有用な情報に絞っていく必要があり、常にアップデートの必要がありそうです。
またプロンプトはAIに対してだけでなく、人間に対しても有用な情報となるのではないでしょうか。プロンプトをタスク毎に蓄積し、AIでも人間でも誰が対応しても同じ品質で仕上がるような環境に出来たら作業の品質とスピード向上に繋がりそうです。
お読みいただきありがとうございました。
Discussion