コーディングを効率化するLLMプロンプトテンプレート

# コーディングを効率化するLLMプロンプトテンプレート

## はじめに

最近のソフトウェア開発において、LLM（大規模言語モデル）の活用は必須スキルになりつつあります。GitHubのCopilotやChatGPTなどのAIツールを効果的に使いこなすことで、コーディング効率を大幅に向上させることができます。
本記事では、コーディングにおけるLLMの活用方法、特に効果的なプロンプトの書き方に焦点を当てて解説します。

:::note warn
この記事はclaude 3.7 sonnet extended thinkingの協力により書かれています。
:::


## 目次
1. LLMを活用したコーディングの基本
2. 効果的なプロンプトの構成要素
3. ユースケース別プロンプトテンプレート
4. 高度なプロンプト技術
5. 注意点とベストプラクティス
6. まとめ

## 1. LLMを活用したコーディングの基本

LLMをコーディングに活用する主な方法は以下の通りです：

- **コード生成**: 新規機能の実装や関数の作成
- **コード理解**: 既存コードの説明や動作解析
- **デバッグ支援**: エラーの原因特定や修正案の提案
- **リファクタリング**: 既存コードの改善や最適化
- **ドキュメント作成**: コメント生成やREADMEの作成

これらの活用法を最大化するには、「どのように質問するか」が重要です。

## 2. 効果的なプロンプトの構成要素

### 2.1 明確な指示

```
❌ 悪い例: 「ソートアルゴリズムを書いて」
✅ 良い例: 「Pythonでクイックソートアルゴリズムを実装してください。時間計算量と空間計算量も説明してください。」
```

### 2.2 コンテキスト情報の提供

````
❌ 悪い例: 「このバグを修正して」
````
````
✅ 良い例: 「以下のReactコンポーネントでuseStateの初期値が正しく設定されていないためにレンダリングエラーが発生しています。修正案を提示してください：

```jsx
function Counter() {
  const [count, setCount] = useState();
  
  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={() => setCount(count + 1)}>Increment</button>
    </div>
  );
}
```
````

### 2.3 出力形式の指定

```
❌ 悪い例: 「ユーザー認証機能を作って」
```
```
✅ 良い例: 「Node.jsとExpressでJWTを使ったユーザー認証APIを実装してください。以下の点を含めてください：
1. ユーザー登録エンドポイント
2. ログインエンドポイント
3. トークン検証ミドルウェア
4. パスワードのハッシュ化

コードとファイル構成を示してください。」
```

### 2.4 段階的な指示

複雑な問題は一度に尋ねるのではなく、段階的に解決するのが効果的です。

```
ステップ1: 「Pythonで簡単なWebスクレイピングプログラムの基本構造を作成してください」
ステップ2: 「BeautifulSoupを使用して特定のWebページから商品情報を抽出する機能を追加してください」
ステップ3: 「抽出したデータをCSVファイルに保存する機能を実装してください」
```

## 3. ユースケース別プロンプトテンプレート

### 3.1 新機能実装

```
【目的】: [実装したい機能の概要]
【言語/フレームワーク】: [使用する言語やフレームワーク]
【入力】: [入力データの形式や例]
【出力】: [期待する出力の形式や例]
【制約条件】: [パフォーマンス要件やエッジケース]
【参考情報】: [関連するドキュメントやコード]

実装例を示してください。
```

### 3.2 バグ修正

```
【問題の症状】: [発生しているエラーや期待と異なる動作]
【再現手順】: [バグが発生する手順]
【環境情報】: [OS、言語バージョン、ライブラリバージョンなど]
【該当コード】:
```コードをここに貼り付け```

このバグの原因と修正方法を教えてください。
```

### 3.3 コードレビュー

````
以下のコードをレビューしてください：

```言語名
コードをここに貼り付け
```

以下の観点で改善点を指摘してください：
- パフォーマンス
- 可読性
- セキュリティ
- テスト容易性
- ベストプラクティス
````

### 3.4 アルゴリズム最適化

````
以下のアルゴリズムを最適化したいです：

```言語名
コードをここに貼り付け
```

現在の計算量は O(n²) ですが、O(n log n) 以下に改善したいです。
どのようにリファクタリングすれば良いでしょうか？
````

## 4. 高度なプロンプト技術

### 4.1 チェーンオブソート（Chain of Thought）

複雑な問題では、LLMに思考プロセスを説明させると良い結果が得られます。

````
次のソートアルゴリズムの時間計算量を分析してください。各ステップでの考え方を詳細に説明してください。

```python
def sort_algorithm(arr):
    n = len(arr)
    for i in range(n):
        for j in range(0, n-i-1):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
    return arr
```
````

### 4.2 ロールプレイング

特定の専門家の視点でコードを分析してもらうテクニックです。

````
あなたはセキュリティの専門家です。以下のPHPコードをセキュリティの観点から分析し、脆弱性があれば指摘してください。

```php
$username = $_POST['username'];
$query = "SELECT * FROM users WHERE username = '$username'";
$result = mysqli_query($conn, $query);
```
````

### 4.3 反復的改善（Iterative Improvement）

生成されたコードを少しずつ改善していくアプローチです。

```
ステップ1: 「JavaScriptで簡単なTodoリストを実装してください」
ステップ2: 「先ほどのTodoリストにローカルストレージでの保存機能を追加してください」
ステップ3: 「UIをより使いやすくするために、ドラッグ&ドロップで順序を変更できる機能を実装してください」
```

## 5. 注意点とベストプラクティス

### 5.1 コードの検証

LLMが生成したコードは必ず検証しましょう。特に以下の点に注意が必要です：
- セキュリティの問題（入力のバリデーション不足など）
- エッジケースの処理
- ライブラリの最新バージョンとの互換性
- パフォーマンス上の問題

### 5.2 著作権への配慮

LLMは学習データに基づいてコードを生成するため、著作権の問題が生じる可能性があります。特にオープンソースライセンスとの互換性には注意しましょう。

### 5.3 プロンプト改善のサイクル

効果的なプロンプトは一度で完成するものではなく、以下のサイクルで改善していきます：
1. プロンプトの作成
2. 結果の評価
3. プロンプトの修正
4. 再試行

### 5.4 外部知識の活用

最新の技術情報やAPIの詳細情報は、LLMの知識が不完全または古い場合があります。公式ドキュメントへのリンクや最新情報を併せて確認しましょう。

## 6. まとめ

LLMを活用したコーディングでは、明確で詳細なプロンプトを書くことが成功への鍵です。以下のポイントを意識しましょう：

- 明確な指示と目的の提示
- 十分なコンテキスト情報の提供
- 期待する出力形式の指定
- 複雑な問題は段階的に解決
- 生成されたコードは必ず検証

これらの技術を駆使することで、LLMをより効果的な開発パートナーとして活用できるでしょう。

## 参考リソース

- [GitHub Copilot の効果的な使い方](https://docs.github.com/ja/copilot)
- [OpenAI の API ドキュメント](https://platform.openai.com/docs/guides/gpt)
- [プロンプトエンジニアリング ガイド](https://www.promptingguide.ai/jp)

---

この記事が皆さんのコーディング効率向上に役立てば幸いです。効果的なプロンプトの例や成功体験があれば、コメント欄でぜひ共有してください！