お久しぶりです。ChatGPTを使えば毎週ブログ記事かけるっしょっと思っていたのですか、気づけば前回投稿から半年以上経ってました。

ゴルフし過ぎました。

2020年に社会人になってからVimで開発をし続けていたのですが、ついにVimを卒業してCursorというAIベースのエディタに転向しました。

理由は「Vimを使っている時点で、自分でコードを書こうとしてしまって、AIにコードを書かせる癖がつかないから」です。

今年の9月からAIに関するプロダクトの開発チームにjoinしたのも転向しようという考えに至るきっかけとなりました。

そんなAIベースエディタのCursorをどのように使っているのかを書き残しておきます。

Cursorとは

https://cursor.sh/

VSCodeからForkされて開発されたコードエディタです。AIとペアプロできる感じになっています。

開発者が見た感じ4人。。。強い。。。

https://anysphere.co/

Cursorでできること

コードについて質問できる

こんな感じでなんの処理をしているのかなんかを質問できます。

そのほかにも、

なんの処理をしているかだけでなく、そのコードが書かれている背景を推測してもらうとかもよくやります。

エンジニアリングにおいて、自分がわかっていない領域を認知するメタ認知能力はとても大事です。先輩エンジニアにしょうもない質問はできないですが、AIならお構いなく質問できるかも…?

コードを書いてくれる

こんな感じで勝手にコード書いてくれます。Github Copilotではこれから書こうとする行を補完してくれるのみで具体的な指示はコメントを駆使する必要があるのですが、Cursorだとコードの外で指示を書いたりAcceptしたりRejectしたりできるのが良いです。

コードを修正してくれる

エラーが出た場合はそのエラー文をコピーして解消方法を探して見つけたらそれをコピーして…と割と大変なんですが、ボタン1クリックで原因を見つけてボタン1クリックで解消してくれます。最強。

コマンドも書いてくれる

このコマンドのオプションなんだっけ…?ってなってmanでいちいち調べるのめんどくさいですよね…

最新のツールのコマンドなんかは学習されていない場合もあるかもなのですが、curlなんかの枯れたツールのコマンドなんかは安心して書いてもらえます。

Vimの操作感は捨て難い…!

init.vim をそのまま読み込ませてそのまま動作させるわけには行かないのですが(行けるかもなのですが)、VSCodeの settings.json で自分がやりたい操作を定義し直しました

{
  "vim.normalModeKeyBindings": [
    {
      "before": ["C-h"],
      "after": ["^"]
    },
    {
      "before": ["C-l"],
      "after": ["$"]
    },
    {
      "before": ["C-y", "t"],
      "commands": [
        {
          "command": "workbench.view.explorer"
        }
      ]
    },
    {
      "before": ["g", "r"],
      "commands": [
        {
          "command": "editor.action.revealDefinition"
        }
      ]
    },
    {
      "before": ["\\", "r", "n"],
      "commands": [
        {
          "command": "editor.action.rename"
        }
      ]
    },
    {
      "before": ["K"],
      "commands": [
        {
          "command": "editor.action.showHover"
        }
      ]
    }
  ],
  "vim.visualModeKeyBindings": [
    {
      "before": ["C-h"],
      "after": ["^"]
    },
    {
      "before": ["C-l"],
      "after": ["$"]
    }
  ],
  "vim.operatorPendingModeKeyBindings": [
    {
      "before": ["C-h"],
      "after": ["^"]
    },
    {
      "before": ["C-l"],
      "after": ["$"]
    }
  ],
}

まるっと私のVSCodeの設定を載せておきます。

https://gist.github.com/adshidtadka/35c4e474ef56533ce29a89b9159a9677

まとめ

AIとの協業において難しいポイントはいかにAIに対してコンテキストを伝えるかと言うところなのですが、エンジニアリングはコンテキストが全てコードになっているのでとても協業がしやすいのです。