AIペアプログラミングのススメ【エンジニア1〜2年目必読】

## はじめに
最近日本でもAIがかなり実用的なレベルで身近に登場することになってきて驚いております。
先日ガストで食事した際に猫型ロボットが料理を運んできてくれた時には、微笑んでしまいましたｗ

そんな中、自分も実際にプログラミングを通してAIツールを実際に使っていて、これは便利すぎて革新的だなと思った**ChatGPT**と**Github Copilot**の組み合わせを用いた自称「**AIペアプログラミング手法**」をご紹介したいと思います。

- 想定読者
    - プログラミングの仕事をしたいと思って目指している方
    - プログラミング経験1~2年目の方
        - 個人的には3年目以降の人も効率化のため、ガンガン取り入れるべき内容だと思っておりますが、自分自身がエンジニア経験2年目でまだまだ知らないことが盛りだくさんで、自分と同じような境遇の方には絶対に刺さる内容だと思ったため、2年未満の人を推奨としてます。

※ベテランエンジニアの方などで、「AIなんかに頼らなくても生きていけるし・・・イラネ」って方はいると思うので、そのような方は必要ない内容かと思います。

:::note info
下記、個人開発でエンジニア専門マッチングサービスを開発しましたので、是非未経験からエンジニア目指している人！現役エンジニアで教えたい人！使ってみてください！
:::

https://dokupro.dev/

## 結論
2人のAI(CoPilot & ChatGPT)は、もはや相棒になりつつあります。
なんていい時代に生まれたんだ・・・！ってなります。

## メリット

### Copilot & ChatGPT 
- 今までどうしてもわからなく上司に聞いていたはずの部分がなくなり、自己完結？自走？することができ、上司の時間を奪わずに済みチームとしてのパフォーマンスが向上する。
    - これは自己完結？自走？しているのか怪しいところではありますが・・・ｗ
    - 自己完結するということは、一見コミュニケーションする時間が減るのでデメリットにも見えますが、最終的には作業にかかる時間が減ってコミュニケーションする時間をむしろ確保できるので、本当にやりたいことの時間を捻出できるようになると思います。

- Google検索やドキュメントを見て調査してから理解する手間が省ける。
    - これはどういうことなのかの詳細後述しますが、Copilotだとエディター上でやりたいことの参考となるコードを提案してくれたり、ChatGPTだと叶えたいことを質問すればコードを提案してくれて、そのコードの説明もちゃんとしてくれますし、さらに質問を投げて聞くこともできます。

### Chat GPT
- 手順も含めて詳細に教えてくれる
    - ライブラリなどのinstallから丁寧に教えてくれたりするのが便利
    - DB設計なども教えてくれたりするので、参考にできる
    - 新しい言語を学ぶ際にも使える
        - [AI 支援学習: ChatGPT、Copilot、および Advent of Code を使用して Rust を学習する](https://simonwillison.net/2022/Dec/5/rust-chatgpt-copilot/)
- コンテキストが複雑じゃないものなら、基本なんでも精度高めに答えてくれる

### Github Copilot
- コンテキストも見て提案してくれるので、単純に補完機能として効率化できる
    - これも地味に便利で、Github Copilotではコードの提案はコメントで書いた内容だけではなく、前後のコードを見てそれっぽい高精度なコードを提案してくれるので、かなり補完を採用できておりコードを書くのが楽になっております。


## デメリット
- 基礎的な部分の理解を無視して、AIに依存しすぎると変更があったときに大変になりそうなので、ちゃんと理解してあくまでプログラミング支援ツールとして使用するように注意したほうがよいと思いました。
    - ここはChatGPTで、コードの説明などをしてもらうことでカバーできそうですね。

- 月額料金が発生してしまう
    - Github Copilotは確か月額1300円位？料金がかかります。
        - Github Copilotの代替として無料で使える、「[Tabnine](https://www.tabnine.com/)」もおすすめです。

## 前提(準備)
今回CopilotとChatGPTのインストール方法や詳細な使用方法などは割愛させていただきますので、下記参照してインストールと使い方を確認してご準備ください。

- VSCode
    - 自分はVSCodeなので、VSCodeと記載してますが他のエディターでも大丈夫かと思います。
- Copilot
    - [使い方参考はこちら](https://zenn.dev/riya_amemiya/articles/7a7cec9244e4b9)
    - [公式サイト](https://github.com/features/copilot)
        - 基本月額料金掛かりますが、無料トライアル期間あります。
- ChatGPT
    - [使い方まとめはこちら](https://github.com/features/copilot)
    - [公式ブログ](https://openai.com/blog/chatgpt/)

※Github Copilotの月額料金払うの辛いよ・・・！！って方下記「Tabnine」で代替できます。
- [Tabnine](https://www.tabnine.com/)
    - [使い方参考はこちら](https://note.com/sangmin/n/n074aaa4e2be5)

## 実践 AIペアプログラミング手法
自分は基本、Copilotがコンテキストも見てコードを提案してくれるので参考にしつつ、
Copilotが提案してくれたコードの意味がわからない場合や、コンテキストを含まないもので何かやりたいことやわからないことは、ChatGPTに聞いて教えてもらうといったような手法をとってます。

> - GitHub Copilot runs in my VS Code editor. I’ve used it for the past few months mainly as a typing assistant (and for writing things like repetitive tests). For this project I’m going to lean a lot more heavily on it—I’m taking advantage of comment-driven prompting, where you can add a code comment and Copilot will suggest code that matches the comment.
> - ChatGPT. I’m using this as a professor/teaching-assistant/study partner. I ask it questions about how to do things with Rust, it replies with answers (and usually a code sample too). I’ve also been using it to help understand error messages, which it turns out to be incredibly effective at.

海外の開発者も、上記引用のようにAIペアプログラミング手法のように２つのAIを用いている方がいるみたいですね。
- **Github Copilot**
    - 主にタイピングアシスタントとして（そして反復テストのようなものを書くために）使用しているかつ、やりたいことをコメントで書いて、Copilotがそのコメントにマッチするコードを提案してくれたものを参考に開発していく。
- **ChatGPT**
    - 主に教授、指導助手、学習パートナーのように、ChatGPTに使い方について質問して、答え（通常はコードサンプルも）を返してくれたものを参考にしたり、エラーメッセージを理解するのにも使っている。

**右手にCopilot、左手にはChatGPTといったような感じですね！**

## 具体例
実装する前に忘れずに、ブラウザのタブにChatGPTは固定させておきましょう。
- [Chromeタブの固定の仕方はコチラ](https://support.google.com/chromebook/answer/177891?hl=ja#:~:text=%E3%82%BF%E3%83%96%E3%82%92%E5%9B%BA%E5%AE%9A%E3%81%99%E3%82%8B%3A%20%E3%82%BF%E3%83%96,%E3%81%AB%E5%B0%8F%E3%81%95%E3%81%8F%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82)
     - 下記のようによく使用するものページは左側に寄ってアイコンだけ表示させておくことが可能です。
![スクリーンショット 2022-12-11 17.04.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1040483/48ba6165-15b1-9163-c6da-d7e0ca650f05.png)

それでは準備が整ったので、自分が実際にAIペアプログラミングをしてみた一例を紹介します。


### ChatGPTにDB設計を聞いてみる
作成したいアプリケーションの大まかな概要的なものを投げかけると、
DB設計のイメージを共有してくれる。1からテーブル設計などを考えずに済みそう。

- DB設計を大まかに教えてくれる
![スクリーンショット 2022-12-08 17.00.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1040483/0b49cd25-5e23-0eb9-5b8a-cb7023694dc0.png)

- なぜ該当のテーブルが必要なのかも知ることができる
![スクリーンショット 2022-12-08 17.01.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1040483/ad7ea531-75ff-0cd5-5bf9-032e1fe8f2b1.png)

- 自分が思った意見を伝えたら、肯定しつつも問題点も添えて明確な回答をしてくれる・・・ｗ
![スクリーンショット 2022-12-08 17.01.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1040483/4a37c110-a703-9ab0-0ab3-a61874674519.png)

### 実装してみる

１. Copilotがコンテキストを見つつ、コメントに沿ったコード例を提案してくれる
![スクリーンショット 2022-12-11 16.12.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1040483/0a0ad70c-1234-8f2e-7af3-7fdec38f3598.png)

２. Copilotが提案してくれた`Auth::attempt()`の部分がわからないので、ChatGPTに聞いてみる
![スクリーンショット 2022-12-11 16.18.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1040483/29ef47f4-69db-ee75-3f34-3450a2435fdf.png)

- 見て分かる通り、雑に質問を投げても思った以上に丁寧に説明してくれるので、公式ドキュメントを見たりググる必要がないですねｗ
これは至れり尽くせりでございます、、、。

:::note warn
補足
今回「下記のコードについて教えて」と質問が雑いですが、基本質問する際は「Laravel 下記のコードについて教えて」などと、先頭に言語を入れてあげたほうが親切ですし、精度が良くなる気がします。

※雑な質問に慣れてしまうと、対人間のときも受け手に対して想像力に欠けた質問をしてしまいそうなので、注意ですねｗ
:::
 

３. ChatGPTに聞いた上で、Github Copilotが提案してくれたコードをそのまま使うか、参考にしつつ改良して自分で書き換えるかを行う

- 今回はCopilotが提案してくれたコードを一部修正して採用
![スクリーンショット 2022-12-11 16.56.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1040483/34630d0d-328f-1d56-608f-70a3752f20f6.png)


４. 動作確認してエラーが表示され、デバッグしても原因が理解できない場合は再度ChatGPTに確認する。

５. ...以下同じようにCopilotさんと、GPTさんと共にペアプロしてもらう。




## 終わりに
実践してみた方はいかがでしょうか！？
ちなみに自分はとても感動しております！

自分は決して知識量が多かったり技術力が高かったり、頭がいい訳ではないのでこういった便利なツールをガンガン採用して効率よく開発していきたいと思っております。
こんな便利なツールを作ってくれた方に本当に感謝したいです！

結構新しいことを取り入れるのって、億劫になってしまいますが今回のこの２つのAIプログラミング支援ツールを用いたAIペアプログラミング手法は個人的にかなり革新的だなと感じておりますので、少しでも多くの方に導入して頂いて感動してもらえたらなと思っております・・・！

エンジニアになってまだ月日がそんなにたってないよという方はなおさら激推しです。

もしも、もっとこうした使い方があるんじゃないとか、実際にAIペアプロしてみて感動したよ！などあればお気軽にコメントして頂けたらと思います。

最後に自分が最近見つけたChatGPT向けの、Google拡張機能もとっても便利なので
ぜひ試してみてください！！

https://qiita.com/derasado/items/8c60e4eefbb11e3ccf1c

## 参考
- ChatGPTを使って新しい言語を学習

https://simonwillison.net/2022/Dec/5/rust-chatgpt-copilot/

- ChatGPT公式ブログ

https://openai.com/blog/chatgpt/

- ChatGPT使い方まとめ

https://qiita.com/sakasegawa/items/82069c97a1ee011c2d1e

- Copilot公式

https://github.com/features/copilot

- Copilot使い方参考

https://zenn.dev/riya_amemiya/articles/7a7cec9244e4b9

- Tabnine(Github Copilot代替)

https://www.tabnine.com/