0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Last updated at Posted at 2025-04-29

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に指示
LangChainを使ったソースコードを生成AIに生成してもらうためのプロンプトを出力して。

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

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

生成されたプロンプト例

(モデルは4oを使用)

## 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に切り替え、上記プロンプトでソースコードを生成させます。
生成されたソースコードはこちらです。

#!/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ファイル作成
.env
OPENAI_API_KEY=your-openai-api-key-here
  1. 生成されたソースコードをmain.pyファイルとして作成
  2. 必要なライブラリをインストール
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'

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

#!/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に関しては、以下の要因でエラーが発生しやすい傾向にあります。

  • バージョンアップによる変更が激しい
  • 依存ライブラリの構成も変わりやすい

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

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

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

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?