先日、Google社からBardが公開されました。ChatGPTに比べるとそこまで話題になっていないような気がするのですが、みなさんの周りではどうですか?
ChatGPTのAPIやGPT-4の登場、Windowsの検索エンジンにBing AIが搭載されるなど、AIチャットツールが既に世間に浸透しているので、真新しさがないというのも盛り上がりに欠けた原因なのでしょうか・・・??
でも、Bardを実際に使ってみると、とにかくレスポンスが速く、性能もそんなに悪くありません。英語でしか質問はできませんが、ソースコード生成は英語でも問題ないのでエンジニアの方はBardもおすすめです!
4月21日(現地時間)、Googleは、Bardにコーディング機能が追加されたと発表しました。PythonのコードはGoogle Colab(Colaboratory)にエクスポートできるということで、今回は基本的な使い方について説明しようと思います。
プログラミング関係でできること一覧
Bardで、プログラミング関係でできることを以下にまとめます。
できること | 概要 | 精度 |
---|---|---|
コーディング | 「文字列を連結させる処理を書いて」など プロンプトを投げることでソースコードを生成 | 〇 |
リファクタリング | 「処理が遅いのでリファクタリングして」など プロンプトを投げることで修正後のソースコードを返す | △ |
関数名・変数名の生成 | 「合計を求める関数名をいくつか提案して」など プロンプトを投げることで関数名や変数名を提案 | 〇 |
バグ・問題点の指摘 | 「このソースコードの問題点を指摘して」 「このソースコードにバグがないか確認して」など プロンプトを投げることでバグ・問題点の指摘 | 〇 |
ソースコードの解説 | 「ソースコード+説明して」で ソースコードの処理を解説 | 〇 |
ダミーデータの作成 | データ属性+「csvファイルを作成して」で テスト・動作確認用のダミーデータの作成 | 〇 |
SQLの作成 | 「社員テーブルから男性のデータのみ取得するには?」など プロンプトを投げることでSQL文を生成 | 〇 |
テストケースの作成 | 「数字のみ、10文字まで、未入力はエラーのテキストボックスの 単体テストケースを作成して」で、表形式でテストケースを返却 | 〇 |
他にも、ツールの使い方や、技術に関する質問など幅広い質問に対応しています。また、Google Apps Scriptに関する質問は、ChatGPTと比較すると詳しい印象です。
対応しているプログラミング言語
- C++
- Go
- Java
- JavaScript
- Python
- TypeScript
- Google Apps Script
事前準備:表示を日本語化させておく
現在、Bardは英語のみ対応していますが、以下のように表示を日本語化させることは可能です。
日本語化の手順は、こちらの記事の「表示を日本語化する」をご参照ください。
Bardでコード生成してみよう!
ではさっそく、Bardでコード生成をしてみましょう。
今回は、Pythonでおみくじ機能を作ってもらおうと思います。日本語には対応していないので、DeepLなどの翻訳ツールを使います。(DeepL翻訳:https://www.deepl.com/ja/translator)
次に、Bard(https://bard.google.com/?hl=en)を開き、翻訳後の文章を貼り付けます。
ソースコードが生成されました。右下には、「Export this code to Colab」と表示されています。
これが、「Google Colabにエクスポートする」という機能です。こちらは後ほど説明します。
Bardにコードをリファクタリングしてもらおう!
ソースコードをリファクタリングしてもらうときのプロンプトは、以下の通りです。
Refactoring. + リファクタリングしてほしいソースコード
以下の、文字列の母音をカウントするコードをリファクタリングしてもらいます。
aaa = "hello world"
vowels = ['a', 'e', 'i', 'o', 'u']
vowel_count = 0
for char in aaa:
if char in vowels:
vowel_count += 1
print("Number of vowels in the input string:", vowel_count)
上記コードは、以下の問題点があります。これらを指摘して修正してほしいところ・・・!
- “aaa”という、分かりづらい変数名
- “vowels”はリスト型になっているが場合によっては処理速度が落ちる
- for文の部分が冗長になっている
プロンプトはテキストエディタで作るのがおすすめ
Bardのテキストエリアは改行ができないため、メモ帳やサクラエディタなどのテキストエディタで作成するのがおすすめです。
Pythonコードのリファクタリング結果
Bardの回答は以下のとおりです。
コードが関数化され、コメントが追加されましたが、先ほど挙げた問題点は改善されていません。
ChatGPTでの結果
ChatGPTに同じプロンプトを投げた結果は以下のとおりです。モデルはGPT-4を使用しています。
かなり簡潔なコードになりました。先ほど問題点として挙げた内容も、すべて指摘&修正できています。すごいです、ChatGPT。
結局、Bardのリファクタリング精度はどうなの?
いくつかソースコードを投げてリファクタリング内容を確認したところ、ChatGPTとBardとでは、そもそもリファクタリングに対する視点が違うように感じました。
ChatGPTが冗長性や処理速度に関する指摘をしているのに対し、Bardでは、どんな関数を使っていても、どんな変数名でも、とりあえずちゃんと動くコードに関しては指摘をせず、「どのようなケースでもエラーにならないコードであるか」をポイントとしているように感じました。
ぶっちゃけ、先ほどの例に挙げたソースコードは、リファクタリングしなくても動きます。工数との兼ね合いもありますし、どこまでリファクタリングするかは難しいところです。Bardは、ChatGPTに比べて、より現場視点なのかもしれません。
ソースコードの説明をしてもらおう!
Bardに、ソースコードの内容を説明してもらいます。プロンプトは以下になります。
Explain the contents of the following source code. + ソースコード
以下の、Google Apps Script(GAS)のスクリプトを説明してもらいます。
function markImportantRows() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var dataRange = sheet.getDataRange();
var lastRow = dataRange.getLastRow();
var range = sheet.getRange("A1:E" + lastRow);
var values = range.getValues();
for (var i = 0; i < values.length; i++) {
var row = values[i];
if (row.indexOf("重要") > -1) {
sheet.getRange(i + 1, 6).setValue("重要");
}
}
}
順を追って、詳しく説明してくれています。
Bardでソースコードの解説をさせるのはけっこう良さそうだなと個人的には思いました。
PythonのコードをColabから動かす方法
Bardで作成したPythonのプログラムは、Google Colab(Colaboratory)から動かすことができます。Google Colabというのは、Googleが提供しているインターネット上でPythonを実行できるサービスです。詳しくは以下記事をご参照ください。
Bardが生成したソースコードをColabで実行
BardでPythonのコードを生成させると、右下のメニューに「Export to Colab」が表示されます。
これを押すと、画面左下に「New notebook saved in Drive」と表示されますので、青字になっている「Open Colab」を押します。
すると、別タブでGoogle Colabが開き、Bardが生成したソースコードが表示されます。
応答文の内容もそのまま転記されていますが、必要に応じて削除できます。ソースコード左上にある実行ボタンを押すと、ソースコードが実行されます。
実行すると、生成してもらった「おみくじのソースコード」が実行されます。
Colab上でデバッグする方法
PyCharmやVisual StudioなどのIDEにはデバッグ機能がありますが、Colabにはありません。IDEでいう「実行」のみが備わっています。
デバッガーを使う方法もあるにはありますが、ここでは簡単にできる2つの方法を解説します。
print()でログ出力する方法
こちらは単純にログに変数を出力する方法です。
name = input("What is your name? ")
print(name)
上記のように、中身を確認したい変数のあとにprint()を追加することで、ログに変数の値が出力されます。
セルを分割する方法
Colab内に書かれたソースコードは、「セル」という単位で管理されます。セルは分割することができ、セル単位でソースコードを実行できます。これを利用して、ブレークポイントを貼りたい箇所までと、それ以降とでセルを分割します。
分割したら、1つ目のセルから実行します。2つ目のセルを実行すると、以下のようなipdbという対話型デバッガーが起動します。
ここに、1つ目のセルの変数名を入力すれば、変数の値が出力されます。
Colabに転記したソースコードは保存も可能
Colabにエクスポートしたソースコードは、「ノートブック」という形でGoogle Driveに保存されます。
Colabの左上のロゴを押すか、Googleドライブを開きます。
こちらから過去に作成したColabのノートブックを開くことができます。BardからColabで開いた場合、開くたびに新しいノートブックとしてDriveに保存されます。ノートブックの容量は数KB程度ですが、Bardから開くたびにどんどんノートブックが増えていくので、使わなくなったものは削除していったほうがよさそうです。
まとめ
今回は、Bardでプログラミングやデバッグをする方法について解説しました。
ChatGPT(特にGPT-4)が高性能なので、基本的にChatGPTで事足りてしまっていますが、Bardは「エンジニアっぽい応答」をするのが印象的でした。特に、コード生成で、ChatGPTがソースコードのお作法や最適化を重視しているのに対し、Bardは落ちないコードであるかどうかをしっかりチェックしている点がエンジニアらしさを感じました。
Pythonに関しては、Bardから直接Colabに転記できるのが便利です。コピペしてテキストエディタに貼っておくと、なんのソースコードか分からなくなる問題ってけっこうあるあるですよね・・・!?とりあえずColabにエクスポートしておけば、Bardでのプロンプトも合わせて転記されますので、あとから見るときにも分かりやすいです。Colabのノートブックのタイトルもプロンプトの文章になっていますし、Pythonユーザーには有難い機能ですね。
他のプログラミング言語のときも、もっといえば普通のプロンプトも、Google Driveにエクスポートできたらメモ帳的に使えて便利そうだなーと思いました。
コメント