見出し画像

Cursorを使ってAIとペアプロしてみる

みなさんこんにちは!
SOMPOシステムズのアプリケーションエンジニアです!

20XX年にユーザー系IT企業へ入社して早10数年経ちましたが、昨今の技術進展はめまぐるしいというか、まぶしいというか、、。

システム開発の中で「プログラムを書く」という作業は、研修で習ったり、自己学習をしたり、人のコードを読んで真似して書いたり、開発プロジェクトによっては雛型があったり色々入り方はあるかと思います。またプログラムを書く手前に「どんなプログラムにしようか?」という設計を考えたりしますよね。フレームワークでベースラインを決めたり、OSSの利用で生産性を高めたり新しい技術を用いたりします。さらにテストコードを書き、パイプラインを作り継続的インテグレーションを回したりすることで、ローカルな環境でテストがいかに効率的に行えるかによってソフトウェア品質が大きく変わるため、やろうと思えばとことん追求できる世界かと思います。

そのため、企業の中で決められたルールでガチガチに固めすぎるのではなく、ある程度の開発者の自由度を持たせたり、開発プロジェクトにあわせるなど必要なバランスをみながらアプリケーションを開発するエンジニアのために気持ちよく開発できる環境を提供することはとても重要で価値のあることだと考えています。

そんな話はさておき、今は皆さまもよくご存じ「生成AI」ブームで、どんな話の中でも「AIガー・・」「AIデー・・」「AIナンデスヨ!」と毎日フレーズとして聞きます。

「プログラムを書く」という作業においてもGitHubCopilot、Gemini for Google Cloudなど「あなたの近くでそっと傍に・・」という感じでAIを隣においたプログラミングが今後ますます加速し、開発作業において「え、AI使わないの?ダサッ」みたいな日がもしかしたら来るのかもしれない(もう来て通り過ぎてるのかもしれない)と思い、要はガラケーからスマホへ皆さん換えられたように、モードチェンジが必要になっているのかなと。

お題の通り「ペアプロ」は「ペアプログラミング」のことで、2人1組でペアを組んでプログラミングを進めていく開発手法になりますが、一般には片方がドライバー(コードを書く人)、もう片方がナビゲーター(プログラム構成の検討、ドライバーの疑問を調べる、レビュー、テストを書くなど)となって作業を進めていきます。生成AIを使ったプログラミングでは「AI」がドライバー、「自分」がナビゲーターという形になったり、逆に「AI」がナビゲーター、「自分」がドライバーになることもあると思います。

というわけで、前置き長くなりましたが巷で話題のCursorに触れてみました。

※なんでCursorなのかは、自分JavaユーザなのでEclipseの使い手だったのです。VSCodeの操作に慣れたくYoutubeでチュートリアル動画眺めてたらCursorが出てきて、鼻水垂らしながらなにこれ?と調べた次第です。

Cursorについては、ここで説明するよりもChatGPTやBingサイトからCopilotに問いかけてAIに教えてもらうといいかと思います。

Cursorの特徴

ちょっとだけ触れておくと、以下です。

  1. VSCodeをフォーク

  2. ChatGPTを搭載

  3. 便利な機能がたくさん

Eclipseの使い手からすればVSCodeだって「こんなことできるのか、便利な世の中だな」と思ったりするわけですが、さらにChatGPTが搭載となると・・・スゲー!!!と思うわけで。

とりあえずセットアップ

以下からダウンロードできます。
https://cursor.sh/

Cursorサイト

サイトがカッコイイ・・・

※注意ですが、アカウント登録が必要になります。GitHubのアカウントと連携できるため、自分は個人で持っているGitHubアカウントで登録しました。

VSCodeと同じ要領(ほぼウィザードに従ってポチポチするだけ)でセットアップして、VSCodeイメージと同じ感じで開けました。
※Javaプロジェクトを開いてます。

セットアップ後

わかりにくいかもしれないですが、右側にChatできるスペースがあり、LLMのモードを指定できます。

Chatエリアを拡大

個人でFreeプランの利用はGPT-4(slowモード)が50リクエスト、GPT-3.5は月200リクエストでした。真ん中にcursor-fastと謎のモデルがありますが、つかったことはありません。

エディタ右上の歯車のマークを押して設定を確認します。

設定画面

重要なポイントとして「Privacy mode」というものがあります。ChatGPTの利用はCursorのサーバを経由していくことになるため、この設定を「enable」にすることでCursorや第三者によって一切保存はされないようです。※ただしOpenAIに送信するプロンプトは30日間保存される模様。
そのため、気になる方はenableにしておくことがいいかと思います。

実際にペアプロしてみる

コード上でCtrl+Kを押すとChatできる小さなウィンドウが開かれます。

コードを選択しCtrl+K
小さなウィンドウが開かれる

試しにSytem.out.printlnで出力している「Hello World!」の文字を「Hey! You are Nice Guy!」に文字を直してもらうよう「~直してみてください」と自然言語で問いかけてみます。

自然言語で問いかけ

修正コードが出現しました。

修正コードの出現

Ctrl + Shift + Yで修正を適用、Ctrl + Nで修正を破棄できます。(マウスでクリックもできる)

修正コードが適用されました。

適用後のコード

コードを指定して、Ctrl+Lを押すとChatウィンドウに指定したコードが展開されて、Chatができるようになります。

Ctrl+LでChatウィンドウへ展開

テストコードを作ってもらいました。これだと異常系が足りないですね。(とか言ってみたり)

テストコードの作成
異常系のケースを追加

次に1からコードを作るような指示を出してみました。
「SpringBootを使って、RestAPIのPOSTメソッドを足してください。インタフェースは今晩のおかずとし、カレーが入ってきたらエラーを返すようなコードにしてください。カレーは主食なので。」

GPT3.5が生成したコード

これだと引数がないので、常にカレーが入ってきてしまいます。
GPT-4にお願いしてみました。(右下でモードを変えられます)

GPT-4へモードチェンジ

さすが賢いですね。リーダブルコード的にも非常に読みやすいコードを書いてくれました。

GPT-4が生成したコード

NWの環境にも当然変わると思いますが、自宅の環境下においてはコードの生成は1秒~3秒前後でパラパラ~と出てきました。

コードを直接追加修正してくれることはちょっと感動しました。

感想

今回のお題を「ペアプロ」としていましたが、単純にAIにコードを書かせただけになりました。Cursorの機能は他にも色々あるので今後触ってみたいと思います。
プログラミングは人のコードを真似してコピー実装することもあると思いますが、ほんとに1から作る場合においてはちょっと期待と違っていたとしても生成されたコードを土台に利用できるため、圧倒的に生産性が向上しそうです。
だからといってプログラマの仕事が一切なくなるのか?というと、書いたコードの妥当性とか、クラス分割の設計とか、リファクタリングも含めて人の手が介在することはまだまだあるかなと思うところもあります。(そもそも指示を出すのは人間ですし)

昨今はインフラ部分がクラウドにより隠蔽され、インフラの世界でも便利な世の中ではありますが、ソフトウェア開発の複雑度が増してアプリケーション開発者が考えることが増えているようにも思えます。そのため開発者の負荷軽減を考えましょう!というプラットフォームエンジニアリングの考えが流行ってると思いますが、開発生産性ガーとか、内製化ガーとかをキーワードにした取り組みにはこのようなAIを使った取り組みは必要不可欠ですねと肌で感じることができた気がします。

あとは、このような最新技術を利用する際には企業のセキュリティポリシーに従って安全に利用していく必要がありますので、AIセキュリティの面はきちんと確認することも大事かと思っています。