GitHub Copilotを使ってみた
GitHub Copilotとは?
GitHub Copilotは、GitHubとOpenAIが共同で開発したAIペアプログラミングツールです。Visual Studio Codeなどの統合開発環境(IDE)に統合され、コードの補完、提案、生成をリアルタイムで行います。GPT-3をベースにしており、コードの文脈を理解し、適切なコードスニペットを提案してくれます。
GitHub Copilotを利用するには?
前提条件として
・GitHubアカウントを持っていること
・VSCode or VSCode Insiders がインストールされていること
※他にも対応IDEはありますが、VSCode系がおすすめ。
GitHub個人、エンタープライズ両方で「⚙設定」から Copilotを利用するシートをサブスクリプションに追加する必要があります。
1人当たり個人だと$10, エンタープライズだと$19 のサブスク料金になります。
高度なコード補完機能
コードの文脈や他のコード行を解析して、適切な補完候補を提案してくれます。
試しにいくつかサンプルコードを書いてみました。
たとえば、以下のように条件を指定すると、
このようにコードの叩き台としては完璧なスニペットを提供してくれます。レスポンスもかなり早く、数秒で返答してくれます!
import * as AWS from 'aws-sdk';
import * as fs from 'fs';
// Set up AWS credentials and region
AWS.config.update({
accessKeyId: 'YOUR_ACCESS_KEY',
secretAccessKey: 'YOUR_SECRET_ACCESS_KEY',
region: 'YOUR_REGION'
});
// Create an S3 client
const s3 = new AWS.S3();
// Define the S3 bucket and file key
const bucketName = 'YOUR_BUCKET_NAME';
const fileKey = 'YOUR_FILE_KEY';
// Function to download the S3 file and convert its contents to JSON
async function downloadAndConvertToJSON() {
try {
// Download the file from S3
const response = await s3.getObject({ Bucket: bucketName, Key: fileKey }).promise();
// Convert the file contents to JSON
const fileContent = response.Body.toString();
const jsonData = JSON.parse(fileContent);
// Do something with the JSON data
console.log(jsonData);
} catch (error) {
console.error('Error:', error);
}
}
// Call the function to download and convert the file
downloadAndConvertToJSON();
ChatGPTだと, TypeScriptで, Pythonで… とか エラーハンドリングが必要だとかもう少し詳細に条件を書かないといけませんが、GitHub Copilotであれば、ファイル形式やいままでコーディングしたファイルを解析してより適切なコード生成をしてくれます。
ファイル解析により、次に作成しようとしている関数を予想して関数を丸ごと補完することもしてくれます。
S3バケットの一覧を取得する関数を補完)
もちろんテストコードの自動生成も可能なので、ちょっとしたシステムであれば経験の少ない言語での実装もGitHub Copilotだけで可能ですね。
Sample.pyのテストコード)
import unittest
from unittest.mock import patch
from io import StringIO
from sample import *
class SampleTest(unittest.TestCase):
def test_create_s3_bucket(self):
bucket_name = 'my-sample-bucket'
expected_output = "Bucket 'my-sample-bucket' created successfully!"
with patch('sys.stdout', new=StringIO()) as fake_out:
create_s3_bucket(bucket_name)
self.assertEqual(fake_out.getvalue().strip(), expected_output)
def test_list_s3_buckets(self):
expected_output = "List of S3 buckets:\n bucket1\n bucket2\n bucket3"
with patch('sys.stdout', new=StringIO()) as fake_out:
with patch('sample.boto3.client') as mock_client:
mock_client.return_value.list_buckets.return_value = {
'Buckets': [
{'Name': 'bucket1'},
{'Name': 'bucket2'},
{'Name': 'bucket3'}
]
}
list_s3_buckets()
self.assertEqual(fake_out.getvalue().strip(), expected_output)
そのほかのコーディング作業もVSCode上で解決できるので開発効率がかなりあがります!
別のブラウザを開いて、ChatGPTにログインして、条件を事細かく入力して…なんて作業もする必要はもうないですね。
コードだけではなく、文章も補完することもできます。
「○○とは、」と入力すれば、何かしらの技術スタックや概念などの説明を自動で補完してくれます。
いくつか添削する点は出てきますが、大枠はそのまま利用できるのでドキュメント作成するときにも文章執筆の効率化になります。
まとめ
GitHub Copilotを使ったコーディングをすると、クラスや型を作って、関数を定義して…のような一般的なコーディング作業が一切なく、自分がコードを書いている感覚が全くないです。。
ですが、GitHub Copilotがかなり賢いので自分の思った通りの実装やエラーハンドリングを作成してくれるのでQOLならぬ、QODがかなり上がります!
$10~19のサブスクの価値は十二分にあると思うので、ぜひ一度体験してみてください!
PS: GitHub Copilot Labs 利用してみたい…