Google GeminiとChatGPTの性能比較 VB.NETのソースをチェックさせた結果

Google GeminiとChatGPTの性能比較 VB.NETのソースをチェックさせた 最新トレンド

新しく登場したマルチモーダルAI Google Geminiの性能を、既存のAIモデルであるChatGPT GPT-4(有料版)と比較してみました。これまで、GoogleのBardが以前はChatGPTに比べて劣っているとの評価がありましたが、新たに登場したGeminiはこの状況をどう変えたのでしょうか?VB.NETで書かれたコードの修正提案能力をテストすることにより、両者の性能を比較してみました。

修正チェックに与えたプロンプト

性能比較にしようするプロンプトです。これは楽天管理画面(RMS)に自動ログインするためにseleniumを使ってChromeブラウザを操作するソースです。ほんとはもっと長いですがかなり省略してます。単純比較で性能差が出るのか確認するためです。

あなたはVB.NETのエンジニアです。次のソースを確認してください。

####

  Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Dim strショップID As String = ""
    Dim strパスワード As String = ""
    Try

      strショップID = "ショップID"
      strパスワード = "ショップパスワード"

      Dim Driver As New Selenium.ChromeDriver
      Driver.Start()
      Driver.Get("https://glogin.rms.rakuten.co.jp/?sp_id=1")

      Driver.FindElementByName("login_id").SendKeys(strショップID)
      Driver.FindElementByName("passwd").SendKeys(strパスワード)
      Driver.FindElementByName("submit").Click()

    Catch ex As Exception

    End Try


  End Sub

####

では、これの修正点はないですか?
あれば修正したソースを提示してください。

Google Geminiの回答

上記のソースコードには、いくつかの改善点があります。以下に修正案とそれぞれの理由を説明します。

変数のスコープ

VB.Net

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Dim strショップID As String = ""
    Dim strパスワード As String = ""
    ...

strショップIDとstrパスワードは、Button2_Click サブプロシージャ内でのみ使用されています。そのため、スコープをSubからPrivateに変更することで、コードの読みやすさと保守性を向上させることができます。

修正コード:

VB.Net

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Private strショップID As String = ""
    Private strパスワード As String = ""
    ...

エラーハンドリング

VB.Net

Catch ex As Exception

End Try

Catchブロックでは、発生した例外の詳細情報を取り扱っていないため、問題の特定が困難です。ex変数を使用して、例外の種類やメッセージなどを取得し、ログに出力したり、ユーザーに通知したりする必要があります。

修正コード:

VB.Net

Catch ex As Exception
    ' 例外の種類とメッセージをログに出力
    Console.WriteLine(ex.GetType().ToString())
    Console.WriteLine(ex.Message)

    ' ユーザーにエラーメッセージを表示
    MessageBox.Show("エラーが発生しました:" & ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error)

End Try

usingブロックの使用

VB.Net

Dim Driver As New Selenium.ChromeDriver
Driver.Start()
...
Driver.Quit()

Driverオブジェクトは、Dispose()メソッドを使用して解放する必要があります。usingブロックを使用することで、Driverオブジェクトの解放を確実に実行できます。

修正コード:

VB.Net

Using Driver As New Selenium.ChromeDriver
    Driver.Start()
    ...
End Using

定数の使用

VB.Net

Driver.FindElementByName("login_id").SendKeys(strショップID)
Driver.FindElementByName("passwd").SendKeys(strパスワード)
Driver.FindElementByName("submit").Click()

ログインID、パスワード、送信ボタンの名前は、定数として定義することで、コードの可読性を向上させることができます。

修正コード:

VB.Net

Const LOGIN_ID As String = "login_id"
Const PASSWORD As String = "passwd"
Const SUBMIT_BUTTON As String = "submit"

Driver.FindElementByName(LOGIN_ID).SendKeys(strショップID)
Driver.FindElementByName(PASSWORD).SendKeys(strパスワード)
Driver.FindElementByName(SUBMIT_BUTTON).Click()

修正後のソースコード

VB.Net

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Private strショップID As String = ""
    Private strパスワード As String = ""

    Try
        ' URLを直接指定
        Dim Driver As New Selenium.ChromeDriver
        Using Driver
            Driver.Start()
            Driver.Get("https://glogin.rms.rakuten.co.jp/?sp_id=1")

            Const LOGIN_ID As String = "login_id"
            Const PASSWORD As String = "passwd"
            Const SUBMIT_BUTTON As String = "submit"

            Driver.FindElementByName(LOGIN_ID).SendKeys(strショップID)
            Driver.FindElementByName(PASSWORD).SendKeys(strパスワード)
            Driver.FindElementByName(SUBMIT_BUTTON).Click()
        End Using
    Catch ex As Exception
        ' 例外の種類とメッセージをログに出力
        Console.WriteLine(ex.GetType().ToString())
        Console.WriteLine(ex.Message)

        ' ユーザーにエラーメッセージを表示
        MessageBox.Show("エラーが発生しました:" & ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error)
    End Try
End Sub

その他

  • 上記の修正案は、あくまで一例です。状況に応じて、他の修正方法も考えられます。
  • コードのレビューは、コードの品質向上に有効な手段です。定期的にコードレビューを実施することをおすすめします。

ChatGPTの回答

このVB.NETのソースコードはSeleniumを使ってWebブラウザを操作するためのものですが、いくつか改善できる点があります。以下に修正点を挙げ、修正したソースコードを提供します。

修正点

  1. エラー処理: Catchブロックが空です。エラーが発生した場合にログを出力するなどの処理を追加することで、デバッグが容易になります。
  2. リソースの解放: Seleniumドライバーは使用後に適切に閉じる必要があります。Driver.Quit()を追加してリソースを解放します。
  3. 暗黙的な待機の設定: ページや要素のロードを待つために、暗黙的な待機を設定することが推奨されます。

修正後のソースコード

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim strショップID As String = “ショップID”
Dim strパスワード As String = “ショップパスワード”

Try
    Dim Driver As New Selenium.ChromeDriver
    ' 暗黙的な待機の設定
    Driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10)
    Driver.Start()
    Driver.Get("https://glogin.rms.rakuten.co.jp/?sp_id=1")

    Driver.FindElementByName("login_id").SendKeys(strショップID)
    Driver.FindElementByName("passwd").SendKeys(strパスワード)
    Driver.FindElementByName("submit").Click()
Catch ex As Exception
    ' エラーログの出力
    Console.WriteLine("エラーが発生しました: " & ex.Message)
Finally
    ' ドライバーの終了処理
    If Driver IsNot Nothing Then
        Driver.Quit()
    End If
End Try

End Sub

補足

  • Driver.Quit()Finallyブロック内に配置して、エラーが発生しても正常終了してもドライバーが確実に終了するようにしました。
  • エラー発生時にエラーメッセージをコンソールに出力するようにしました。実際のアプリケーションでは、エラーログをファイルに記録するか、適切なログ管理システムに送信することを検討してください。
  • 暗黙的な待機を設定して、要素が見つかるまでの最大待機時間を指定しました。これにより、ネットワークの遅延などでページのロードが遅れてもテストが失敗することが少なくなります。

この修正で、コードの安定性とメンテナンス性が向上します。

性能比較結果

GeminiとGPT-4を比べてみて、GPT-4とそこまで差がないことに気づきました。日々の.NETやPythonのコーディング作業で、有料のChatGPTを使うか無料のGeminiで済ますか、結構悩むところです。Geminiは、ChatGPTよりも詳しく解説してくれる部分があり、usingの使い方やdimをprivateにする提案(これは実際には間違っていたけど)など、思わず「へぇ」となるような洞察をくれます。でも、そういう細かいアドバイスがいつも必要というわけではないんですよね。

ChatGPTの答えは、直感的でちょうど良いバランスを持っています。日々使うには、ChatGPTの方が手軽で気軽に使える感じがします。恋人にたとえるなら、Geminiはとてもいい人だけど、少し重く感じる時がある…それに対して、ChatGPTはいい意味で程よい距離感を保ってくれる、そんな存在です。

コメント

タイトルとURLをコピーしました