GitHub Copilotデビュー: 日本語で命令したらレジ・プログラムができちゃった 💚

![DALL·E 2023-10-15 10.00.13 - illustration of a futuristic digital AI brain connected to a convenience store cash register via data links. Below the AI brain, there's a monitor sho.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/8aa50418-1d6a-9c05-a932-1859bab83ccc.png)

# はじめに

みなさん！ **GitHub Copilot** 使ってますか！？
実のところ、私は使ったことがありません。。。
ということで、早速、GitHub Copilotデビューをしてみます。

# 準備

GitHub Copilotを使うためにはいくつかの準備作業が必要です。
* GitHub Copilotの申込み
* VS CodeでGitHub Copilotを使えるようにする

の2つが最低限必要になります。

:::note
今回、私は30日間の無償トライアルで申込みました。
:::

この[必要最低限の作業を丁寧に解説しているQiita記事](https://qiita.com/RyoWakabayashi/items/1207128e88669c76bf5f#github-%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E3%81%AE%E4%BD%9C%E6%88%90)がありましたので、必要な方はご参照ください。

https://qiita.com/RyoWakabayashi/items/1207128e88669c76bf5f#github-%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E3%81%AE%E4%BD%9C%E6%88%90

# レッツ・トライ！

準備が整いましたら、早速、レッツ・トライ:grinning:

GitHub Copilotを初めて使うということもあり、シンプルなレジ・プログラムの作成に挑戦してみます。
概要はこちら。
1. 商品の価格を入力する
1. 商品の消費税を計算する
1. 支払ったお金からお釣りを計算する

そして、このシンプルなレジ・プログラムを日本語だけの命令で作成できるか試してみます。

## 1. 関数の生成
プログラムを一行も含まないまっさらな状態です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/ada11760-a423-ca65-2181-d5b3ae1dc5c1.png)
Copilotに命令してみます。
```code:Copilotへの命令
簡単なレジのプログラムを開発したいです。消費税を8%で計算する関数と受け取ったお金と
商品の価格からお釣りを計算する関数を生成してください
```
数秒後に下記内容が出力されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/088c1bac-f070-a73b-f5ed-58bf9850b728.png)


:::note
**補足**
Copilotへの命令は、エディター内の任意の場所で、『Command + I』をキー・インすることで入力できるような状態になります。この例はMacOSの場合です。
・エディターを起動した状態
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/0a8cb47f-9460-2a17-e4b7-5bbf0edf364e.png)
・『Command + I』をキー・インするとこのように表示が変わるので、Copilotへの命令を入力します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/57fcbdc1-9e1b-4b11-74f0-00298aae9669.png)
:::

### 驚いた点: 一つ目
命令した通りの2つの関数を生成してくれました。命令通りと言ってしまえばそれまでですが、関数名や関数の引数名が的確に内容を表しています。

### 驚いた点: 二つ目
生成した関数をテストするためのプログラムを自動生成してくれました。そして、消費税が8%になっています！
日本語で命令したので、日本の税率を理解した上でプログラムを作成してくれたのでしょう。
モノによっては税率が10%になるケースもありますが、税率は関数の引数で指定できるので、これでOKです。

## 2. 実行
生成されたプログラムを見る限り、問題なく動きそうなので実行してみます。

(テストプログラムの内容)
商品の価格: 10円
消費税: 8%
支払ったお金: 15円
お釣り: (上記内容から計算して出力)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/0ff99f4d-a791-0d1e-70d3-e0dd4db17835.png)
おや？ お釣りが、```4.199999999999999```となっており、これは正しくありません:joy:
デバッガーで変数の値を確認すると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/da4a50b1-a3c8-a7ad-24e3-a30e3b9d69bd.png)

税込価格(totalAmount)は```10.8```なので正しく計算されていますが、引き算を伴うお釣り(change)の計算のところで正しくない結果を出力しています。


## 3. 修正依頼
Copilotに修正依頼をしてみます。
```code:Copilotへの命令
数値演算ライブラリーを使用して、浮動小数点演算を正しく実行できるように見直してください
```

数秒で修正してくれました。
修正内容は**diff形式**で出力してくれます。言うまでもなく、わかりやすいですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/018d84e8-2a5b-b460-6242-9f279d29507a.png)
変更内容を受け入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/52b164da-a1cb-b586-da45-a3ede578a5a5.png)
それでは、実行してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/ee8cc583-4cc3-9bf1-37ad-807f67807ade.png)
お釣り(Change)が```4.2```と表示され、正しい結果になりました:grinning:

## 3. 商品価格と支払ったお金を入力できるように変更

最後の仕上げです。商品の価格と支払ったお金の入力を入力できるようにプログラムを修正してみます。

```code:Copilotへの命令
商品の価格と支払ったお金をコンソールから入力するようにプログラムを修正してください
```
数秒で修正してくれました。
いい具合に変更してくれたようです。
```// Test the functions```が削除されました。本番用のプログラムを意識したのでしょうか 笑
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/0d01d62b-c5d8-48c1-40da-ffbfc03dd00f.png)

## 4. 実行

想定ユースケースは
* コンビニで420円の弁当を購入
* 500円を店員さんに支払います
* 店員さんは弁当の代金と受け取った500円をレジに打ち込み、お釣りを計算します

になります。

(想定されるお釣り) 消費税は8%で計算
500円 - 420円 x 1.08 = 46.4円

それでは実行してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52151/c6499032-bd0d-da0d-bc8b-d2d03ce7931f.png)
**正しい結果が得られました！**

# 終わりに

お釣り計算プログラムを、レジ・プログラムと呼ぶにはかなり無理がありますが :sweat_smile:
このプログラムを生成するために、GitHub Copilotに命令した内容は、
* お釣り計算に必要な関数の生成を依頼
* 浮動小数点の計算がおかしいので修正を依頼
* 商品の代金と支払ったお金をコンソールから入力できるように修正を依頼

の3つです。そして、命令は全て日本語で行いました。
非常にシンプルながらも、ちゃんと動作するプログラムを一から自動生成できたのはちょっと驚きです。

まだトライアル期間が29日も残っているので色々と試したいと思います :heart_eyes:

最後にGitHub Copilotが自動生成したプログラムを載せて終わりといたします。
```node.js
const { create, all } = require('mathjs');

const config = {};
const math = create(all, config);

// Function to calculate sales tax
const readline = require('readline').createInterface({
    input: process.stdin,
    output: process.stdout
});

function calculateSalesTax(price, taxRate) {
        const taxAmount = math.multiply(price, taxRate);
        return taxAmount;
}

// Function to calculate change
function calculateChange(price, amountPaid, taxRate) {
        const taxAmount = calculateSalesTax(price, taxRate);
        const totalAmount = math.add(price, taxAmount);
        const change = math.subtract(amountPaid, totalAmount);
        return change;
}

readline.question('Enter the price: ', (price) => {
    readline.question('Enter the amount paid: ', (amountPaid) => {
        const taxRate = math.bignumber(0.08);
        const salesTax = calculateSalesTax(price, taxRate);
        const change = calculateChange(price, amountPaid, taxRate);
        console.log(`Sales tax: ${salesTax}`);
        console.log(`Change: ${change}`);
        readline.close();
    });
});

```

# 参考

https://qiita.com/RyoWakabayashi/items/1207128e88669c76bf5f#github-%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E3%81%AE%E4%BD%9C%E6%88%90


https://tutorials.tinkink.net/ja/vscode/usage-scenarios-of-github-copilot.html

本格的に業務に活用している方もいるようです

https://note.com/erukiti/n/n49f85d31254a