Python

GitHub CopilotでPythonプログラミングを自動化してみる

GitHub Copilotとは?

GitHub CopilotはAIが今書いているプログラムの続きを提案してくれるツールです。OpenAI CodexというGPT-3をベースとしたモデルを利用しており、GitHubとOpenAIが共同で開発しているようです。
執筆時点ではテクニカルプレビューの状態です。
基本的にはどの言語にも対応していますが、Pythonは特に得意な言語の一つのようです。

GitHub Copilotの始め方

GitHub CopilotのTechnical Previewは現在無料で使えるのですが、利用に順番待ちが必要です。
私はhttps://copilot.github.com/からGitHubアカウントでSign Upしました。
順番が回ってくるまで数ヶ月かかかるので通知がくるまで待ちましょう。
私の場合、「Welcome to GitHub Copilot Technical Preview!」という件名でメールが届いて順番が来ました。

VSCodeでは順番待ちと拡張機能のインストールだけで使い始めることができます。
順番が来たらこちらをインストールしましょう。

簡単にCopilotを試す

クイックソートを書いてもらう

とりあえず有名なアルゴリズムを書いてもらいます。
関数名と引数まで書いてみると…


すぐにそれらしいコードが提案されました!
そのままでも動きそうなので適当に動かしてみると

>>> quick_sort([3, 2, 1, 5, 10, 20, 13])
[1, 2, 3, 5, 10, 13, 20]

という感じでちゃんとソートされてます。

繰り返しのコードで提案してもらう

同じ構造を何度も書くのって面倒だし自動化したくなります。
しかし、プログラミングしているとそういう場面は多いです。
今回はdictを要素としてもつlistを書いてみました。


期待通りです。
usernameの頭文字がA→B→C→Dという規則も満たしてくれました。
これに続いて、usernameまで入れるとorganizationがGRIとなるように提案してくれます。

ForecastFlowのコードでCopilotを試す

ここまでは例として一般的すぎてあまりCopilotの良さがわからないかもしれません。
次はForecastFlowのPythonパッケージをVSCodeで開いた状態でその中身を編集しながらCopilotの動作を試します。
※以降のコードはあくまで例示のためであり、実際のリリースでは使用していません。

クラスにメソッドを追加する①

DataSourceクラスにdeleteメソッドを追加してみましょう。


それらしいコードが出てきました。
_v3.delete_data_sourceという関数は存在しないのですが、もしあれば動きそうですね。

クラスにメソッドを追加する②

Projectクラスに_create_data_source_from_bqメソッドを追加してみましょう。
メソッド名しか入力してないのですが、BigQueryのテーブルからデータソースを作成するメソッドのイメージです。


コードが出てきました。
BigQueryのテーブルを指定するためのIDもちゃんと引数に入れてくれています。
BigQueryの知識も少しあるようです。

例外クラスを追加する

例外を定義しているファイルにクラスを追加してみます。
class Notまで打ち込むと続きを提案してくれました。


DataSourceやModel、PredictionというリソースがForecastFlowに存在していることを理解してくれています。

おわりに

今回はGitHub Copilotを試しました。
こういうツールは的外れな出力をされると結構イライラしてしまいますが、Copilotはそこそこ使えるのではないでしょうか。
編集しているファイルだけでなく他のファイルの内容も踏まえて続きを提案してくれるところもすごいですよね。
そしてここまで高度なモデルなのに1-2秒とかかなり短い時間で出力してくれます。
たまにはCopilotと一緒にコーディングしてみると楽ができるかもしれません。

Y.N
GRIでデータ分析やアルゴリズム開発、ForecastFlowの開発に携わっています。