T-CREATOR

Cline プロンプト設計チートシート:役割・制約・出力フォーマットの定石

Cline プロンプト設計チートシート:役割・制約・出力フォーマットの定石

AI エージェント Cline を効果的に使いこなすには、プロンプト設計の「定石」を知ることが重要です。将棋や囲碁に定石があるように、プロンプトにも繰り返し使える効果的なパターンが存在します。

この記事では、プロンプトを構成する「役割・制約・出力フォーマット」という 3 つの要素について、実践的な定石パターンを体系的にまとめました。まずはチートシートで全体像を把握し、その後の詳細解説と実践例で理解を深められます。

チートシート:プロンプト設計の定石

このチートシートは、Cline に指示を出す際にすぐに参照できる定石一覧です。各要素の定石パターンと具体例を表形式で整理しています。

役割(Role)の定石

役割では、AI にどのような専門性や立場で振る舞ってほしいかを定義します。これにより出力のトーンやレベル感が決まります。

分類定石パターン具体例
宣言形式「あなたは〇〇に精通した △△ です」あなたは TypeScript に精通したシニアエンジニアです
専門領域技術分野を明示するフロントエンド / バックエンド / DevOps / データサイエンス
経験レベルレベル感を指定するシニア / ミドル / ジュニア / アーキテクト / テックリード
複数役割「〇〇かつ △△」で複合的に指定React と TypeScript に精通したシニアフロントエンドエンジニア

制約(Constraints)の定石

制約では、守るべきルールや前提条件を列挙します。これにより不要な提案や誤った実装を防げます。

分類定石パターン具体例
技術スタックバージョンを含めて明示Next.js 14 / React 18 / Node.js 20 / TypeScript 5.3
コーディング規約禁止事項を箇条書きany 型禁止 / var 使用禁止 / ESLint エラーゼロ
設計原則遵守すべき原則を列挙RESTful 設計 / DRY 原則 / SOLID 原則
環境・前提実行環境や依存関係を指定サーバーコンポーネント前提 / SSR 対応必須

出力フォーマット(Format)の定石

出力フォーマットでは、結果をどのような形式で返してほしいかを明記します。これにより出力の一貫性が保たれ、後続処理や自動化がしやすくなります。

分類定石パターン具体例
構造化番号付きリストでセクション指定1. 概要 / 2. コード / 3. 使用例
コード形式言語指定とコメント必須TypeScript のコードブロック(コメント付き)
ドキュメントMarkdown 形式で構造化見出し・箇条書き・表を活用
データ形式機械可読な形式を指定JSON / YAML / CSV

基本テンプレート

この基本テンプレートは、3 つの要素を組み合わせたプロンプトの雛形です。用途に応じて [ ] 内を書き換えるだけで、高品質なプロンプトが完成します。

text# 役割
あなたは [専門領域] に精通した [経験レベル] エンジニアです。

# 制約
- [技術スタック] を使用
- [バージョン] を前提とする
- [コーディング規約] を遵守
- [禁止事項] は使用しない

# 出力フォーマット
1. [セクション1]
2. [セクション2]
3. [セクション3]

# タスク
[具体的な指示内容]

背景

プロンプト設計において「定石」を理解することは、Cline を効率的に活用するための第一歩です。ここでは、なぜ定石が必要なのか、そしてプロンプトを構成する 3 要素とは何かを解説します。

なぜ「定石」が必要なのか

Cline に指示を出す際、毎回ゼロから考えるのは非効率です。将棋や囲碁に「定石」があるように、プロンプト設計にも繰り返し使える効果的なパターンが存在します。

定石を知ることで得られるメリットは以下の通りです。

  • 再現性の向上:同じ品質の出力を安定して得られる
  • 時間の短縮:毎回考える必要がなく、すぐに実践できる
  • チーム共有:定石を共有することで、チーム全体の生産性が向上

この定石を知ることで、誰でも安定して高品質な出力を得られるようになります。

プロンプト設計の 3 要素

優れたプロンプトには、必ず以下の 3 要素が含まれています。この 3 要素を意識的に設計することで、Cline からの出力品質が劇的に向上します。

mermaidflowchart TD
  prompt["構造化プロンプト"] --> role["役割(Role)<br/>AI の人格・専門性"]
  prompt --> constraints["制約(Constraints)<br/>守るべきルール"]
  prompt --> format["出力フォーマット(Format)<br/>結果の構造"]
  role --> quality["高品質な出力"]
  constraints --> quality
  format --> quality

図の要点:プロンプトを役割・制約・フォーマットの 3 要素に分解することで、再現性の高い指示が可能になります。

定石が解決する課題

プロンプト設計の定石を知らないと、曖昧な指示や前提条件の欠如により、期待外れの出力や意図しない実装が生じます。ここでは、定石なしで起こりがちな失敗パターンと、定石を適用した改善例を紹介します。

定石なしの失敗パターン

定石を知らないと、以下のような問題が頻発します。各パターンの原因と結果を理解することで、定石の重要性が明確になります。

失敗パターン原因結果
曖昧な指示役割が不明確期待外れの出力
前提条件の欠如制約が不足意図しない実装
出力形式の不統一フォーマット未指定再利用困難

具体例

  • 悪い例:「TypeScript のコードを書いて」
    • 問題:関数なのか、クラスなのか、バージョンは何か、すべてが不明
  • 良い例:「TypeScript 5.3 で、ユーザー認証を行う非同期関数を作成してください」
    • 定石適用:バージョン指定、機能明示、実装形式の指定

定石の詳細解説

ここからは、冒頭のチートシートで紹介した 9 つの定石を、より詳しく解説します。各定石のパターン、使い方、効果を理解することで、実践的にプロンプトを設計できるようになります。

役割(Role)の定石パターン

役割の定石では、AI にどのような専門性や立場で振る舞ってほしいかを定義します。宣言形式、専門領域、経験レベルの 3 つの観点から定石を紹介します。

定石 1:宣言形式を統一する

パターン:「あなたは〇〇に精通した △△ です」

この形式を使うことで、AI に明確な人格を与えられます。

良い例

textあなたは TypeScript に精通したシニアフロントエンドエンジニアです。

悪い例

textTypeScript のコードを書いてください。

定石 2:専門領域を明示する

専門領域を明示することで、AI が持つべき知識の範囲が明確になります。フロントエンド、バックエンド、DevOps など、タスクに応じて適切な専門領域を指定しましょう。

専門領域効果使い分け
フロントエンドUI/UX、React、Vue に強いコンポーネント設計時
バックエンドAPI、DB、サーバー処理に強いエンドポイント実装時
DevOpsインフラ、CI/CD に強いデプロイ設定時
データサイエンス分析、機械学習に強いデータ処理時

定石 3:経験レベルを指定する

経験レベルを指定することで、出力の詳細度や説明の深さが調整されます。プロダクション品質が必要な場合はシニア、標準的な実装ならミドルを選びましょう。

レベル出力の特徴使い分け
シニアベストプラクティス重視、詳細な説明プロダクション品質が必要な時
ミドルバランスの取れた実装標準的な実装が必要な時
アーキテクト設計思想・全体構造重視システム設計時

制約(Constraints)の定石パターン

制約の定石では、守るべきルールや前提条件を列挙します。技術スタックのバージョン、禁止事項、設計原則の 3 つの観点から定石を紹介します。

定石 4:技術スタックはバージョン付きで明示

パターン:「[技術名] [バージョン] を使用」

技術スタックにバージョンを含めることで、API の違いや非推奨機能の使用を防げます。特にメジャーバージョンが異なると動作が大きく変わる技術では必須です。

text- Next.js 14 の App Router を使用
- React 18 の Server Components を前提
- TypeScript 5.3 の型システムを活用

定石 5:禁止事項を箇条書きで列挙

パターン:「〇〇は使用禁止」

禁止事項を明示することで、コード品質の低下やバグの混入を防げます。プロジェクトのコーディング規約に合わせて設定しましょう。

text- `any` 型は使用禁止
- `var` キーワードは使用禁止
- 外部ライブラリの追加は禁止

定石 6:設計原則を明示

パターン:「〇〇の原則を遵守」

設計原則を明示することで、保守性や拡張性の高いコードが生成されます。RESTful、DRY、SOLID など、プロジェクトの方針に合わせて指定しましょう。

text- RESTful な設計を遵守
- DRY 原則(Don't Repeat Yourself)を徹底
- SOLID 原則に基づいた設計

出力フォーマット(Format)の定石パターン

出力フォーマットの定石では、結果をどのような形式で返してほしいかを指定します。構造化、コードブロック、データ形式の 3 つの観点から定石を紹介します。

定石 7:構造化された形式を指定

パターン:番号付きリストでセクションを明示

構造化された形式を指定することで、出力の一貫性が保たれます。概要・コード・使用例など、必要なセクションを番号付きリストで明示しましょう。

text以下の形式で出力してください:

1. 概要(2〜3 文)
2. 実装コード(TypeScript、コメント付き)
3. 使用例(具体的なコード例)
4. 注意点(箇条書き)

定石 8:コードブロックは言語指定必須

パターン:「[言語] のコードブロック」

コードブロックには必ず言語を指定しましょう。これによりシンタックスハイライトが適用され、コードの可読性が向上します。

textTypeScript のコードブロックで出力し、各行にコメントを付けてください。

定石 9:データ形式を明示

データ形式を明示することで、機械的な処理や自動化がしやすくなります。JSON、YAML、CSV など、用途に応じて適切な形式を指定しましょう。

形式用途定石パターン
JSONAPI レスポンス、設定ファイル「JSON 形式で出力」
YAMLCI/CD 設定、K8s マニフェスト「YAML 形式で出力」
Markdownドキュメント、README「Markdown 形式で、見出しと箇条書きを使用」

定石の組み合わせパターン

ここまで紹介した 9 つの定石を組み合わせることで、より強力なプロンプトが完成します。役割・制約・フォーマットの各要素から適切な定石を選び、組み合わせましょう。

mermaidflowchart LR
  role["役割定石<br/>専門性×レベル"] --> combined["組み合わせプロンプト"]
  constraints["制約定石<br/>技術スタック×規約"] --> combined
  format["フォーマット定石<br/>構造×言語"] --> combined
  combined --> output["高品質な出力"]

図の要点:各要素の定石を組み合わせることで、再現性の高い強力なプロンプトが完成します。

定石を適用した実践例

ここからは、チートシートの定石を実際のプロンプトに適用した例を紹介します。各例では、どの定石を使っているかを明示し、定石適用前と適用後の違いを比較できます。

例 1:React コンポーネント生成

React コンポーネント生成では、役割にフロントエンドの専門性、制約にバージョンと禁止事項、フォーマットに構造化を適用しています。

適用した定石

要素適用した定石
役割定石 1(宣言形式)+ 定石 2(専門領域:フロントエンド)+ 定石 3(レベル:シニア)
制約定石 4(バージョン明示)+ 定石 5(禁止事項列挙)
フォーマット定石 7(構造化)+ 定石 8(言語指定)

プロンプト

text# 役割(定石1+2+3)
あなたは React と TypeScript に精通したシニアフロントエンドエンジニアです。

# 制約(定石4+5)
- React 18 の関数コンポーネントを使用
- TypeScript 5.3 で型安全に実装
- `any` 型は使用禁止
- Props の型定義を必ず含める

# 出力フォーマット(定石7+8)
1. コンポーネントの概要(2〜3 文)
2. TypeScript のコードブロック(コメント付き)
3. 使用例(コメント付き)

# タスク
ユーザー情報を表示する `UserCard` コンポーネントを作成してください。
Props は `name`(文字列)、`age`(数値)、`email`(文字列)とします。

Cline の出力例

概要

UserCard コンポーネントは、ユーザーの名前、年齢、メールアドレスを受け取り、カード形式で表示するシンプルなコンポーネントです。Props は厳密に型付けされており、TypeScript の型安全性を保ちます。

実装

typescript// UserCard.tsx
import React from 'react';

// Props の型定義
interface UserCardProps {
  name: string;
  age: number;
  email: string;
}

// コンポーネント本体
export const UserCard: React.FC<UserCardProps> = ({
  name,
  age,
  email,
}) => {
  return (
    <div className='user-card'>
      <h2>{name}</h2>
      <p>年齢: {age}</p>
      <p>メール: {email}</p>
    </div>
  );
};

使用例

typescript// App.tsx
import React from 'react';
import { UserCard } from './UserCard';

const App: React.FC = () => {
  return (
    <div>
      {/* UserCard コンポーネントを使用 */}
      <UserCard
        name='田中太郎'
        age={28}
        email='tanaka@example.com'
      />
    </div>
  );
};

export default App;

例 2:API エンドポイント設計

API エンドポイント設計では、役割にバックエンドの専門性、制約に設計原則、フォーマットに表形式を適用しています。

適用した定石

要素適用した定石
役割定石 1(宣言形式)+ 定石 2(専門領域:バックエンド)
制約定石 4(バージョン明示)+ 定石 6(設計原則)
フォーマット定石 7(構造化)+ 定石 8(言語指定)

プロンプト

text# 役割(定石1+2)
あなたは Node.js と Express に精通したバックエンドエンジニアです。

# 制約(定石4+6)
- Express 4.x を使用
- TypeScript 5.3 で実装
- RESTful な設計を遵守
- エラーハンドリングを含める
- ステータスコードを適切に設定

# 出力フォーマット(定石7+8)
1. エンドポイントの仕様(メソッド、パス、リクエスト・レスポンス形式)
2. TypeScript のコードブロック(コメント付き)
3. エラーケースの説明(表形式)

# タスク
ユーザー情報を取得する GET エンドポイント `/api/users/:id` を実装してください。

Cline の出力例

エンドポイント仕様

  • メソッド: GET
  • パス: ​/​api​/​users​/​:id
  • リクエスト: パスパラメータ id(ユーザー ID)
  • レスポンス: JSON 形式でユーザー情報を返す

実装

typescript// routes/users.ts
import { Router, Request, Response } from 'express';

// ユーザー型の定義
interface User {
  id: number;
  name: string;
  email: string;
}

// ダミーデータ(実際は DB から取得)
const users: User[] = [
  { id: 1, name: '田中太郎', email: 'tanaka@example.com' },
  { id: 2, name: '佐藤花子', email: 'sato@example.com' },
];

const router = Router();

// GET /api/users/:id
router.get('/users/:id', (req: Request, res: Response) => {
  // パスパラメータから ID を取得
  const userId = parseInt(req.params.id, 10);

  // 数値変換の検証
  if (isNaN(userId)) {
    return res
      .status(400)
      .json({ error: 'Invalid user ID' });
  }

  // ユーザーを検索
  const user = users.find((u) => u.id === userId);

  // ユーザーが見つからない場合
  if (!user) {
    return res
      .status(404)
      .json({ error: 'User not found' });
  }

  // 成功レスポンス
  return res.status(200).json(user);
});

export default router;

エラーケース

#ケースステータスコードレスポンス
1ID が数値でない400{ "error": "Invalid user ID" }
2ユーザーが存在しない404{ "error": "User not found" }
3成功200ユーザー情報の JSON

例 3:コードレビュー依頼

コードレビュー依頼では、役割にシニアレベルの経験、制約にベストプラクティス、フォーマットに構造化を適用しています。

適用した定石

要素適用した定石
役割定石 1(宣言形式)+ 定石 3(レベル:シニア)
制約定石 6(設計原則:ベストプラクティス)
フォーマット定石 7(構造化)+ 定石 8(言語指定)

プロンプト

text# 役割(定石1+3)
あなたはコードレビューに精通したシニアエンジニアです。

# 制約(定石6)
- TypeScript のベストプラクティスに基づいて評価
- パフォーマンス、可読性、保守性の観点から指摘
- 具体的な改善案を提示

# 出力フォーマット(定石7+8)
1. 総評(2〜3 文)
2. 指摘事項(箇条書き、各項目に改善案を含める)
3. 改善後のコード例(TypeScript、コメント付き)

# タスク
以下のコードをレビューしてください。

\`\`\`typescript
function calc(a, b) {
  return a + b;
}
\`\`\`

Cline の出力例

総評

このコードは動作しますが、型安全性が欠如しており、TypeScript の利点を活かせていません。関数名も抽象的すぎるため、可読性が低いです。

指摘事項

  • 型定義の欠如:引数と戻り値に型が付いていません。number 型を明示すべきです。
  • 関数名が不明瞭calc という名前では何を計算するのか分かりません。add などに変更しましょう。
  • ドキュメントコメントの欠如:JSDoc コメントを追加すると、IDE の補完や可読性が向上します。

改善後のコード

typescript/**
 * 2 つの数値を加算します。
 * @param a - 1 つ目の数値
 * @param b - 2 つ目の数値
 * @returns 加算結果
 */
function add(a: number, b: number): number {
  return a + b;
}

定石適用の効果比較

3 つの例で定石を適用することで、以下の効果が得られました。定石なしと定石ありを比較すると、品質・信頼性・実用性が大きく向上していることが分かります。

定石なし定石あり改善効果
例 1(React)曖昧なコンポーネント型安全で再利用可能なコンポーネント品質向上、保守性向上
例 2(API)エラーハンドリング不足RESTful で堅牢な API信頼性向上、一貫性確保
例 3(レビュー)表面的な指摘具体的な改善案付きレビュー実用性向上、学習効果

以下の図は、定石適用によるプロンプト品質の向上を示しています。

mermaidflowchart LR
  before["定石なし<br/>曖昧なプロンプト"] --> apply["定石適用"]
  apply --> after["定石あり<br/>明確なプロンプト"]
  after --> result1["再現性向上"]
  after --> result2["品質向上"]
  after --> result3["保守性向上"]

図の要点:定石を適用することで、プロンプトの再現性・品質・保守性が向上します。

まとめ

この記事では、Cline のプロンプト設計における「役割・制約・出力フォーマット」の定石を体系的に紹介しました。9 つの定石パターンを理解し、実践することで、Cline から安定して高品質な出力を得られるようになります。

定石の要点

3 つの要素それぞれの主な定石と効果をまとめます。これらを組み合わせることで、再現性の高いプロンプトが完成します。

要素主な定石効果
役割宣言形式統一、専門領域明示、レベル指定AI の人格と専門性を明確化
制約バージョン明示、禁止事項列挙、設計原則不要な提案を防ぎ、品質を保証
フォーマット構造化、言語指定、データ形式明示出力の一貫性と再利用性を確保

実践のステップ

定石を効果的に活用するための 4 つのステップを紹介します。まずは 1 つの定石から試し、徐々に組み合わせを増やしていきましょう。

  1. チートシートを保存:冒頭の定石一覧を手元に置く
  2. テンプレートを作成:よく使うパターンをテンプレート化
  3. 定石を組み合わせる:タスクに応じて最適な定石を選択
  4. 改善を繰り返す:結果を見ながらプロンプトを調整

この定石を使いこなすことで、Cline とのコミュニケーションが格段にスムーズになり、開発効率が大きく向上します。まずは簡単な定石から試してみてください。

関連リンク