今更ですが、Github Copilotのトライアルに踏み切りました。登場してからずーっとトライアルしたかったんだけどね、、訴訟沙汰にもなってるんですが、どうなんでしょうか。

で、感想はと言うと、最初は「んん?」と思ったのですが、慣れると本当に脳死プログラミングが出来ることが分かりました。

ポイントとしては、ChatGPTと同じくOpenAI完全協力でGPT-3がベースにある言語処理AIを使うので、コメントによる連想が大事と言うことです。

例えばGoのプログラムを書くとして、パスから画像ファイルを読み、特定のMIMEタイプを取得して画像化を判定する関数を作成するとします。この場合、

  • 「パスからファイルを読み込み、png、jpg、gifかどうかを判定する」というコメントを記述
  • 脳死で全体の雛形が提案される
  • 細かいところをコメントを与えて修正

という手順を踏むことでサクサク出来ました。凄いっすよね。

// パスからファイルを読み込み、png、jpg、gifかどうかを判定する
func isImage(path string) bool {
	file, err := os.Open(path)
	if err != nil {
		return false
	}
	defer file.Close()

	// ファイルの先頭512バイトまでを読み込む
	header := make([]byte, 512)
	if _, err := file.Read(header); err != nil {
		return false
	}

	// MIMEタイプを判定する
	switch http.DetectContentType(header[:]) {
	case "image/jpeg", "image/jpg", "image/gif", "image/png":
		return true
	default:
		return false
	}
}

精度的には正直ChatGPTの方がお化けだと思います。こっちのほうが、外部ライブラリ前提とかそういうものが提案されてきたりするので注意。でも、価格1/5っすからね。。

最初ChatGPTが出てきたときは、「Goのサーバ書いて」というとあまりに早くお手本のようなものが出てくるので絶望したんですが、これさえあれば一応ドキュメント調べずに似たようなものは書けたので、かろうじてやる気は回復しました笑

Copilotを使うと生産性が上がり、コード全体に対する目の行きやすさが向上する点はメリットな一方、便利すぎて細かなことは全く気にならなくなるのはデメリットかなあと思います。アドレナリンが出るどころか、本当に脳死しちゃうんですよね(笑)。ドキュメント読むとか頑張りたくなくなっちゃう。あと、問い合わせまで時間がかかるので、狙ったコードが出てこないと従来の書き方になり、知らない自分が悪いにも関わらずイライラします…笑

ただ、基本的にはかなり良いなと思っていて、コメントを書く力が身につけられるというメリットがあります。

そもそも良いソースコードとは、流れの見えるものだと思っています。私もプログラムを学び始めた頃、「コメントを書いてからコーディングせよ」と教えられました。要はAIがやってることってこれなんですよね。慣れれば慣れるほどこの視点は面倒になって、おざなりになってしまします。

基本的に見にくいソースコードはコメントをつけないだけでなく、大抵どうでもいいところにどうでもいいコメントがありがちです。こういうのをやると、基本的にプロセスごとでコメントを付けざるを得ず、リファクタリングによって適宜消すという作業になるはずなので、保守性は向上しそうな気がしますね。

更に精度や使い心地はかなり悪いですが、VS CodeだとCopilot Labsというリファクタリングツールがあり、英語だけどコメントとかも色々直してくれたりして時々役に立つかもしれない。

しっかしまあ、恐らくCopilotとChatGPTは今後マイクロソフトの大型投資によって、何らかの統合機能が提供されることは目に見えてますよね。しかも、そんなに遠くない未来だと思います。こんな凄すぎなものが統合したら、本当にプログラマーのあり方が変わってきそうな気がします…