GitHub Copilot AIによるコード生成プログラミングサポートツール

GitHub Copilot · Your AI pair programmer
GitHub Copilot works alongside you directly in your editor, suggesting whole lines or entire functions for you.

このツールはペアプログラミングと同様に自然言語による記述からプログラムコードやテストコードの生成を行う事が可能となっています。

Copilot Technical Preview - https://copilot.github.com/

Copilotの利用環境

まだ正式リリースではなく、技術的な検証を行っている段階の「テクニカル・プレビュー」版であり、どちらかというとリリース前のベータに近い段階です

現時点ではGitHubで申し込みを行ったユーザーに対してのみ限定的に利用が可能となっています。

なので、現時点では全員が利用出来る訳ではなく、申し込みを行ってGitHubがテクニカルプレビューのユーザーとしてOKが出たユーザーのみ利用することが可能です。

またこの機能自体はVScode上の拡張機能として提供されています。

MEMO
GitHub Copilotは完璧なコードを生成するものではなく、プログラマーのサポートとなるべく作られたツールです。

対応プログラミング言語

Copilotは多数のプログラミング言語に対応していますが、以下の言語では特にうまく動作するとの記載があります。

対応プログラミング言語
  1. Python
  2. JavaScript
  3. TypeScript
  4. Ruby
  5. Go

JavaScriptの例では関数名を記述するとコードを生成出来ています。

関数名からコードを生成 - https://copilot.github.com/

関数名としてcalculateDaysBetweenDatesそして引数として2つの日付を渡しています。

日本語にすると「日付の間の日数を計算する」という関数名となるため、関数の名前からどのような処理が必要かAIにより推測され、プログラムコードが生成されています。

テストコードにも対応

テストコードを提案をすることももちろん可能となっています。

適切なコメントを記述することにより精度の高い(プログラマーが期待している)コードが提案されるようです。

正確なコードを一発で生成してくれるという訳ではなく、Copilotの提案を受け入れるかどうかはプログラマー次第になります。

Pythonのテストコードを自動生成 - https://copilot.github.com/

またプログラマーなら経験した事がある、どうしても書かなくてはいけなくなった面倒な配列なども簡単に生成できそうです。

GitHub - https://docs.github.com/en/github/copilot/research-recitation

どのようにコードが生成されるのか

プログラマーが記述したはコメントや関数の名前などにはGPT-3の後継であるOpenAI Codexが活用されているようです。

GPT-3とは
  • 正式名称はGenerative Pre-Training-3
  • OpenAIが開発している言語モデル
  • 人間が書いたような文章を自動生成できる
OpenAI
OpenAI is an AI research and deployment company. Our mission is to ensure that artificial general intelligence benefits all of humanity.
OpenAI website

OpenAIはイーロン・マスクさんが設立した会社で、2019年にマイクロソフトから$1Bの投資を受けています。

MEMO
$1Bは日本円換算でおよそ1,110億円になります。

GitHubはMS傘下の企業となるため、買収後の大きなシナジー効果が発揮されはじめているように思います。

OpenAI Codexとは
  • GPT-3の子孫となるシステム
  • GPT-3の英語に対し、Codexはプログラムコードを生成する

複数の機能を利用し、ようやくこの機能が実現出来ているようです。単純にスゴイですね。

AIの学習データにはGitHubで一般公開されているコードを元に学習が行われているとありますが、利用されているリポジトリなどの表示を見つけることはできませんでした。

個人的な見解ですが、GitHub Copilotに限らずAIの学習データにはGPLライセンスのものが含まれないよう厳密にチェックを行う必要があります。

GPLとは
  • 正式名称はThe GNU General Public License
  • プログラムの実行・改変・再配布することができる
  • 改変した場合はそのコードも公開する必要がある
  • 二次的著作物に関してもGPLでライセンスされなければならない

GPLは非常に強いコピーレフトを強制するため、もし学習データに含まれている場合、企業での利用には大きな障害となります。

自動生成されるコードに対する懸念

GitHub側でもすでにいくつかの懸念点があるようです。

安全でないコードを生成する可能性

安全ではないコーディングパターンやバグが含まれるコードは一般公開されており、Copilotもそれらを元コードを生成する可能性あります。

しかし、GitHubは学習データセットから安全でないコードを学習対象から外します。

攻撃的な出力を行う可能性

テクニカルプレビューでは、不快な言葉をブロックしたり、センシティブな文脈での提案の合成を避けるためのフィルターが搭載されています。この技術はリリース前のものであるため、GitHub Copilot は、偏った、差別的な、罵倒的な、または攻撃的な出力を含む、望ましくない出力を生成することがあります。

不快な出力を目にした場合は、copilot-safety@github.com に直接ご報告いただければ、私たちの安全対策を改善することができます。GitHub はこの問題を非常に深刻に受け止めており、GitHub Copilot で対処することを約束します。

ソフトウェア開発者の仕事に対する影響

より知的なシステムを導入することで、開発者の仕事に大きな変化をもたらす可能性があります。この技術によって、既存のエンジニアの生産性が向上し、手作業が減り、面白い仕事に集中できるようになると期待しています。また、GitHub Copilotは、より多くの人がソフトウェア開発に興味を持ち、次世代の開発者の仲間入りができるよう、参入障壁を下げる可能性を秘めていると考えています。

つまりこの仕組みによってエントリーレベルの仕事が大幅に減少する可能性があると述べているように思います。

生成されたコードのライセンス

GitHub Copilot を利用して作成したコードは、あなたに帰属します。友好的なロボットは時折感謝の言葉を述べたがりますが、GitHub Copilot の功績を称える義務は一切ありません。コンパイラと同じように、GitHub Copilot を使った出力はあなたのものです。

まとめ

自然言語からコードを生成してくれる。
自然言語からコードを生成してくれる、検索してコードを見つけてくるのではなく、インスピレーションを与えてくれる素晴らしいツールのように見えます
完璧なコードではない。
現時点では生成されたコードはプログラマーの意図とは異なっている可能性もあり、コードを読んで修正もしくは、別の提案を引き出す事が出来るレベルのプログラマーではなければ活用することは難しいように思います。
全くの初心者では使うことが難しい。
全くの初心者には使うことはまだまだ難しいものの、ある程度習得した中級者には非常に強力なサポートツールとして役に立つ事は間違いないように思います。
しかし初心者や学習者の大きな手助けとなる。
初級ユーザーの「これどうやって書くのかな」という疑問にコードでサンプルをポンポン表示してくれる素晴らしい仕組みだと思います。

特にサンプルコードを検索して見つけてくるというプログラマーにとってよくありがちな時間が掛かる作業を大幅に軽減してくれる部分が良いですね。


※この記事では原文である英語から日本語への意訳を行っているため、厳密には意味が異なる場合があります。

References

GitHub Copilot · Your AI pair programmer
GitHub Copilot works alongside you directly in your editor, suggesting whole lines or entire functions for you.