ChatGPTをシステム開発・プログラミングで有効活用する方法

プログラミング全般

この記事の内容

この記事では、ChatGPTをシステム開発やプログラミングで有効活用するための方法を紹介します。

VS Codeの拡張機能を使って、ChatGPTを使ってみる

ChatGPTをOpenAIのWebサイトから使用することもできますが、ここではVS Codeの拡張機能を使って、ChatGPTを使用していく方法を紹介します。

インストール方法

VS Codeをインストールしていない人はインストールし、拡張機能からChatGPTを検索してインストールします。

インストールすると、左側にChatGPTのマークが出てくると思うので、そこからログインします。

OpenAIのアカウントがない人は先に作っておきましょう。GoogleのアカウントやMicrosoftのアカウントを使っていくこともできます。

うまくいけば、メッセージを入れると、返答してくれます。

ログインしたときにエラーが出る場合

ログインできずに、以下のようなメッセージが出る人は、Chromeのパスを設定する必要があるので設定していきます。

Unable to login. Make sure to login and keep your browser open. This error may also be due to OpenAI servers down or that it’s throttling the requests. Error: kw Protocol error (Runtime.callFunctionOn): Argument should belong to the same JavaScript world as target object

設定するには、拡張機能のところから、歯車マークを押します。そこでChromium PathというのがあるのでそこにChromeのパスを設定します。私の場合は、C:\Program Files\Google\Chrome\Application\chrome.exeでした。

これは、以下のGitHubのissueを参考にしました。

Unable to login. Make sure to login and keep your browser open. This error may also be due to OpenAI servers down or that it's throttling the requests. Error: Error Failed to launch the browser process! spawn C:\Program Files\Google\Chrome\Application\chrome.exe ENOENT TROUBLESHOOTING: https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md · Issue #171867 · microsoft/vscode
Type: Bug Unable to login. Make sure to login and keep your browser open. This error may also be due to OpenAI servers d...

ChatGPTの返答を日本語化する方法

この後、拡張機能を使って、ChatGPTからテストコードの提案などをしてもらいますが、デフォルトだと英語で返答されます。提案されるソースコードはそれでいいのですが、解説などは説明でほしいと思います。そのため、設定を一部変更して日本語で返るようにします。設定の Chatgpt > Prompt: Prefix:****の部分です。

この設定がデフォルトだと英語になっているので、日本語の質問にしてあげます。

項目 入力内容
Add Tests 次のコードに対するテストを実装してください
Find Problems 次のコードの問題点を見つけてください
Optimize 次のコードを最適化してください
Explain 次のコードを説明してください
Add Comments 次のコードにコメントを追加してください

ChatGPTをいろいろ使いこなしていく

ここからは、実際にChatGPTを使ってどんなことができるのかを書いていきます。

何かソースコードを適当に選択して、右クリックすると、ChatGPT:*****というのが出てくると思います。これを使うとChatGPTでテストコードを書いたりなどできます。1つ1つ見ていこうと思います。

Add testsでテストコードを追加してみる

ここでは簡単な足し算するプログラムのコードをもとにやってみました。

テストコードを書いてほしい対象を選択して、右クリックAddTestを選択すると記載してくれます。

Find Problemsで不具合を見つける

まずは簡単な引き算をするプログラムでやってみます。以下のsub関数を選択してFind Problemsをした結果、特に問題ないとかえってきました。

次に、引き算しないで、leftをそのまま返すようにしてみました。すると、その間違いを指摘してくれました。よさそうですね。

もう少し進んで、関数にコメントを入れてやってみます。Notesの部分に結果が負数になる場合は例外をスローするという文言をい入れると、それにも反応してくれて、実装がないことを伝えてくれます。優秀ですね。

実際の現場で使うプログラムはこんな簡単なことではないので、どこまで通用するかは見てみたいものです。

Add Commentsで説明を追加する

Explainの機能を使って、処理のコメントなどを追加してもらいます。以下のように記載してくれました。

ちょっと表示形式がずれてますが、コメントを追加してくれました。ここで、英語でコメントを記載するケースがありましたが、質問文の最後に日本語でと追加すると日本語で書いてくれるようになりました。

関数コメントを入れてもらう

ここでは、Pythonの関数にコメントを追加してもらいました。DocStringでnumpyスタイルで指示しました。

VS Codeの右クリックでAddCommentをするのではなく、自分で以下を入力しました。

関数コメントを書いて。docstringでnumpyスタイルで。
def sum(left, right):
    calculated = left + right
    if calculated < 0:
        raise Exception(“error”)
    return calculated

以下の形でコメントを追加してくれました。

日本語で書いてほしいと指定するとうまくnumpyスタイルで出てこなかったので、いったん言語は指定しないで出して、そのあとに日本語にしてというとうまくいきました。

クラス図を書く

PlantUMLの形式でテキストを書くと、クラス図で表示することができます。

これを利用して、PlantUMLの形式でクラス図を書いてみます。PlantUMLについては以下で説明しています。

【PlantUML】UMLを書くためのおすすめツール
要件定義や設計でクラス図やシーケンス図といったUMLを書く機会があるかと思います。どのようなツールを使うのかは開発の規模や予算によっても変わってくると思います。 個人的に有料で一番オススメなものは、Enterprise Architectで...

PlantUMLのプレビュー結果は以下の通り。

シーケンス図を書いてもらう

PlantUMLでシーケンス図を書いて。

– アクターがLoginFormでユーザIDとパスワードを入力

– アクターがログインボタンを押下 – LoginFormからバックエンドサーバへログイン認証要求

– バックエンドサーバでMySQLデータベースに認証要求

– 認証OKなら200 OKを返す – 認証NGなら401 Unauthorizedを返す

– 認証OKならLoginFromからMainFormへ遷移する

以下の内容がかえってきました。

@startuml
actor User
activate User
User -> LoginForm : Enter User ID and Password
User -> LoginForm : Press Login button
deactivate User
LoginForm -> BackendServer : Send login request
activate BackendServer
BackendServer -> MySQL : Check authentication
if Authentication OK then
    MySQL –> BackendServer : 200 OK
    BackendServer –> LoginForm : 200 OK
    deactivate BackendServer
    LoginForm -> MainForm : Navigate
else
    MySQL –> BackendServer : 401 Unauthorized
    BackendServer –> LoginForm : 401 Unauthorized
    deactivate BackendServer
    LoginForm -> LoginForm : Stay
endif
@enduml
ほとんどいい感じなのですが、PlantUMLでプレビューできるように以下の太字3か所だけ変更しました。
@startuml
actor User
activate User
User -> LoginForm : Enter User ID and Password
User -> LoginForm : Press Login button
deactivate User
LoginForm -> BackendServer : Send login request
activate BackendServer
BackendServer -> MySQL : Check authentication
alt Authentication OK case
    MySQL –> BackendServer : 200 OK
    BackendServer –> LoginForm : 200 OK
    deactivate BackendServer
    LoginForm -> MainForm : Navigate
else
    MySQL –> BackendServer : 401 Unauthorized
    BackendServer –> LoginForm : 401 Unauthorized
    deactivate BackendServer
    LoginForm -> LoginForm : Stay
end
@enduml
これで表示するとこんな感じにでました。

ER図を書いてもらう

以下のように注文すると、ER図を書いてもらえました。ちょっと依存関係のところが間違ってますがそれ以外は注文通りです。

PlantUMLでER図を出力して。
– m_userテーブルにid列、name列、age列を定義。
 – m_userテーブルのid列はPK。
– t_orderテーブルはid列、order_datetime列、user_id列を定義。
– t_orderテーブルのuser_id列は外部参照でm_userテーブルのid列を参照。
@startuml
entity m_user {
  id PK
  name
  age
}
entity t_order {
  id
  order_datetime
  user_id FK
}
m_user –|> t_order : user_id
@enduml

テスト用のデータ

データベースのユーザマスタに登録するためのデータ出力をお願いしてみました。CSVで出力してもらってインポートするイメージです。いい感じに出てます。

テストデータを出力してほしい。
– 10件分
– m_userテーブルの内容をCSV形式で
– idとnameとageの内容が欲しい
– idは1から順番に採番
– ageは30歳から50歳までの間で

使うライブラリの検討材料に

使用するライブラリを選定する際に、調査を行って決めると思いますが、その際の材料として使えるかもしれません。例えばフロントエンドフレームワークの比較に使う場合だと以下のような感じです。スター数はChatGPTの学習時期によると思いますのでずれがあります。

その他

  • 日本語の回答だと思ったものが出ないケースがあるので、まずは英語で質問して、英語の答えをもらって、そこから日本語にしてといったほうがいいケースがありました。

コメント