GitHub Copilotがめちゃくちゃ優秀だったので紹介

# GitHub Copilotとは
AIがコーディングの支援をしてくれるサービス
コメントアウト文の内容・関数名・型定義名から推測して、最適なソースコードを提案してくれます。
さらに約１０個ほど候補を出してくれるため、自分で選択することも可能です。

GitHub Copilotを導入することでコーディングを高速化し、複雑なビジネスロジックに集中できるようにして、優れたソフトウェアの構築をサポートするために、開発されたそうです。

# ライセンス
個人向けだと毎月10ドル、年間だと100ドル（20ドルお得！）　
日本円に直すと毎月1360円（同じく2023年3月5日現在）

法人向けだと1ユーザーごとに毎月19ドルだそうです。
日本円に直すと毎月2580円（同じく2023年3月5日現在）

法人向けの`GitHub Copilot for buisiness`が2023年2月15日に一般公開されたため、弊社でも採用を進めています。

# 導入
公式サイト

https://github.com/features/copilot#pricing

#### １、体験フリープランに入る
サイトにアクセスして、「Start a free trial」をクリックするとGitHubに飛ぶので、承認。
初めの60日間は無料で使えますが、クレジットカードの登録が必要

#### ２、エディタ側の設定
VScodeを開いて、拡張機能を追加
「GitHub Copilot」と検索すると、以下の拡張機能が出てくるので、インストールする
![スクリーンショット 2023-03-05 21.59.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/6f0489c2-6f95-3e50-f5b8-d1bcc7182900.png)

インストールするとGitHubとの連携を求められるので、SignInして承認する。

# 実際に試してみる
javascriptで検証してみます。

#### その１、関数名から推論
公式ドキュメントにあるように、引数に渡ってきた時間の差分を出す関数を作成するとします。
![スクリーンショット 2023-03-05 22.13.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/c04d7405-6cef-6fd3-fb56-de355f0666b4.png)
関数名を入力するだけで、その後の推論を出してくれました！
もちろんアロー関数でも同じように推論を出してくれます。
github copilotによって提案されたコードを採用する場合はtabキーを押すことで反映されます。
もし、その他のコードも見てみたい場合はctl + enterで10パターン提案してくれます。
以下画像です。
![スクリーンショット 2023-03-05 22.15.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/1bc780ce-d482-67bf-96ed-ab4e92d5dea3.png)
自分の好みに合わせて、ソースコードを選択できるのはめちゃくちゃ評価高いです。

#### その2、コメントアウト文から推論
jsonplaceholderから取得したtodoリストを一覧表示してくれるコンポーネントをReactで書いてもらいます。
まずはコメントアウトで要望を記載
![スクリーンショット 2023-03-05 22.22.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/9bc8c7b5-125b-ad07-e837-2026b596a41a.png)

はじめにReactを読み込むためのimport文とfetch処理に使うaxiosのimportを提案してきました。
![スクリーンショット 2023-03-05 22.22.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/d5e92509-eb4f-33a2-1f43-34513f58092d.png)

次に関数コンポーネントとstate管理するためにuseStateで変数を定義してます。
この時点でヤバイ
![スクリーンショット 2023-03-05 22.23.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/2b8858fb-5198-19bf-54c4-c43e8d0ccd45.png)

次に画面マウント時にデータを取得するためのfetch処理を提案してくれました。
![スクリーンショット 2023-03-05 22.25.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/ebdbfb4d-ced3-ece9-6712-10ea6c079e1d.png)

最後にブラウザに表示するためのhtmlを提案してくれました。
ちゃんとmap関数で一覧表示できるようになってるし、h1タグでのタイトル付きです。
あまりにも凄い...
![スクリーンショット 2023-03-05 22.26.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/8482733e-bac8-61de-f59c-be0be5cd10ca.png)
Reactみたいなライブラリでもこのように最適なソースコードを提案してくれました。

※Reactでクラスコンポーネントで記載したい場合
コメントアウト文でクラスコンポーネントで記載して欲しい旨を書くと、ちゃんとその通り書いてくれます。
使いたいライブラリやコーディングルールをコメントアウトに書くとより自分が求めている理想のソースコードを提案してくれます。
![スクリーンショット 2023-03-05 22.29.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/584a3b23-4fff-9290-8cfc-44d162896476.png)


#### その3、型定義から推論
Userデータのtypeを定義してみるとします。

早速first_nameを候補として出してきました。
![スクリーンショット 2023-03-05 22.31.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/153fdee3-7e55-26bd-983c-65bb7a25eacb.png)

しばらくtabキーを押して、反映してみるとたくさん出てきました。
ユーザーデータに入ってそうなデータがちゃんと入ってます。
![スクリーンショット 2023-03-05 22.33.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/b78123a3-d990-fb3d-68f1-382dce203f1c.png)

# 別の言語でも検証（Python）
pythonでは与えられた引数にシグモイド関数を使って変換する関数を書いてもらおうと思います。

シグモイド関数になってる...
![スクリーンショット 2023-03-05 22.36.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/3ea13571-8cc0-346c-1a2f-eb27418ea263.png)

さらにこの関数をテストするためのコードも提案してくれます！
![スクリーンショット 2023-03-05 22.38.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1812049/061ba249-ab21-2b02-9301-9c9b721f2b37.png)

# 使ってみての結論
有償ではあるものの、入れるべきだと思いました。
コーディングが早くなるだけでなく、AIでも判定できるような直感的な関数名を必然的に書くようになるのと、
コメントアウトを入れることで他のエンジニアにも理解できるようになるため、結果的に可読性も上がりコーディング力も上がると思いました。

また、このGitHub Copilotは自分の普段書いているソースコードを参考にして、コードを提案してくれるため、出てきた候補のソースコードも違和感なく採用することができます。
ただ全てが正しいわけでもないので、AIと一緒にコーディングを考えながら進めていくのが大切だと思います。
会社での開発にも全般的に取り入れて、コードの品質が変わったとか、開発スピードが変わったとかを検証してみたいです。