【AI駆動開発】Cursorを使いこなそう!Cursor のAuto debugと様々なユースケースを試してみた。Cursorは最強のペアプロとして利用できるのか?
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
はじめに
前回の記事では、Cursor について機能の概要を中心に紹介しました。今回は続編で Cursor の機能やユースケースについて更に深堀りして紹介していきます。
Auto debug (デバック機能)
ターミナルで実行した結果(例えば、スクリプト実行したエラー結果)に対して、Add to Chat か Debug with AI のボタンが押せます。Debug with AI を押すと、右側の Chat 画面でデバックが開始され結果が英語で出力されます。通常の Chat 機能の回答は言語設定で英語から日本語にできますが、Debug with AI は基本、英語での出力となります。ただし、Add to Chat を押した後にチャットの会話として「エラーの解消を行いたいため修正案を提示してください」など、日本語で再度質問すれば英語でなく同じ結果を日本語で回答してくれます。Add to Chat でも Debug with AI でも Cursor の裏側は同一のため基本的に解析結果や修正案はほぼ同じになります。
実際にはAuto debug (デバック機能)で解決できるケースもあれば、解決できないケースもある状態です。以下の例では、Flaskの作法とも言えるモジュールのインストールとインスタンスを作成が抜けている例で、Debug with AI を押すことにより、右側の CHAT で自動的にバグ内容と修正内容が提示されます。
次の例では、Twitter API v2 仕様に準じた Python のクライアントツールを作成している中で発生したエラー結果を Debug with AI で対応したケースです。エラー内容から「認証するためのアクセスキーと認証トークンが正しいか?」を確かめる提案がでましたが、こちらでは解決するまでには至りませんでした。
このエラーの原因は実際にアクセスキーと認証トークンに間違いではなく「登録しているプロジェクトの契約ライセンスが有料版でないと対応していないAPIリクエストを送っていた」が原因でした。意地悪な例ではありますが、APIの仕様書には書かれておらず、ユーザーライセンスの契約機能一覧には情報としては記載がある内容です。そこまでは関連づけての原因特定までは提示できないということが解りました。
Docs機能
前回も紹介しましたが Docs機能を用いることで、Cursorに外部の知見を与えることができます。今回のエラーについても、Cursor の Docs の機能を利用すれば回答パターンが変化して解決に繋がる可能性があるため試してみました。まず、Docs の機能の操作手順について記載します。
(1) Cursor のチャットウィンドウで @
を入力して Docs
を選ぶ
(2) Add new doc
を選ぶ
(3) 参考にしたいドキュメントのURL(今回の例では、https://developer.twitter.com/en/docs/twitter-api/rate-limits#v2-limits-free)を指定する
(4) インデクスが作成される
(5) チャットウィンドウで @Twitter API rate-limits
(先ほど指定しておいた名前)などと入力して、参照するドキュメントを指定しつつ、質問を入力する
(5) インデクスされた内容を使って回答してくれる。また、参照したドキュメントへのリンクが表示される。
(1) - (5) までの手順からドキュメントを登録して問題解決のための質問をしてみました。結果としては、ドキュメントに記載の内容を読み解き、ライセンスタイプによって制約があることの回答が得られ、原因そのものではないものの、原因特定までの解決となるヒントが得られました。Docs の機能の精度は、ユースケースによって異なりますが、問題の解決の糸口に繋がる選択肢として捉えるのであれば、十分有効な機能と言えると思います。
Ask about your codebase (プロジェクト全体の質問)
Ask about your codebase は、Chat の中で @codebase
をつけて質問するとプロジェクト全体に対して質問ができる機能です。次の例では、サンプルコードに対してプロジェクト全体に関する質問をしてみました。質問の内容としては、API v2 の .pyファイルの内容についての質問を行っています。説明を日本語でと指定することで、日本語での回答が得られます。
当たり障りない回答ではありますが、各 .pyファイルの概要を得ることができました。このような機能は、例えば、プロジェクトに新規にアサインされたメンバーが最初の Github レポジトリの内容を全体的に速やかに把握する、という目的では非常に有効な機能になると思います。
ユースケース:単体テストコードを作成
Cursor を利用していて便利なユースケースとして、プログラムの単体テストを作成するケースがあります。コードの品質を保つために単体テストの重要性は言うまでもありませんが、単体テストコードを作成して CICD パイプラインに組み込むのは非常に手間で時間がかかります。単体テストコードの作成を Cursor を用いて実施することで単体テストのコードを高速で作成し、修正コードも高速で作成することができます。以下の画面のように、該当箇所をワンクリック(Y)による修正も可能です。もちろん別のファイルで単体テスト用のスクリプトを作成することも可能です。
ユースケース:脆弱性のあるコードがないか確認
コードの脆弱性を発見してくれるツールは多数存在しているため Cursor は補助的な使い方になりますが、コードを指定してチェックする、または、@Codebase を利用して、プロジェクト内のソースコードに脆弱性が存在するかを確認することもできます。Cursor でコード単位で判断できるものは指摘してくれて、修正コードも提示してくれます。@Codebase で全体的なプロジェクトの中のコードをチェックする部分も、脆弱性コードの指摘が行われ課題があることを伝えてくれる場合があります。以下は有効なユースケースでの例となります。
パターン1:特定のコードに対して脆弱性コードが存在しないか確認(SQL インジェクション)
以下の例では、簡単なログイン処理に対して、Chat(Command + L)で脆弱性のチェックを依頼しています。以下の通り脆弱性コードの指摘と修正コードの提示が表示されます。シンプルな質問ですが、SQL インジェクションの特定と、コードの修正案を提示してくれました。修正箇所の画像が切れているため修正前後のコードを抜粋して記載してます。
修正前:cursor.execute("SELECT * FROM users WHERE username = '%s' AND password = '%s'" % (username, password))
修正後:cursor.execute("SELECT * FROM users WHERE username = %s AND password = %s", (username, password))
パターン2:@Codebase でプロジェクト全体として脆弱性コードが存在しないか確認(SQL インジェクション)
以下の例では、@Codebase を指定してプロジェクト全体のコードチェックを行っています。先ほどの SQL インジェクションも特定して脆弱性に関する情報を提示してくれたので、この後、詳細な修正案をお願いする流れにするとよいと思います。
パターン3:特定のコードに対して脆弱性コードが存在しないか確認(Path Traversal)
以下の例では、Path Traversalの脆弱性の指摘と修正コードの提示を行ってくれました。シンプルな質問ですが、パストラバーサルの脆弱性とコードの修正案を提示してくれました。
ターミナルからの Chat 起動
軽微な部分ですが、ターミナルから実行するコマンドを調べる場合など、ターミナル画面から Add to Chat を起動してコマンドを教えてもらうこともできます。
まとめ
今回の記事では、ChatGPTを組み込んだエディターツール「Cursor」について続編を紹介しました。「GitHub Copilot」とどちらを利用すべきか悩まれている方も多いと思います。「GitHub Copilot」も非常に強力なツールですが、「Cursor」も各機能が強力で、アプリケーション開発の生産性を向上させるためには非常に役に立つツールです。一方で、Chat 機能の正確性や、@Codebase のプロジェクト全体での分析結果の精度については今後の改善を期待したいところです。Cursorを利用し、素早く・効率よく開発を行うことにより、より多くの時間を顧客理解や業務改善などにあて組織全体の生産性の大幅な向上や、サービスの顧客満足度の向上が図れると思います。
今回の記事が皆さんの日々の開発業務の改善につながり、またAI駆動開発(AI-Driven Development)についての関心と導入につながれば大変幸いです。
お気軽にご相談ください
AI駆動開発について興味関心があり、
ご相談があれば以下よりお問い合わせください