[Rust] CursorのAI Project機能を使ってCLIコマンドを作成してみる

2024.02.28

Introduction

CursorはAIとのペアプログラミング用に設計されたエディター(IDE)です。
ソフトウェアをより迅速に構築するためにAIが標準で組み込まれています。

VSCodeをforkしており、VSCodeの使い勝手ほぼそのままいけます。
extensionもだいたい動きます。
AI機能では、ChatGTPと連携してコーディングすることができます。
※2024/2時点ではgtp-4かgpt-3.5が選択可能

本稿ではCursorをつかって簡単なRustのコマンドラインツールを作ってみます。

Usage in Cursor(Other)

インストールとか基本的な使い方についてはいっぱい良記事があるので割愛。
それ以外自分が使った機能については下記。

OpenAI APIのキーを使う

BasicプランではAI機能の回数制限があります。
本格的に開発でCursorを使用する場合、
有償のPro/Businessプランにする必要があります。
しかし、OpenAIのキーを持っていれば、そのキーを使用してCursorを使えます。
エディタ右上にある歯車キーを押して
OpenAI APIの設定フィールドにキーを入力すればOKです。

VSCode Import

すでにVSCodを使用している場合、extensionも使っていると思います。 
この機能を使うと、現在使用しているextension、設定、キーバインドそのままに
Cursorにimportできます。
こちらもエディタ右上の設定から行うことができます。

自作ExtensionをCursorで使う

自分でVSCode extensionを作成してCursorで使いたい場合、
生成したvsixファイルをCursorにドラッグアンドドロップすればそのまま使えます。
以前はvsixファイル内のpackage.jsonをいじったりする必要がありましたが、
現在はそのままいけるみたいです。

extension用プロジェクトで、下記コマンドをつかってvsixファイルを作成。
あとは生成されたvsixファイルをD&DでOK。

% npx vsce package

Environments

  • MacBook Pro (13-inch, M1, 2020)
  • OS : MacOS 14.3.1
  • Rust : 1.76.0

CursorとRustのインストールがしてあればOKです。

Rust Coding in Cursor

ではRustで簡単なCLIコマンドを作成してみましょう。
ここでは一般的なwcコマンド(ファイルから行数や単語数をカウントする)を
作ってみます。
今回はCursorの機能であるAI Project生成機能を使ってみました。
これはプロジェクト作成時に希望する要件を入力するとゼロから構築してくれる機能です。

まずはインストールしたCursorを起動しましょう。
そしてメニューからnew → AI Projectを選択します。
すると、何がつくりたいかきいてくるので下記のように要望を伝えます。

その後プロジェクトのパスと名前を聞かれるので、適当に入力します。
すると、↓のようになんかいろいろやりだしました。

あっとゆうまにCargoプロジェクトが作成されました。
ちゃんとmain.rsとlib.rsも分けてあるし、テストも生成されてます。
READMEもしっかりつくられているところもうれしい。

さっそくテストしてみます。

% cargo test
   Compiling rust_wc v0.1.0 
・
・
・
running 1 test
test test_wc_command ... FAILED

failures:

---- test_wc_command stdout ----
thread 'test_wc_command' panicked at tests/integration_test.rs:37:5:
assertion failed: output_str.contains("Words: 9")
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace


failures:
    test_wc_command

test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.33s

error: test failed, to rerun pass `--test integration_test`

そんなにうまくはいかなかった。。。
が、実際はassertの部分が少し間違っていただけで、
テストを少し修正すればOKでした。
(実装されている機能自体は問題なし)

ではビルドして動作確認してみましょう。

% cargo build

生成されたrust_wcとwcをそれぞれ実行してみます。
空のファイルを作成して実行した結果は↓です。

% wc empty.txt
       0       0       0 empty.txt

% ./target/debug/rust_wc empty.txt
Lines: 0
Words: 0
Bytes: 0

1行だけテキストが入力されたファイルで確認。

% wc sigle.txt
       1       2       4 sigle.txt

% ./target/debug/rust_wc sigle.txt
Lines: 1
Words: 2
Bytes: 4

複数行のテキストファイルでも確認します。

% wc multiple.txt
       7      56     354 multiple.txt

./target/debug/rust_wc multiple.txt
Lines: 7
Words: 56
Bytes: 354

動作的に問題なさそうです。
テストを少し直した以外、何もしてません。

Summary

今回はCusrsorのAI Project機能をつかってRustでCLIを作成してみました。
これはとてもシンプルな例だったためそのまま簡単に動くものが作成されましたが、
実際はこうはいきません。

もっと多機能な規模の大きいプログラムだったり、
ライブラリ/フレームワークの使用を指示したりなど
複雑になればなるほど細かい指示と
プロジェクト生成後の手直し(これもAIと対話しながら)が必要になると思います。
(近年のAIの進化速度を見るとすぐクリアしそうですが)

とはいえ、CursorはAIとペアプロするのにとても使いやすいIDEです。
Basicプランで少しお試しするくらいなら無料枠でいけるので、
機会があればぜひ使ってみてください。

次はもう少し難しいプログラムを生成してみます。

References