Cursorはコードベースに質問できる

VSCodeベースのCursorっていうGPT連携組込みエディタがあって、GitHub Copilot Chatと比較してみた。

cursor.sh

関心

で書いたようにコーディング(読み書き)を自動化したい。

Cursorをとくに薦めはしないけどLLM組込みエディタのUXの例としてわかりやすかったので紹介します。

読みテスト

脆弱性探知

例によって脆弱性診実習用アプリ(通称「やられサイト」)のSQLインジェクションを発見してもらうという会話をした。

ディレクトリを開いて「PHPファイルにSQLインジェクションある?」の文章入れただけ。該当個所をただしく発見してくれている(言語はエディタの設定で日本語指定にもできる)

USED Codebaseになっている時はコードベース=ディレクトリのインデックスしたファイル群を参照している。

@codebaseで対象を明示できる。

インデックス状態の表示

GitHub Copilot Chatだと選択した範囲と今までの会話がコンテキストに含まれていると思うんですけど、Cursorはコードベース全体を対象にしていることが分かる(インデックスがどこに保存されるか不明なので機密情報なコードは開かない方が無難)

※Copilot ChatでもVSCodeのバッファを対象に含めている説もあるけど自分が検証した限りでは、そういう挙動はしていなかった

VSCodeにOpen AI APIの連携を追加するような拡張も各種公開されているけど、リポジトリ全体をインデックスするやつははじめて見た。

OSS解析

Wasmerのコードをいっしょに読んでみる。

wasmer runの実行を追うにはどのファイルを見るべき?」

以下のファイルやディレクトリが特に重要です:

1. lib/cli/src/run.rs: このファイルはwasmer runコマンドのエントリーポイントです。ここでコマンドライン引数が解析され、適切な関数が呼び出されます。

2. lib/runtime-core/src/: このディレクトリには、Wasmerのランタイムのコア部分が含まれています。ここには、WebAssemblyモジュールの解析や実行、メモリ管理などが行われます。

3. lib/compiler/: このディレクトリには、Wasmerのコンパイラが含まれています。ここでは、WebAssemblyコードをネイティブコードに変換する処理が行われます。

4. lib/wasmer-types/: このディレクトリには、Wasmerで使用される主要な型定義が含まれています。

「WcgiRunner, WasiRunner, EmscriptenRunnerの違いは?」

1. WcgiRunner: このランナーは、Web CGI標準に準拠するWebAssemblyモジュールを実行するように設計されています。Web CGI(Common Gateway Interface)は、Webサーバーがプログラムやスクリプトを実行し、その出力をHTTPレスポンスとして返すことを可能にする標準です。Wasmerのコンテキストでは、WcgiRunnerを使用すると、WebAssemblyモジュールをCGIスクリプトのように実行できます。

2. WasiRunner: このランナーは、WASI (WebAssembly System Interface) APIを使用するWebAssemblyモジュールを実行するように設計されています。WASIは、WebAssemblyモジュールがシステムと対話するための標準化されたインターフェイスです(ファイルの読み取りやコンソールへの印刷など)。WasiRunnerは、これらのモジュールが正しく実行されるために必要な環境を提供します。

3. EmscriptenRunner: このランナーは、EmscriptenでコンパイルされたWebAssemblyモジュールを実行するように設計されています。Emscripten は、C および C++ コードを WebAssembly にコンパイルするツールチェインで、システムとの対話のための独自の API セットを提供します。EmscriptenRunner は、これらのモジュールが正しく実行されるために必要な環境を提供します。

一般的な用語の説明です。

「 WcgiRunner::can_run_commandは何を見て判断するの?」

WcgiRunner::can_run_commandは、指定されたコマンドが実行可能かどうかを判断するメソッドです。具体的な実装については、コードベースに提供された情報からは明らかではありません。

このへんを教えてほしかったです

あまり深い解析まではやってくれないみたいだ。

書きテスト

発見した個所に「脆弱性修正したい」と入れてみる。結果は同じ。

Cursor

Copilot Chat