第一開発事業部の江端です。みなさんはもうAI搭載のIDE/エディタは使っていますか?使っている方はどのIDE/エディタを使っていますか?
最近、社内でも話題のAIエディタ『Cursor』を使い始めたのですが、もうこれがないと仕事が捗らなさすぎて、夜しか眠れない日々を過ごしています。

前回はPM研修の記事を書いたのですが、最近は開発の方をメインに担当しています。
元々私は、Visual Studio Codeを使っていました。主な理由は単純で無料で使えること(プライベートでもコードを書いているので、コレは重要)、豊富なプラグインがあり、自分好みにカスタマイズできることです。

CursorはVisual Studio Codeをベースに開発されたので、そのUIや機能がVisual Studio Codeに凄く似ていて、Visual Studio Codeで使っていたプラグインや設定も引き継げるので、すんなりと移行できるのではないでしょうか?
私が普段Cursorを使っている中で、これは便利と思ったことをみなさんにも共有できればと思います。

Cursorの4つのAIモード

CursorのAIには4つのモードがあります。

  • 「Plan」モード・・・いきなりコードを書くのではなく、どう作るのかユーザーに問いながら計画を立ててコードを書きます。
  • 「Agent」モード・・・AIが既存のファイルを横断して、自律してコードを書いていきます。
  • 「Debug」モード・・・AIが自らログを仕込んで原因を特定します。エラーが発生している場合に原因を特定して修正するような場合に使える。
  • 「Ask」モード・・・チャットのように質問に対して回答だけしてくれて、コードの修正は行わない。

具体的な違いを見ていきたいと思います。

前提
開発環境

項目 詳細
ホストOS Mac OS 15.7系
ベースイメージ public.ecr.aws/docker/library/php:8.2-fpm-alpine
アプリの言語 PHP 8.2系 laravel 12系

投入するプロンプト
「画像を参考に/loginでアクセスできるページを作成して、H1タグで○○アプリにようこそという文字を画面中央に表示して。
その下にID(email形式)とパスワードを入力させる画面をつくって。
送信されたリクエストにはIDはemail形式か、パスワードは英数大文字小文字記号のうち3種類を使い、8文字以上15文字以内であるかどうかチェックするバリデーションをかけて」

「Plan」モード:おしいけど、ほぼ思った通りの実装ができた

Planモードでは、コードを書く前にユーザーに不明点があればAIがユーザーに確認してきます。

そして、以下のような実装計画を提案してくれます。

ログインページ作成計画
概要
画像を参考に、/loginでアクセスできるログインページを作成します。H1 タグで「○○ アプリにようこそ」を画面中央に表示し、email 形式の ID とパスワード入力フィールドを配置します。送信されたリクエストに対して、email 形式のバリデーションと、パスワードの複雑性チェック(英数大文字小文字記号のうち 3 種類以上、8 文字以上 15 文字以内)を実装します。

実装内容
1. コントローラーの作成
app/Http/Controllers/LoginController.phpを作成
showLoginForm()メソッド:ログインフォームを表示
login()メソッド:ログイン処理とバリデーション

2. ルート定義の追加
routes/web.phpに以下を追加:
GET /login → LoginController@showLoginForm
POST /login → LoginController@login

3. ビューの作成
resources/views/login.blade.phpを作成
画像を参考にしたデザイン:
画面中央に配置されたカード
H1 タグで「○○ アプリにようこそ」を表示
ログイン ID(email)とパスワードの入力フィールド
ログインボタン
バリデーションエラーメッセージの表示
Tailwind CSS を使用してスタイリング

4. バリデーション実装
email 形式のチェック:Laravel 標準のemailルールを使用
パスワードの複雑性チェック:
8 文字以上 15 文字以内:min:8|max:15
英数大文字小文字記号のうち 3 種類以上:カスタムバリデーションルールを実装
正規表現を使用して、大文字・小文字・数字・記号の 4 種類のうち、少なくとも 3 種類が含まれているかチェック

5. エラーハンドリング
バリデーションエラー時は、入力値を保持したままエラーメッセージを表示
エラーメッセージは日本語で表示
ファイル構成
app/Http/Controllers/LoginController.php(新規作成)
routes/web.php(既存ファイルに追加)
resources/views/login.blade.php(新規作成)
技術的な詳細
パスワードバリデーションの実装方法
カスタムバリデーションルールとして、正規表現を使用して以下をチェック:

大文字英字が含まれるか
小文字英字が含まれるか
数字が含まれるか
記号が含まれるか
上記 4 種類のうち、少なくとも 3 種類が含まれているか
スタイリング
既存のwelcome.blade.phpを参考に、Tailwind CSS を使用してモダンなデザインを実装します。

待つこと・・・数分後
できた画面がこちら

作られたファイルと実装内容の説明

ちょっと見た目が違いますが、ほぼイメージ通りです。
バリデーションも実装されています。

「Agent」モード:爆速だが、ルーティングで思わぬエラーも?

Agentモードでも同じプロンプトで作成してみます。AgentモードではAIが勝手に実装していきます。

最後に動作確認方法も提案してくれます。

さて、http://localhost:8000/loginにアクセスしてみると…

ありゃ?エラーが発生しています。
続いてプロンプトに「http://localhost:8000/loginにアクセスしたら、Symfony\Component\Routing\Exception\RouteNotFoundExceptionエラーが発生」と入れると、

原因の可能性を示唆してくれます。

「Debug」モード:エラー時にはログを確認するのが鉄則

そこで、次はDebugモードでやってみます。(Agentモードでは可能性を示唆してくれますが、修正をしてと言わないと修正してくれません)

AIがデバッグログを仕込んでくれて、動作確認してほしいことは逆にAIが指示してくれます。
そして、指示通りに操作したら、「Proceed」ボタンをクリックします

すると、AIが自分でログの中身を確認して原因を探し、修正してくれます。

「Ask」モード:修正は自分でやらないといけないよ

最後にAskモードです。これでも同じプロンプトを入れてみます。

このように、コードを提案してくれますが、実際にソースコードの編集は行いません。
指示通りに、提案されたコードを追加したり、新しいファイルを作成してコードを書くと、

画面が作成できました。ちなみに、Cursorには内部にブラウザを搭載しており、Cursorの中で確認することも可能です。

各モードはどう使い分ける?

私の場合は普段メインで使うのはAgentモードです。
既存機能の修正や、ここを修正すれば良いなとある程度あたりをつけている場合はサクッとAIに修正させて内容を確認します。

既存機能がどのように実装されているのか、変数やメソッドを修正したいが、影響範囲を調査したいなど、調査だけしたい場合はAskモードです。
最初はAskモードで行って、AIが修正案を提案をしてくれた後に、Agentモードに切り替えて「実装して」と指示すればAIが修正してくれます。

新規機能を作成したり、AIが提案してくれた内容を確認して、自分が考えている実装方針と相違がないかを確認してから実装してほしい場合はPlanモードですね。

エラーが発生している、またはエラーは発生していないけれど、if文などの分岐でこっちが想定している挙動ではない場合はDebugモードでデバッグログを仕込んでもらい、ログを確認しながら修正してもらう場合に便利です。修正が終わったら、仕込んだログも削除してくれます。

まとめ

今回はCursorの4つのモードについて比較してみました。

  • AIが自分で考えて実装まで一気通貫で行うAgentモード
  • 計画を提示して、ユーザーのOKが出てから実装するPlanモード
  • 質問に回答して、提案まではしてくれるが、コードの改変は行わないAskモード
  • 適当な場所に自分でデバッグログを仕込んでくれるDebugモード

どのモードでも、人間が考えてコードを書いている時間と比べて、何倍ものスピードでAIがコードを生成してくれます。
但し、AIが生成したコードは間違うことも多々あります。特にセキュリティやバリデーションに関わる部分は、AIが生成したコードを盲信せず、必ず人間がテストコードや目視で妥当性を確認してから使いましょう。

まだAgentモードしか使ったことがない方はぜひ、他のモードを試してみてくださいね。