目次
ChatGPTをソフトウェア開発(プログラミング)に応用する
2023年3月14日にChatGPT (GTP-4) がリリースされてから、その威力に全世界が注目するようになりました。
まだ多くの人が手さぐりで使い方を模索しているChatGPTですが、アカデミックの世界ではChatGPTの活用方法について既に研究が進んでいます。
このブログでは、論文などのエビデンスに基づいた知識をもとに、ChatGPTの応用方法を解説したいと思います。
今回は以下の論文から、ChatGPTをソフトウェア開発における製造フェーズ(プログラミング)に応用する方法についてまとめます。
WHITE, Jules, et al. ChatGPT Prompt Patterns for Improving Code Quality, Refactoring, Requirements Elicitation, and Software Design. arXiv preprint arXiv:2303.07839, 2023.
この論文では、ChatGPTを製造フェーズ(プログラミング)に応用するにあたって、以下4つのプロンプトパターンが使用できると述べられています。
- コードクラスタリングパターン
- 中間抽象パターン
- 原則に基づくコードパターン
- 隠れた仮定パターン
コードクラスタリングパターン
どんな場合に使用できるパターンか?
このパターンは、コードを特定の属性に基づいて関数やクラスなどに分離・クラスタリングすることを目的としています。例えば、純粋なコードと非純粋なコードの分離や、ビジネスロジックとデータベースアクセスの分離、HTTPリクエスト処理とビジネスロジックの分離などです。
プロンプトパターン
- スコープX内で
- Yの属性を持つコードとZの属性を持つコードを分離するようにコードを書くかリファクタリングしてください。
- Yの属性を持つコードの例です。
- Zの属性を持つコードの例です。
実装例
「コードを書く際は、ファイルシステム、データベース、ネットワークアクセスなどの副作用を持つ関数と、副作用のない関数を分離するようにしてください。」
メリットとデメリット
メリット | デメリット |
|
|
中間抽象パターン
どんな場合に使用できるパターンか?
抽象化とモジュール性は、高品質で保守性と再利用性のあるコードの基本的な要素です。このパターンは、コードを個々の関数やクラスに分割し、編集範囲を限定する方法でコードを書くことを目的としています。
プロンプトパターン
- Xの属性を持つコードを書くかリファクタリングする場合
- Yの属性を持つ他のコードを使用する場合
- (オプション)Xの属性を定義する
- (オプション)Yの属性を定義する
- XとYの間に中間抽象Zを挿入する
- (オプション)抽象Zはこれらの属性を持つべきです
実装例
「コードを書く際は、ビジネスロジックをできるだけ3rdパーティのライブラリから分離してください。ビジネスロジックが3rdパーティのライブラリを使用する場合は、代わりにビジネスロジックが使用する中間抽象を書いてください。これにより、必要に応じて別のライブラリに交換できるようになります。」
メリットとデメリット
メリット | デメリット |
|
|
原則に基づくコードパターン
どんな場合に使用できるパターンか?
このパターンの目的は、個々の設計ルールを明示的に説明することなく、コーディング原則のよく知られた名前を使って、求められるコード構造を説明することです。生成されたコード、リファクタリングされたコード、レビューされたコードが、期待される設計原則やその他の原則に従うようにすることが目的です。
プロンプトパターン
- この範囲内で
- 原則Xに従ってコードを生成、リファクタリング、または作成する
実装例
「これからは、コードを書く、リファクタリングする、またはレビューする際は、SOLID設計原則に従っていることを確認してください。」
この例では、SOLID設計原則を望ましい設計指針として使用しています。SOLIDコードは、以下の5つの明確な設計原則に従うコードを指します: 1) 単一責任、2) 開放/閉鎖原則、3) リスコフの置換原則、4) インターフェース分離、5) 依存性逆転。指定された設計手法は、コードが従うべき5つの基本原則をすぐに導入します。
メリットとデメリット
メリット | デメリット |
|
|
隠れた仮定パターン
どんな場合に使用できるパターンか?
コード内の隠れた仮定を特定し、それらをユーザーに説明することが目的です。
プロンプトパターン
- この範囲内で
- このコードが行っている仮定をリストアップしてください
- (オプション)これらの仮定を変更する難しさや、変更される可能性を推定してください
実装例
「このコードが行っている仮定をリストアップし、現在のコード構造を考慮してそれぞれを変更する難しさを評価してください。」
この例では、将来変更が難しい可能性のある仮定をリストアップすることに焦点を当てています。このパターンは、開発者がコードの将来の変更に関して責任を持つことを助けます。仮定が容易に変更できない場合で、開発者がその要素を変更する必要があると予想している場合、LLMに問題のある仮定を削除するためのリファクタリングを依頼できます。
メリットとデメリット
メリット | デメリット |
|
|