AIコーディングツールの比較

元ネタ：https://medium.com/artificial-corner/i-tried-multiple-ai-coding-assistants-these-are-the-best-bb4d6a735fc1

AIコーディングツールはたくさんありますが、どれも完璧ではありません。コードを学習している方にとっては一つのツールが便利であるかもしれませんが、コードをテストしたい方にとっては別のツールがより良いかもしれません。

これが私が見つけた最も優れたAIコーディングアシスタントです。

## 1. GitHub Copilot: 総合的に優れている汎用コーディングアシスタント

GitHubのAIツールは、リアルタイムのコード作成に革新をもたらします。ChatGPTに似たインタラクションスタイルを提供しつつ、コーディングに特化しているところが魅力です。さらに、エディタで作業しているプログラムを継続して構築する能力も備えています。

私が特に注目した機能の一つはチャット機能です。関数の作成方法について問い詰めたり、コードの特定の部分についての疑問を解消したりすることができます。まるで、洞察力や解決策を提供するために待機しているコーディングの達人がいるような感じです。

> **フィボナッチ数列を計算するプログラムをGitHub Copilotで実装してみる**
> 

![https://miro.medium.com/v2/resize:fit:1260/0*4wjGYuMzWC_2fQAQ.png](https://miro.medium.com/v2/resize:fit:1260/0*4wjGYuMzWC_2fQAQ.png)

Another thing I really like is that Copilot doesn’t just stop after giving a response. It keeps the ball rolling, offering up possible questions I might want to ask next or things to consider. It’s like having an ongoing conversation with your code.

Plus, there’s this feature that lets you move the suggested code into your editor. This creates a seamless flow, letting you bounce between the chat and the editor.

もう一つ私が本当に気に入っていることは、Copilotが答えを出した後も、まるで自分のコードと継続的な会話をしているように、次に尋ねたい可能性がある質問や考慮すべきことを提供する機能も持ちます。

さらに、提案されたコードをエディタに移動させる機能があります。これにより、チャットとエディタの間でシームレスに移動できます。

![https://miro.medium.com/v2/resize:fit:1260/0*nO8IYX2CxAyzLJFj.png](https://miro.medium.com/v2/resize:fit:1260/0*nO8IYX2CxAyzLJFj.png)

エディタ内でマルチタスクをこなすのが好きな方は、Ctrl + i**.**を押すことでCopilotチャットを取得できます。

![https://miro.medium.com/v2/resize:fit:1260/0*zqURgwMEskWlDLgY.png](https://miro.medium.com/v2/resize:fit:1260/0*zqURgwMEskWlDLgY.png)

以下は私のお気に入りのコマンドの一部です：

- コードを深く掘り下げる：`/explain`
- 行き詰まったり、コードの問題を修正する：`/fix`
- コードにテストを行う：`/tests`

![https://miro.medium.com/v2/resize:fit:1260/0*OtuJkjUb7_LH0Aw0.png](https://miro.medium.com/v2/resize:fit:1260/0*OtuJkjUb7_LH0Aw0.png)

CopilotはChatGPTの機能を、あなたのIDEに統合するなイメージで、コーディングを努力なく、より効率的にしてくれます。

GitHub Copilotの拡張機能をVisual Studio Code、Visual Studio、JetBrains、Neovimに追加することができます。

## 2. CodiumAI: テストに最適

CodiumAIが他のAIツールとして優れているのはテスト機能で、他のAIツールと比べて大きく進歩してます。コードの補完だけに焦点を当てるのではなく、私たちのコードのテストに焦点を当て、それを改善する方法を提供してくれます。

![https://miro.medium.com/v2/resize:fit:1260/0*LlabMgXoK_iVMr_r.png](https://miro.medium.com/v2/resize:fit:1260/0*LlabMgXoK_iVMr_r.png)

この機能は、プロジェクト開発を行っているとき、弱点や潜在的な脆弱性を特定する際に本当に機能を発揮します。

![https://miro.medium.com/v2/resize:fit:1260/0*kudbwJh2LOyXoPC0.png](https://miro.medium.com/v2/resize:fit:1260/0*kudbwJh2LOyXoPC0.png)

アシスタントは問題を特定するだけでなく、さらに一歩進んで（まだ存在しない場合）作成できるテストを提案します。さらに、各テストと対話するオプションがあり、それらをより密接に私たちのニーズに合わせて調整することができます。

![https://miro.medium.com/v2/resize:fit:1260/0*FPnisM5p4rzl4W9q.png](https://miro.medium.com/v2/resize:fit:1260/0*FPnisM5p4rzl4W9q.png)

CodiumAIはコードの説明も提供します。入力やコードフローから出力や例まで、すべてを分解します。そのドキュメンテーションのレベルは素晴らしいです。

![https://miro.medium.com/v2/resize:fit:1260/0*WxHZ04HlbbaePTgT.png](https://miro.medium.com/v2/resize:fit:1260/0*WxHZ04HlbbaePTgT.png)

このツールは、最近僕が使っている中で最高のテストジェネレーターを持っています。テストの実行に焦点を当て、いくつかの良い提案を出してくれます。

## 3. AWS Code Whisperer：Amazonエコシステムにリンクしたアプリを書くのに良い

他のAIコーディングアシスタントと同様に、AWS Code Whispererでは、IDE内で少量のスニペットから全関数までのコード提案を生成することができます。

![https://miro.medium.com/v2/resize:fit:1260/0*AlhhtXG40R1Qtkvm.jpeg](https://miro.medium.com/v2/resize:fit:1260/0*AlhhtXG40R1Qtkvm.jpeg)

しかし、汎用的なコードの提案に加えて、このツールはAWS APIの使用に関するコードの提案を提供するように設計されています。Amazonのエコシステムにリンクしたアプリを書いているなら、このコーディングアシスタントは他のものよりも役立つでしょう。

![https://miro.medium.com/v2/resize:fit:1260/0*MiJd14t4Aoh3aY-7.png](https://miro.medium.com/v2/resize:fit:1260/0*MiJd14t4Aoh3aY-7.png)

これは私が気に入っている機能です。エディターで考えている関数についてコメントを書くと、数秒であなたのアイデアはコードに変換されます。

![https://miro.medium.com/v2/resize:fit:1260/0*LAEFpVZBeiGzI8kL.png](https://miro.medium.com/v2/resize:fit:1260/0*LAEFpVZBeiGzI8kL.png)

このツールは、提案するコードの参考資料も提供しますが、これらの参考資料に従ってみると、時々、機能しないリンクにつながることがあります。

## 4. Tabnine：直感的なコーディング支援ツール

このコーディングアシスタントの目立った特徴は、私たちがコードを目指していることを予測し、努力せずに隙間を埋める能力です。

リストを作成する関数が欲しいとしましょう。私はただ関数に適切な名前を付ける必要があります。

![https://miro.medium.com/v2/resize:fit:889/0*tUMv-Bo9UNOfhsME.png](https://miro.medium.com/v2/resize:fit:889/0*tUMv-Bo9UNOfhsME.png)

そして、このコーディングアシスタントは私のために関数を自動補完します。

![https://miro.medium.com/v2/resize:fit:976/0*IKsDJyolAnJmqcEy.png](https://miro.medium.com/v2/resize:fit:976/0*IKsDJyolAnJmqcEy.png)

さらに、Tabnineのチャット機能は非常に便利です。これにより、エディタで作成しているコードについて質問することができ、発生したどんなコーディングの問題も解決する準備ができているかのように反応します。

![https://miro.medium.com/v2/resize:fit:1260/0*E2Gn0v0Ox7yvpN3H.png](https://miro.medium.com/v2/resize:fit:1260/0*E2Gn0v0Ox7yvpN3H.png)

この機能をテストするためのプロンプトを作成しましょう。

> create_list関数の入力サイズに応じてメモリ使用量はどのようにスケーリングしますか？
> 

![https://miro.medium.com/v2/resize:fit:1260/0*5qW9lMMk-aA4lkLJ.png](https://miro.medium.com/v2/resize:fit:1260/0*5qW9lMMk-aA4lkLJ.png)

さて、最初の関数を少し壊してみましょう。そしてコーディングアシスタントにコードを修正できるかどうか尋ねてみましょう。

![https://miro.medium.com/v2/resize:fit:988/0*k-LcYluqXebGTqZs.png](https://miro.medium.com/v2/resize:fit:988/0*k-LcYluqXebGTqZs.png)

> 私のコードのcreate_list関数で問題に遭遇しました。潜在的なエラーを特定し、それらを修正する方法を提案してもらえますか？
> 

以下がフィードバックです。

![https://miro.medium.com/v2/resize:fit:1260/0*F72EeGOyGTvMi0RH.png](https://miro.medium.com/v2/resize:fit:1260/0*F72EeGOyGTvMi0RH.png)

さあ、このAIコーディングアシスタントが持っているいくつかのコマンドを見てみましょう。

```
/explain-code
```

![https://miro.medium.com/v2/resize:fit:1260/0*O37ufLuYvD76M7RA.png](https://miro.medium.com/v2/resize:fit:1260/0*O37ufLuYvD76M7RA.png)

私たちが作成した機能のテストシナリオを作成したい場合、このコマンドを使用します:

```
/generate-test-for-code
```

![https://miro.medium.com/v2/resize:fit:1260/0*4nwGvr3iBy7vpqt1.png](https://miro.medium.com/v2/resize:fit:1260/0*4nwGvr3iBy7vpqt1.png)

回答としては悪くないですが、機能の本質的な制限を強調するためのより具体的な例を期待していました。

別の話題に移ると、エディタで*create_list*関数を作成したときと同様に、AIに例を自動的に入力させることもできます。

![https://miro.medium.com/v2/resize:fit:1260/0*sXsZGpuF3o8PBqb1.png](https://miro.medium.com/v2/resize:fit:1260/0*sXsZGpuF3o8PBqb1.png)

このAIコーディングアシスタントは時間を節約してくれます。一行一行のコードを打つ手間を省いてくれます。しかし、まだ改善の余地があります。

## 5. ChatGPT/Bard：コード学習に最適

ChatGPTとBardは、多くのタスクに対して良い結果を出し、コーディングはその一つです。ただし、チャットボットが最善の選択肢であるとは限りません。これは主に、余計な情報を多く投入する傾向があるからです。確かに、この問題はプロンプトエンジニアリングに深く入ることで解消できるかもしれませんが、これらの技術に慣れていない人にとっては少々ハードルが高いかもしれません。

> リストの要素を合計するPythonコードを書いてください
> 

![https://miro.medium.com/v2/resize:fit:938/0*pjheEv55QGt-4K6u.png](https://miro.medium.com/v2/resize:fit:938/0*pjheEv55QGt-4K6u.png)

> テストケースのセットを作成する
> 

![https://miro.medium.com/v2/resize:fit:1042/0*RBiYe1ZNoFL7jwIy.png](https://miro.medium.com/v2/resize:fit:1042/0*RBiYe1ZNoFL7jwIy.png)

Bardの機能性はほぼChatGPTと同じ範囲にあります。Bardは、コードの回答を取得するソースについて少し透明性がありますが、ミスを犯しやすく、しばしば目標を逃します。

通常の利用ではChatGPT/Bardと通常のコードエディターを切り替えながら作業する事は負担になりません。特に新しいコーディングの概念を学んでいる場合はその方が便利な場合があります。しかし、最近のコーディングアシスタントは、私たちのコードの開発とテストを支援するために機能やUXがどんどん改善されているので、AIコーディングツール一本に絞った方がチャットボットより使いやすい環境を提供してくれるようなる、と考えます。

## まとめ

1. 新しいプログラミングの概念を理解するためには、私は間違いなくChatGPTまたはBardを使用します。彼らは情報の金鉱のようなもので、好奇心を持っている何でも深く掘り下げることを提供します。
2. CodiumAIはコードテストに適しています。これはすべて、スピードと効率性についてで、コードを書くときにリアルタイムのフィードバックを提供し、潜在的な落とし穴を指摘します。
3. GitHub Copilotは私の汎用的な目的のコーディングアシスタントです。
4. 経験豊富なプログラマーも、AWS Code WhispererやTabnineのようなコーディングアシスタントから利益を得ることができます。