Github CopilotでAIとペアプログラミング

こんにちは。新卒二年目エンジニアの土屋です。先週のGluegentブログは、今話題のAIチャットサービス「ChatGPT」に関する記事でしたが、今週の記事でもAIサービスの紹介をしていきたいと思います。

今回はChatGPTではなく、「GitHub Copilot」というコーディング支援ツールに関して使い方と実際にどのように動作するかを紹介していきます。


GitHub Copilotとは

コーディング支援ツールと言っても何ができるのか分からないと思いますが、GitHub Copilotを利用すると、AIとペアプログラミングすることが可能になります。基本的な機能はコーディング時にオートコンプリートスタイルの候補が提示されるものとなっています。

※グレーの文字はCopilotの予測候補の1つ

GitHub Copilotを使う前に

<対応プログラミング言語>

GitHub Copilotはオープンソースコードでトレーニングされているため、Java、PHP、Python、JavaScript、Ruby、Go、C#、C++等といった様々なプログラミング言語で動作します。このため、オープンソースコードがあまり存在しない言語、あまり使用されていない言語、新しい言語、に関しては精度の低い予測がされる、もしくは機能しないようです。


<対応IDE>

以下のIDEの拡張機能としてGitHub Copilotは使用可能です。

  • JetBrains IDEs

  • Neovim

  • Visual Studio

  • Visual Studio Code

本記事ではVisual Studio CodeでGitHub Copilotを使用しています。


サブスクリプション

GitHub Copilot for IndividualsもしくはGitHub Copilot for Businessに登録する事で使用可能になります。学生、教師、OSSに貢献している方は無料で使用できるようです。

GitHub Copilotを使えるようにする

今回はVisual Studio Codeに拡張機能としてGitHub Copilotを入れて動かしてみます。

VSコード内の拡張機能タブのマーケットプレースから「GitHub Copilot」と入力すると出てくると思います。今回はGitHub CopilotではなくGitHub Copilot Nightlyの方をインストールしていますが通常版でもほぼ違いはありません。Nightlyはプレリリース版といった感じです。

インストールするとCopilotのサブスクリプションに登録しているGitHubアカウントでのログインを求められたりするので、ログインやCopilotへのアクセス許可を行います。


インストールが完了するとCopilotのアイコンが右下に表示される様になります。以上でCopilotを使う準備が整いました。拡張機能をインストールするだけでとても簡単ですね。

GitHub Copilotを実際に使ってみる

今回は試しにPythonのFlaskで、ボタンを押すと現在時刻を取得する簡単なWebアプリケーションをCopilotを使って作ってみます。

Copilotの主な機能は、コーディング中に次に入力すると予測されるコードやコメントを提示してくれることです。そしてこれを採用する場合はTabキーを押すことで入力することができます。また、コメント文で「○○の処理をする関数」等と書き、その下に関数を作成しようとするとその処理のプログラムも予測して提示してくれます。


①アプリの画面をhtmlで作る。

先頭行にコメントで「ボタンが一つあるhtml」と入力すると、改行とTabキーのみでこのhtmlを作成することができました。formタグ内のactionの値は存在しないindex.phpとなってしまっていますが、「ボタンが一つある」といったコメント通りにできています。

このボタンを押すと日付が取得できるようにここから修正していきます。


②PythonでFlaskアプリの実装

まずは先ほど作ったhtmlを表示するように基本となるコードを書きます。Copilotはコメントで指定して0から何かを作るのはそこまで得意ではないようなので、ここまではほぼCopilotの予測を使わずに書いています。


このコードに/dateでアクセスされた時に現在日時をJSON形式で返すような処理をCopilotと作成してみます。


こちらに関してもコメントの部分のみ入力し、Copilotで提示された選択肢からコードを選ぶだけでこちらのdate関数を作成することができました。


③htmlの修正

①で作ったhtmlのformタグ内のactionの値は、存在しないPHPファイルになってしまっていましたが、②で/dateの処理を書いたのでactionの値を/dateに変更し、methodもgetに修正します。今回は修正箇所も分かりやすく直接書き換えましたが、こういった書き換えをCopilotにさせることも可能です。

こちらもコメント以下のコードはCopilotの提示したコードから一つを選んだものです。ちなみに最初にCopilotに提示されたコードはこちらでした。

①の様に存在しないPHPファイルをリクエストするコードとなっていました。しかしCopilotの提示したコードの一つには今回書きたいコードが含まれていたので、選択肢を選んで正しいものを入力できました。


これでボタンを押すとJson形式で現在時刻を取得するWebアプリを作成する事ができました。ほとんど自分でコードを書くことなくできましたね。

GitHub Copilotを使ってみて

GitHub Copilotを使ってみての感想としては、

  • 便利!

  • コーディングの高速化が期待できそう

  • 自動で全てコーディングしてくれるものではない

といった感じでした。コードを多く書く際の作業時間の短縮にはとても有用だと思いますが、自分でもよくわからない処理をCopilot頼りにコーディングするのは危険であり、あまり良い結果が得られないことが多いと思います。

Copilot(副操縦士)の名前の通り、なんでも自動でやってくれるわけではなく自分が書きたいコードが決まっていて処理も頭にイメージできている際には、コーディング効率を大きく向上させる事が出来る物だと思いました。

今回はCopilotのメイン機能となるオートコンプリートスタイルの予測を使ってコーディングしましたが、実験的に使えるようになっているGitHub Copilot Labsではプログラミングコードを指定のプログラミング言語に変換する機能や、コードを読み込んで何の処理をしているかを説明させる機能等が使用可能です。

また、今後リリースされるCopilot Xではチャットでの対話を元にコードを作成する機能なども追加される様なので楽しみです。


以上、Github Copilotの紹介でした。今後は様々なAIサービスが生まれてくると思いますが、AIに仕事を奪われないように、AIを有用に使える人になっていきたいと思います!

最後まで読んで頂きありがとうございました。

(土屋)