コード入力補完が優秀すぎるエディタ「Cursor」の紹介

# はじめに
こんにちは、株式会社インティメート・マージャーの直人です。
最近話題のコードエディタ「Cursor」について紹介します。

最近使い始めたのですが、GitHub Copilotと比べてコード入力補完機能がとにかく優秀だと感じます。
VSCodeからの移行もとても簡単に設定を引き継ぐことができます。

インストールは以下のリンクからできます！

https://www.cursor.com/

# Cursorとは？
VSCode(Visual Studio Code)をベースに作られたエディタで、見た目自体はあまり変わらず拡張機能も同じものが一通り使えるようです。
GitHub Copilotの機能をデフォルトでほとんど搭載しており、コード補完・チャットによる質問やコード生成をすることができます。

以下はCursorでの画像で、VSCodeとの違いは左サイドバーのデザインと設定の歯車マークが右上に移動したことくらいでしょうか。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3925807/e6c79ca5-4445-9610-ed83-59f0ba2c36d6.png)


# コード補完・コード訂正がスゴすぎる！
### コード補完
以下の画像の灰色で薄く表示されている箇所がAIによる補完です。
ユーザーが次に入力すると思われる文字を予測して補完し、さらに複数行の提案もしてくれます。
現在開いているファイルだけでなく、一度開いた他のファイルのコードの意図も考慮した提案をしてくれます。

私の体感では、**CursorのAIはGitHub CopilotのAIよりもコード補完の提案が早く、提案の質も高く感じます**。
次々に提案される補完を`Tabキー`で受け入れていくとスムーズに進めることができ、非常に快適です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3925807/abb2a724-bc1d-171e-aefa-dc37886a8c6d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3925807/e9600ecb-f44a-a26d-c937-48b4a429a5fa.png)

### コード訂正
**CursorのAIがGitHub Copilotよりも優れていると感じる点は特にこの部分です**。
GitHub Copilotでは、書き途中のコードの補完はしてくれますが、既存のコードを上書きして修正は基本的にできないと思います。
しかしCursorでは、以下の画像のようにスペルミスだけでなく文脈を理解してコード修正の提案をしてくれます。

`numbers`という配列の中に文字が混入していると、それを削除してさらにその先まで提案してくれています。
SQLのクエリを書く際の例を見ると、`SELECT`のスペルが間違っていたり`from`が小文字になっていて大文字に統一されていない場合は、正しく修正してくれていることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3925807/9116b282-94bd-3265-6861-7e1d3e5e94ba.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3925807/e4d71086-9e48-a7d0-66e4-7e4472d9f770.png)

# チャットも便利
こちらはCursor内のAIチャットの画面です。
ブラウザからChatGPTやGeminiなどをわざわざ開く必要がなくなり、現在開いているファイルの内容をコピペせずに伝えられて便利です。
Pro版では様々なAIモデルを選ぶことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3925807/5eabce14-7575-122f-95bb-70e9f76c7936.png)

また、チャット内で`@`を入力することで様々なコマンドを使用できます。
`Files`でAIに質問したいファイルを選んだり、`Git`でコミットの差分を簡単に渡せて変更内容を理解させたり、`Web`ではインターネットで情報を検索するように指示することもできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3925807/ed76fe77-06f2-2180-091b-cad1f25580e0.png)

さらに、コード内でチャットを使うこともできます。
AIに実装したい内容を指示して直接コードを書いてもらったり、リファクタリングを指示して見やすいコードに改善させることができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3925807/497d8bbf-3621-90a6-7fbf-bf44cc3116d7.png)

# 移行がとても簡単
「Cursorに興味はあるけど移行したら設定し直すのがめんどくさいんだろうな…」と思った方もいるかもしれません。
しかし、CursorではVSCodeの拡張機能や設定ファイル(settings.json)など各種設定をワンクリックで引き継ぐことが可能です！

Cursorインストール後の初期設定時に以下のように拡張機能や設定を引き継ぐか聞かれるので`Use Extensions`をクリックするだけで引き継ぎ完了です！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3925807/98dba9ab-a4da-e18a-5796-a78b574c7340.png)

初期設定後でも、右上の歯車マークからCursorの設定を開き`VS Code Import`から引き継ぐことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3925807/aa1f4dc9-b9ee-f3c2-d460-f08e5878bc56.png)

# デメリット
VSCode + GitHub CopilotからCursorに移行した際の個人的に感じたデメリットもあります。

それは「Gitコミットメッセージ生成」です。
(逆にこれ以外のデメリットは今のところほとんど感じていません)
キラキラしているようなマークを押すと、CursorもVSCodeでもコミットメッセージを生成できるのですが、現時点ではCursorの場合は英語になってしまうようです。
VSCodeのときは重宝していたので残念ですが、早めに対応してくれることを祈ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3925807/b3f459e3-f7d1-88a3-453b-32134d56c990.png)

また、この後の章で紹介しますが、GitHub Copilotに比べて有料版の料金がやや高いです。
しかし、個人的には料金以上の価値があると感じています。

# 料金比較
| プラン | Cursor/GitHub Copilot<br>Free | Cursor<br>Pro | GitHub Copilot<br>Pro |
| :-: |:-:|:-:| :-: |
| 料金 | 無料 | $20 | $10 |
| コード補完 | 2000回 | 無制限  | 無制限 |
| チャット | 50回の低速なリクエスト | 500回の高速なリクエスト<br>無制限の低速なリクエスト  | 無制限 |

Cursorではアカウント作成時に、2週間のProトライアル期間があります。

最新の情報や詳細は以下のリンクからご確認ください。

https://www.cursor.com/pricing

https://github.com/features/copilot

# おわりに
コードエディタ「Cursor」の紹介でした。  
コード補完やコード修正が記載したようにとても優秀で、私自身はVSCode + GitHub Copilotを使っていたころと比べて作業効率がかなり向上しました。
設定の移行も簡単で2週間のProトライアルが用意されているので、まずは試してみてはいかがでしょうか？

Cursorに興味を持っていただいた方は、以下のリンクからインストールしてみてください！

https://www.cursor.com/

また、インティメート・マージャーでは新卒から中途まで幅広く採用募集中です！
少しでも弊社に興味を持っていただいた方は採用情報をご確認ください！

https://recruit.intimatemerger.com/