連載 Cursor 実践録①:実装スピードが2倍に─Cursorを使いこなすためのコツ

サムネイル

はじめに

株式会社アイスリーデザインでソフトウェアエンジニアをしている中野と申します。

今年で2年目のエンジニアです!現在の業務ではRAGを用いたLLMサービス開発のバックエンドを担当しています。

最近は、AIにコードを書いてもらうことが増え、AIに適切な指示(プロンプト)を出すことの重要性を日々感じています。曖昧な指示だと、結局手直しが必要になり、かえって時間がかかってしまうことも…。

今回の記事では、私が実際にプロジェクトでCursor(AIコーディング支援ツール)などのAIツールをどのように活用し、開発に役立てたかをご紹介します。具体的には、プロジェクトで使われている共通コンポーネント(ボタンや入力項目) や条件分岐に関するドキュメントをCursorのエージェントに渡し、実装の補助をしてもらいました。

AIはあくまで補助ツールであり、レビューや設計の判断は最終的に人間が責任を持つべきだと考えています。ですが、うまく使えばAIツールは、使い方次第で開発における最強のパートナーになります。この記事を通じて、AIツールの具体的な活用イメージや、その効果を皆さんに感じていただければ幸いです。

案件の概要

私が担当したのは、企業向けのWebアプリケーション開発です。主な機能としては、タスク管理、チャット、イベント管理などがあります。

開発期間は約4ヶ月、チームメンバーは4名でした。比較的短期間で多くの機能を実装する必要がありました。

技術スタック

  • バックエンド: Laravel
  • フロントエンド: React, Blade

実際にどう使ったか(活用例)

活用例1:LaravelのUnitテスト作成

まず最初に1つ、テストのサンプルを作成し、それを参考にしながらCursorに他のテストケースを実装してもらいました。テストコードの作成は時間がかかる作業ですが、Cursorのサポートにより大幅な時間短縮ができました。

使用した実装の際のプロンプトのテンプレートはこちらです。

実装要件
【機能概要】
ここに実装する機能の概要を記述

【詳細仕様】
ここに具体的な仕様を箇条書きで記述

【実装ステップ】以下のステップで実装を進めます:
ステップ1: 実装方法の提案
ステップ2: 私と認識が合っているかの確認
ステップ3: 実装開始

【参考実装】
以下のファイルを参考にして実装してください:@page.php
言語:ファイルパス
参考コード(インデントで表現)

【アーキテクチャ・規約】
プロジェクトで採用している設計パターンや規約
コーディング規約
命名規則

【注意事項】
特に注意すべき点
既存の実装との整合性
パフォーマンスに関する考慮
まずステップ1の実装をお願いします。

Notepadをチャットにファイルとして読み込ませます。(今回は @project xxx backend。 )
下にNotepadのテンプレートも載せてあります。
Notepadの機能詳細については後述しています。

次に上記のテンプレートを元に必要項目を入れます。

実装要件のプロンプト入力画面

現在の実装を確認してくれます!

Cursorが現在の実装を検索している画面

実装方針を作成して、問題がないか確認してくれます。

実装方法の提案
Laravelの単体テストでは、以下のような実装を提案します:

テスト対象:
ユーザー登録機能(UserService)
ユーザー情報を作成・更新・取得・削除するCRUD操作をテストする

テスト構成:
tests/Unit/Services/UserServiceTest.php に実装
PHPUnitを使用したテストケース

テスト内容:
ユーザー作成のテスト
ユーザー情報取得のテスト
ユーザー情報更新のテスト
ユーザー削除のテスト
無効な入力値に対するバリデーションテスト

モックの利用:
ユーザーリポジトリのモック化
データベース操作を実際に行わずモックを使用

テストデータ:
ファクトリーやフェイカーを使った適切なテストデータの生成
この提案に基づき、具体的なテストコードのサンプルを作成します。ご確認いただき、修正や追加要望があればお知らせください。

「修正点があれば追加でお願いします。なければ実装をしてください。」と入力します。

指示の結果、実装されたコード

実装してくれました!
追加でテストして欲しいところがあれば、そちらも同じように実装してもらえます。

活用例2:APIのURL設計

新しいAPIを作成する際、どのようなURLにするべきか迷うことがあります。そのような時は、既存のAPIの命名規則をCursorに渡し、それに沿ったURLの候補をいくつか提案してもらうようにしています。こうすることによって、命名規則の統一性を保ちながら、効率的に設計を進めることができました。

手順を簡単にまとめてみました。

1. 準備:命名規則を1ファイルにまとめる

例:docs/api-naming.md

– バージョンは /v{n} を先頭に付与
– リソース名は複数形スネークケース /users, /purchase_orders
– アクションは HTTP 動詞で表現。例外的に特殊動作はサブパス
 - 例)注文確定: POST /v1/orders/{id}/confirm
– バッチ処理は /bulk または /batch

プロジェクトに入れたまま にしておけば,Cursor はファイル全体を自動で文脈として読み込みます。

(参考:Cursor – Rules

2. プロンプトの書き方例

ポイント:

  • 目的は1行で
  • 参照してほしいドキュメントを @ タグで指定(大規模プロジェクトで同名ファイルが多いときに有効)

(参考資料:Cursor – Community Forum

【目的】
既存ルールを遵守しつつ「予約済みカート」を扱うエンドポイントを新設したい。

【出力してほしい形式】

1. 候補 URL
2. 対応 HTTP メソッド
3. 簡潔な理由(30 字以内)

【制約】
– 語彙や順序は api-naming.md の規則を必ず守る
– 類似 URL がある場合は衝突を避ける

参考ドキュメント: @docs/api-naming.md

3. Cursorから返ってくる回答イメージ

1. POST /v1/reserved_carts
 - 単数リソースへの POST

2. GET /v1/reserved_carts/{cart_id}
 - 個別取得

3. PATCH /v1/reserved_carts/{cart_id}
 - 部分更新(アイテム追加など)

4. DELETE /v1/reserved_carts/{cart_id}
 - 予約キャンセル

5. POST /v1/reserved_carts/bulk_confirm
 - バッチ確定。命名規則の「/bulk」を使用

活用例3:エラー調査

エラーが発生した際、エラーメッセージをCursorに渡し、考えられる原因やエラーが発生する状況を教えてもらいました。これにより、エラーの原因を特定するための手がかりを得られ、デバッグ時間を短縮できました。

エラーの解消を求める指示の画面

意外と使えなかった場面

既存の共通コンポーネントを使用するよう明確に指示しないと、Cursorが独自のコンポーネントを生成してしまうことがありました。

また、画像と対象コードを渡してUIの修正を依頼した際も、細かい調整は自分でやった方が早いと感じる場面もありました。こうした経験から、AIへの指示の出し方や、AIが得意なタスクとそうでないタスクの見極める力が今後の課題だと感じています。

こちらの記事では、画像からWeb画面を作成してみたという具体的な活用例を紹介しています。あわせてご覧ください!
Cursorで画像からWeb画面を作成してみた

便利なメモ機能Notepadを活用しよう

Notepadとは、Cursorに搭載されたメモ機能で、ユーザーがアイデア、コードスニペット、タスク、設計資料などを自由にまとめて保存できる領域です。

開発作業やチーム運用を効率化するための「AIと連携できる高機能なメモ帳」として使うことができます。必要な情報をAIに参照させたり、作業メモやナレッジを整理したりするのに便利な機能になっています。

cursorの左サイドバーにNOTEPADSというエリアがあります。
+のところをクリックして追加します。

Notepads追加画面

例えば以下のように活用することができます。

バックエンドのディレクトリ構成と、実装の際に参考にしてほしい既存ファイルの例について説明します。

■ バックエンドのディレクトリ構成
設計思想として、ドメイン駆動開発を採用しています。


backend/
├── src/                       
│   ├── domain/
│   │   ├── api/                    
… 省略

■ 既存ファイルの例
常にこれらのファイルの記法を参考にして、実装を行いなさい。
DBスキーマ: @schema.php

route: @web.php
controller: @member_controller 
Service (共通処理): @member.pnp
Repository(処理): @member.repository.php 

DTO: @conversation-history.dto.ts
QueryService(インターフェース): @conversation-history.query-service.ts

常に上記のファイルを参考にしつつ、ドメイン駆動開発のベストプラクティスも適用しながら実装を行いなさい。

Notepadにプロジェクトの設計方針やディレクトリ構成、参考ファイル、実装ルールなどをまとめておくと、AIのサポート精度がぐっと高まり、プロジェクト全体の品質や作業効率、一貫性の向上にもつながります。

メリット・デメリット

メリット

AIにコードの大部分を生成してもらい、人間がそれをレビュー・リファクタリングするという流れにすることで、実装スピードが大幅に向上しました。体感としては、2倍以上のアウトプットが出せていると感じています。

また、APIのURL設計のように、普段なら時間をかけて悩むような部分もAIが候補を提案してくれるので迷いが減り、リサーチにかかる時間もぐっと短縮されました。

デメリット

AIが生成したコードは、自分でゼロから書いたコードと比べると、どうしても記憶に残りにくいと感じることがあります。そのため、時間が経ってからエラーが発生した場合に、原因の特定や修正に時間がかかってしまうのではないかという懸念があります。


やはり、AIで書いたコードであっても、最低限は自分で内容をしっかり理解しておくことが欠かせないと実感しています。

まとめ

Cursorを活用した結果、実装スピードが体感で2倍以上に向上し、リサーチにかかる時間も短縮されるなど、開発効率が大きく改善されたと感じています。

一方で、共通コンポーネントの使用を明示的に指示しないと独自のコードを生成してしまう点や、UIの細かい修正は手作業の方が早いと感じる場面もありました。また、AIが生成したコードは自身で書いたコードに比べて記憶に定着しにくく、後からの理解や修正に手間取るリスクもあると感じています。

結論として、CursorのようなAIツールは、適切な使い方をすれば開発プロセスを劇的に効率化できる強力なパートナーとなります。ただし、その効果を最大限に引き出すためには、AIへの指示の出し方を工夫し、AIが得意なタスクとそうでないタスクを見極めること。そしてAIの生成するコードを理解することが大切だと思います。

本記事が、AIツール導入を検討している方や、すでに使っているけれどうまく活用できていない方にとって、少しでもヒントになれば幸いです。

ABOUT US
なかの だいちWEBエンジニア
株式会社アイスリーデザインに入社後、WEBアプリやモバイルアプリの開発に従事。開発したサービスはイベント管理アプリや生成AIの技術を活用したRAGのWEBサービスなど。