ChatGPTでソースコードを生成するベストな方法（個人メモ）

# ChatGPTでソースコードを生成するベストな方法（個人メモ）

最近、技術検証を目的としたアプリをPythonで作成する機会が多く、ChatGPTを活用してソースコードを生成しています。
試行錯誤を続けた結果、現時点（2025年4月29日時点）では、以下の方法が最も効果的だと感じています。

※ 本記事は、ChatGPT Plus契約者向けを前提としています。

## ソースコード生成のポイント

ポイントは大きく2つです。

1. いきなりコードを生成させず、まず「コード生成用プロンプト」を試行錯誤して作成する
2. プロンプト生成には安価なモデル（`4o`）を、最終的なコード生成には高性能モデル（`o4-mini-high`または`o3`）を使い分ける

この方法により、コストを抑えながらも高品質なソースコードを得ることができています。


## ソースコード生成の流れ

全体の流れは以下の通りです。

1. 「プロンプト」を試行錯誤しながら作成（モデル：`4o`）
2. 納得できるプロンプトが完成したら、高性能モデルでソースコード生成（モデル：`o4-mini-high`または`o3`）
3. 生成されたソースコードを実行
4. エラーが出た場合は、エラーメッセージをそのままChatGPTに送信して対応






# ソースコード生成の実例

ここでは、LangChainを使ったシンプルなOpenAI APIアプリを作成する流れを紹介します。


## プロンプトの生成

試行錯誤を経て作成したプロンプトが以下です。  

(補足事項)
- 生成されるプロンプトは複数のコードブロックに分かれることが多く、それを回避するための指示も記載
- LangChainはバージョンによって仕様が大きく変わっているため、最新版を使用するように指示
- 2025年4月29日時点、ChatGPTのデフォルトの仕様として、過去の会話を参照するようになっていますが、こちらもOFFに指示

```markdown
LangChainを使ったソースコードを生成AIに生成してもらうためのプロンプトを出力して。

- 出力はMarkdown形式
- 出力は事前の説明は不要でプロンプトのみ
- 出力はprompt.mdという名称で1ファイル
- 私が過去に入力した内容は参考にしないで

### 生成するアプリケーションの前提条件や仕様
- OpenAIのAPIを使用
- dotenvを使って環境変数を管理
- OPENAIのキーは.envファイルで管理
- LangChainは最新のバージョンを使用
- 機能仕様は以下
  * ユーザーは標準入力から質問をテキストで入力
  * ユーザーが入力したテキストOpenAIのAPIを呼び出してAIに質問
  * 結果はテキストとして出力
```

### 生成されたプロンプト例

（モデルは`4o`を使用）


````markdown
## LangChain + OpenAI API を使った Python プログラムの生成プロンプト

以下の条件を満たすPythonプログラムを作成してください。

### 使用ライブラリ
- langchain（最新バージョン）
- openai
- python-dotenv

### 使用するAPI
- OpenAI API（gpt-4o など最新モデルを使用可）

### 実装仕様
- .envファイルを読み込み、APIキーを取得して利用する
- ユーザーから標準入力でテキスト質問を受け取る
- OpenAIのAPI（LangChain経由）を呼び出して、入力した質問への回答を取得する
- 回答結果を標準出力に表示する
- 必要に応じてLangChainの`ChatOpenAI`、`PromptTemplate`、`LLMChain`を活用してもよい
- APIキーは「OPENAI_API_KEY」という環境変数名で管理する

### .envファイルの例
```env
OPENAI_API_KEY=your-openai-api-key-here
```

### 注意点
- コードはシンプルかつ読みやすく記述する
- 例外処理（エラーハンドリング）を適切に追加する
- 日本語でコメントをつける
- ファイルは`main.py`という名前で作成する

### 出力ファイル
- main.py

````




## ソースコード生成

モデルを`o4-mini-high`に切り替え、上記プロンプトでソースコードを生成させます。
生成されたソースコードはこちらです。

```Python
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
main.py
LangChain + OpenAI API を使ったシンプルなチャットプログラム
"""

import os
import sys
from dotenv import load_dotenv
from langchain.chat_models import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
from openai import OpenAIError

def main():
    """プログラムのエントリポイント"""
    # .envファイルを読み込む
    load_dotenv()
    api_key = os.getenv("OPENAI_API_KEY")
    if not api_key:
        print("環境変数 OPENAI_API_KEY が設定されていません。", file=sys.stderr)
        sys.exit(1)

    try:
        # ChatOpenAI インスタンスを作成
        chat = ChatOpenAI(
            model_name="gpt-4o-mini",  # 必要に応じて最新モデルに変更可能
            temperature=0.7,
            openai_api_key=api_key
        )
        # プロンプトテンプレートを定義
        template = (
            "あなたは優秀なアシスタントです。以下のユーザーからの質問に対して、わかりやすく回答してください。\n"
            "質問: {question}\n"
            "回答:"
        )
        prompt = PromptTemplate(template=template, input_variables=["question"])
        # LLMChain を作成
        chain = LLMChain(llm=chat, prompt=prompt)

        # ユーザーからの入力を受け取る
        question = input("質問を入力してください: ")
        # 回答を取得
        answer = chain.run(question=question)
        # 回答を出力
        print("\n回答:")
        print(answer)

    except OpenAIError as e:
        # OpenAI API に関するエラー処理
        print(f"OpenAI API エラー: {e}", file=sys.stderr)
        sys.exit(1)
    except Exception as e:
        # その他の予期せぬエラー処理
        print(f"予期せぬエラーが発生しました: {e}", file=sys.stderr)
        sys.exit(1)

if __name__ == "__main__":
    main()

```


## ソースコード実行

生成されたソースコードを実行してみます。  

1. `.env`ファイル作成
```text:.env
OPENAI_API_KEY=your-openai-api-key-here
```
2. 生成されたソースコードを`main.py`ファイルとして作成
3. 必要なライブラリをインストール
```
pip install langchain openai python-dotenv
python main.py
```
4.`python main.py`で実行


## エラー対応のコツ

エラーが発生したら、エラーメッセージをそのままChatGPTに送信します。
無理に状況を説明する必要はなく、メッセージをそのまま貼る方が正確な回答が得られやすいです。

例えば以下のエラー：
```
/Users/xxx/work/python/langchain_demo01/dev-env/lib/python3.9/site-packages/urllib3/__init__.py:35: NotOpenSSLWarning: urllib3 v2 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with 'LibreSSL 2.8.3'. See: https://github.com/urllib3/urllib3/issues/3020
  warnings.warn(
Traceback (most recent call last):
  File "/Users/xxx/work/python/langchain_demo01/main.py", line 11, in <module>
    from langchain.chat_models import ChatOpenAI
  File "/Users/xxx/work/python/langchain_demo01/dev-env/lib/python3.9/site-packages/langchain/chat_models/__init__.py", line 29, in __getattr__
    from langchain_community import chat_models
ModuleNotFoundError: No module named 'langchain_community'
```

以下が最終的に生成されたソースコードです。

```python
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
main.py
LangChain + OpenAI API を使ったシンプルなチャットプログラム（LangChain版）
"""

import os
import sys
from dotenv import load_dotenv
from langchain.chat_models import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
from openai import OpenAIError

def main():
    """プログラムのエントリポイント"""
    # .env ファイルを読み込む
    load_dotenv()
    api_key = os.getenv("OPENAI_API_KEY")
    if not api_key:
        print("環境変数 OPENAI_API_KEY が設定されていません。", file=sys.stderr)
        sys.exit(1)

    try:
        # ChatOpenAI インスタンスを生成
        chat = ChatOpenAI(
            openai_api_key=api_key,
            model_name="gpt-4o-mini",  # 必要に応じて最新モデルに変更
            temperature=0.7
        )

        # プロンプトテンプレートを定義
        template = (
            "あなたは優秀なアシスタントです。\n"
            "質問: {question}\n"
            "回答:"
        )
        prompt = PromptTemplate(template=template, input_variables=["question"])

        # LLMChain を作成
        chain = LLMChain(llm=chat, prompt=prompt)

        # ユーザーからの質問を受け取る
        question = input("質問を入力してください: ")

        # 回答を取得（.run は非推奨なので .predict を使用）
        answer = chain.predict(question=question)

        # 回答を出力
        print("\n回答:")
        print(answer)

    except OpenAIError as e:
        # OpenAI API 関連のエラー処理
        print(f"OpenAI API エラー: {e}", file=sys.stderr)
        sys.exit(1)
    except Exception as e:
        # その他予期せぬエラー処理
        print(f"予期せぬエラーが発生しました: {e}", file=sys.stderr)
        sys.exit(1)

if __name__ == "__main__":
    main()

# 依存関係のインストール例:
# pip install langchain openai python-dotenv langchain-community
```


# まとめ

以上、ChatGPTによるソースコード自動生成の実践例を紹介しました。

特にLangChainに関しては、以下の要因でエラーが発生しやすい傾向にあります。
- バージョンアップによる変更が激しい
- 依存ライブラリの構成も変わりやすい

上記の特性を踏まえて、プロンプトを設計することで改善することも可能だと思います。

現状としては、ライブラリの特性等を理解して、プロンプトを工夫する必要がありますが、  
それでも、開発生産性を大きく向上させることはできています。

これからも、プロンプトの工夫やモデルの使い分けを試行錯誤しながら、よりよい方法を探っていく予定です。