Cursor ComposerとCopilot Editsのよしなに力の比較
この記事は モニクル Advent Calendar 2024 の17日目の記事です。
16日目はCloud RunからCloud SQLへIAM データベース認証で接続する でした。そちらもぜひ読んでみてください!
Cursor (Composer) vs Copilot Edits
CursorのComposer(以下Cursor)とVS CodeのCopilot Edits(以下Copilot Edits)を比較していきます。
モチベーションとしてはある程度細かく指示を出さずともよしなにやってくれることを期待します。また、Copilotの導入は進んでいてもCursorの利用事例はないという現場にCursor良いよという共有ができればと思っています。(筆者はCursor愛用者です。)
前提
利用モデル
Copilot Edits: GPT-4o(恐らく)
Cursor: claude-3-5-sonnet
Copilot Editsは2024/12/15現在Previewのようです。モデルは2024年7月31日の記事によるとGPT-4oのようです。 ただし、2024年10月29日にはclaude-3.5-sonnetやo1-previewが利用できるようになったと発表されており、Copilotの設定を変更することで利用可能です。
今回は設定を変更せずにGPT-4oを利用しました。 (実は記事を書いた後にモデルを選択できることに気づいてしまったのでまた後日検証・追記したいです。)
Cursorの方のモデルはclaude-3.5-sonnetを利用しました。
やってみること
まずは honojs/examples を拝借しまして、blogのコードを編集してみます。
簡単な指示を与えてよしなにファイル生成してもらうテスト
「blog appにカテゴリ機能を追加して」と入力しました。
結果
Cursor: api.ts
と model.ts
の2ファイルを編集
Copilot Edits: api.ts
のみ編集
←がCursor、→がCopilot Edits(VS Code)
Copilot Editsはなぜか1ファイルしか編集してくれませんでした。カテゴリ機能を追加するためにはmodel.tsへの実装も必要になるのでこれでは動きません。
一方で、Cursorはきちんとmodel.tsも編集してくれました。
ただし同様に1発では動いていなくて、既存実装のKVを無視してD1Databaseを利用しようとしながらもそのbinding実装をしていないのでエラーになっています。
(D1Databaseはリポジトリ内を探しても利用しておらず、気が利くといえばそうなんですが、、)
Cursorでコードを完成させる
D1Databaseは一旦やめてもらいましょう。
「既存実装を踏襲してエラーが無いようにしてください。」
これでD1Databaseを勝手に使い始めたことを改めてKVにてキレイに実装してくれたようです 🎉
Copilot Editsでコードを完成させる
Copilot Editsの実装は不足しているので実装を続けてもらうように下記の指示を出します。
「modelの実装もして」
すると今度は中身が空の関数を定義してくれました。
どうやら丁寧に指示を出さないといけないと感じたので下記のように指示をしました。
「追加した関数の実装をすべて行ってください。エラーが無いようにしてください。」
ここまで指示をするとようやくキレイな実装をしてくれたようです 🎉
その他Cursorの魅力的な点
CursorはTabによるautocompleteがとても強くて例えば一箇所変更をすると「ここも変えたいんでしょ?」みたいにSuggestしてくれます。
(↑ /posts
を /entries
に変えてみた直後のサジェスト)
これが大変便利で、ファイル内で変更が必要な箇所はどんどんTabキーで直していってくれます。 筆者はこの体験に慣れてしまって正直この機能がVS Codeに入るまでCursorから離れたくないなという気持ちがあります。
所感
Cursorの方が短い指示でもよしなにやってくれやすいように感じました。
ただ上記にも書いたように現状Cursor愛用者なのでバイアスがかかっているかもしれません。
一方でVS Codeでも丁寧に指示を出せば概ねキレイに実装をやってくれます。ただ中身が空の実装をとりあえずで返してくる という体験は正直使うのが億劫になってくるなぁと思います。また、モデルをClaude 3.5 Sonnetやo1にするのは試せていないのでまた後日試したいと思っています。
モデルの差だけでなく、例えばカスタムインストラクションとかで解決する道があるのかもしれませんが、現状Cursorの方がデフォルトの状態ですぐにいい感じにコード編集してくれる気がします。
とはいえ進化が早いのでどちらも使いながら様子をみたいですね。
Discussion