最近cursorでできるだけ関与せずにツールを開発してもらえるようにあれこれやってるので、そのまとめ。
やってる内容というのが、
・cursorのcomposerをagentモードで使う ・agentとのやり取りを定義したファイルのコマンドを通じてツールをつくってもらう
という感じの開発スタイルで、AIメイン(というかcursorメインで)ツールを開発してもらうというもの。
・できるだけ細かく進めることを決めてもらいながら、開発を実行してもらう
というスタイルなので、やり取りをする回数は増えるけど、コード自体はほとんど触らずに進められてるので、今のところ好感触。
以下のようなフローで開発してる。
- コマンドと役割を定義した
engineer.md
みたいなファイルをルートディレクトリに配置 - cursorのcomposerをagentで起動して、はじめに役割ファイルを読み込んでもらう
- 役割に定義したワークフローを基本に開発を進める(要件定義 -> タスク分割 -> 開発みたいな感じで)
- 以降は役割ファイルに定義したコマンドをベースにやり取りして開発
cursorで厳密にワークフローを組む方法が不明なので、擬似的にワークフローを組んでやってるみたいな感じ?
大きなプロジェクトとかツール開発は試してないので不明だけど、小さなツールは作ってもらえるようになってきた。 とりあえず作ってもらったのは、ほしいけどめんどくさくて作ってなかった以下2つ。
・指定したURL(複数指定可)のスクショを撮ってもらうツール ・指定したURL(複数指定可)のスクレイピングをして、マークダウン形式に変換してもらうツール
どちらもpythonとDockerを使って開発してもらった。 ちなみに、python経験はほぼなし。
マークダウンに以下のような内容を書いて、cursorに読み込んでもらって開発してる。
## role
役割と定義
## コマンド一覧
hello
こんにちはというコマンドです。
goodbye
さようならというコマンドです。
think
与えらえた指示について考えるコマンドです。
## ワークフロー
1. 要件定義
2. タスク分割
3. 開発
これを、もっと細かく&厳密にやることや成果物を定義したバージョンで開発してる。
最初は自然言語オンリーでやっていたけど、自然言語オンリーだと
・解釈が広がったり、誤認識されてしまう ・求められた形式のフォーマットで出力してくれない ・指定した成果物を作成してくれないケースが発生する
みたいな感じで、どうしても挙動が安定しなかった。
なので、あらかじめコマンドの挙動を定義しておいて、それを使ってやり取りをすることで、だいぶ安定してやり取りが進められるようになった。
また、定義したコマンドを複合的に定義したワークフロー的なコマンドを新しく定義して使うのも、良さげな感じ。
基本はそれだけですが、他にも取り入れたり意識したらうまく進めてもらえるようになった。 大まかには以下。
・できるだけ機能を分割してから開発してもらう ・できるだけ細かくタスクを分けてもらって、それをもとに開発を進めてもらう ・タスクごとにテストと、動作確認ができれば動作確認もしてもらう(もしくはする)
・指定したURLのスクレイピングをして、マークダウン形式に変換してもらうツール
上記を作ってもらった時、最初は一度に開発してもらうようにしていると、途中でうまくいかなくなった。 なので、
・指定したURLをスクレイピングして、ローカルに保存 ・指定したURLをスクレイピングして、マークダウンに変換した後にローカルに保存 ・指定したURLをクロールして、複数URLをスクレイピングしてローカルに保存
というように3段階に分けて開発してもらうと、あまり混乱なく進めてもらえた。
一度に進めてもらう内容が多いと混乱しやすいイメージ。 なので、完成までに必要な過程をできるだけ細かく分割してもらって、一度ファイルに起こしてもらう。
それをもとに開発を進めてもらうことで、
・一度に実行する内容が少なくて、スムーズに進めてもらえる ・戻ってもらいたい時も、指定した箇所からやり直してもらいやすい ・現在の進捗を思い出しやすく、日を跨いでも指示をしやすい
みたいなメリットがあった。
初期実装と機能追加で担当する役割を変えてみた。
基本構造は同じだけど、
・役割を説明する文章をそれぞれに特化して変更 ・使用するコマンドをそれぞれ独自のものを追加 ・初期実装と機能追加で、それぞれ作成するドキュメントのディレクトリを分けて参照を間違えにくいように ・開発を進めるワークフローを、それぞれに特化したワークフローにした
という感じで、できるだけ混乱しないようにしてみたらいい感じな気がする。
自分で開発できるツールもあるけど、
・やり取りだけで進めてもらえる ・進めてもらってる間は別の作業ができる
という感じなので、便利。
ちなみに、cursorのプロジェクトルールに設定してもいい感じに進めてもらえない時があるので、
・ルートディレクトリに役割ファイルを配置して読み込んでもらう ・プロジェクトルールじゃなくてcusrol for ruleの方に設定する
のどちらかの方が、今のところ良さそうな印象。
いい感じにできてきたのでブラッシュアップしつつ、厳密な処理はLanggraph等でツールを使って使い分けていきたい。
🐻