個人開発プロジェクトのリファクタリング
まずは.clinerulesを作成させた。
code:prompt.txt
.clinerules.example ファイルは.clinerulesの模範となる例です。/Users/y_nakasaka/dev/acme/ai-sandbox/mhn-leaderboardにあるリポジトリのソースコードを解析して適切な.clinerulesを作成してください。
cursor composerだと微妙だった
多分リポジトリの内容をしっかり見てくれてない。clineだと何も言わずに見てくれてよしなにclinerulesを作成してくれた。
次にセッションを新しくする。今度は現状のコード品質を測りたい。
code:prompt.txt
このリポジトリ全体のコード品質を計測したいです。
bunをinstallしたり依存をインストールしてbiome checkとかを実行した。
なんかコマンドの実行結果をちゃんと読んでくれてない気がする。
windsurfを試してみるか..
課金だるくてやめた
tree srcのコマンド実行結果はなんですか?と聞く
現状は読み取れないという
codeコマンドがinstallされてなかった(.zshrcの中でcodeがエイリアスで登録されてた...)
これで治った模様(後でzennに書く)
.zshrcでプロンプトの表示スタイルを弄ってる場合にもうまく読めなくなりそう
今日はテストを書かせてみる。現状はテストが一切ないのでちょうど良さそう。まずはテスト環境の整備からやってもらう。
code:prompt.txt
このアプリケーションにはテストがありません。今後テストを追加していきたいのでまずは適切にテスト環境を整備してください。
shellの実行内容を読み取れるようになったのでかなり実行結果が良くなった。とりあえず$1.5かけてテスト環境のセットアップとサンプルテストが完成した。HonoのDocsには{title}というLLM向けのペラいちのDocsまとめがあるのでそれを読ませることで出力の精度が上がった。実行させてるプロンプトは以下。 code:txt
srcディレクトリ配下のcomponentsとlibの中にあるファイルのテストを書いてください。src/components/__tests__ディレクトリにはすでにいくつかのテストがあるので参考にしてください。テストを書いたら必ずbun testでテストを実行し全て成功するまで次に進まないでください。bun testを実行するときは対象のテストファイルのみを指定して実行してください。
めっちゃテスト書いてくれた
https://scrapbox.io/files/67c1efd94ef4fbf29073f88c.png
$8くらい飛んだ
今日も引き続きテストの作成を頑張ってもらう。今回はCustom Instructionには「.clinerulesの内容に従いなさい」だけ書いておいて詳しいことは.clinerulesに書いておくようにしてみた。
code:prompt.txt
srcディレクトリ配下のcomponentsとlibの中にあるファイルのテストを書いてください。src/components/__tests__ディレクトリにはすでにいくつかのテストがあるので参考にしてください。テストを書いたら必ずbun testでテストを実行し全て成功するまで次に進まないでください。bun testを実行するときは対象のテストファイルのみを指定して実行してください。書いたテストが成功したら次のテストの作成に進む前にgitコミットしてください。.clinerulesに従って回答してください。
一通り全てのcomponentsファイルとlib配下のmoduleにテストが生成されてそう。$2くらい使って大方のテストは書けた。
次はbun test --coverageで全体のカバレッジをみてみる。するとどうもいくつかのファイルでテストが不十分っぽい。なので今度はcoverageを上げるように指示してみる。まずはどういう方針でカバレッジを上げるべきか検討させる。
code:prompt.txt
テストのカバレッジを上げたいです。bun test --coverageを実行してください。その実行結果からテストのカバレッジを上げるために必要なことを深く思考して本質的に改善すべきことを検討してください。
bun test --coverageの出力がデカすぎて400 {"type":"error","error":{"type":"invalid_request_error","message":"prompt is too long: 203969 tokens > 200000 maximum"}}というエラーが出た。promptにのらねぇ...。出力結果を何かしらの方法で意味抽出してpromptに載せられるようにする必要がある。
Google AI StudioにアクセスしてAPIキーを作成する。同じpromptで試してみる。が、全然ダメダメだ...mockデータの生成精度が低すぎる..。 指示の仕方を変えてみる。
code:prompt.txt
src/components/__tests__/MonsterTable.test.tsのテストを書いてください。まずは書くべきテストケースをリストアップしましょう。テストケースをまずは一つ書いて必ずbun testでテストを実行してください。成功するまで次のテストケースの実装に進まないでください。bun testを実行するときは対象のテストファイルのみを指定して実行してください。全てのテストケースを実装し全てのテストケースが成功したら必ずgitコミットしてください。src/components/__tests__やsrc/lib/__tests__ディレクトリにはすでにいくつかのテストがあるので参考にしてください。.clinerulesに従って回答してください。
結局行き詰まってしまう。どうもレンダリングに必要となるデータが複雑でコードから読み取れてない模様。最初に必要となるモックデータについて考えさせてみる。
code:prompt.txt
src/components/__tests__/MonsterTable.test.tsのテストの品質が悪いです。まずはそのためにはモックデータの改善が必要です。どのようなモックデータが必要になるか考えてください。そして書き直してください。src/components/__tests__やsrc/lib/__tests__ディレクトリにはすでにいくつかのテストがあるので参考にしても良いです。テストを書いたら必ずbun testでテストを実行し全て成功するまで次に進まないでください。bun testを実行するときは対象のテストファイルのみを指定して実行してください。書いたテストが成功したら必ずgitコミットしてください。.clinerulesに従って回答してください。
だめ。。。
結局src/components/__tests__/MonsterTable.test.tsに関しては自分で手直してした。テストの出力がデカすぎる場合はコマンド実行結果をinputに食わせられないので"prompt is too longというエラーが出てしまう。
次はテストカバレッジを出来るだけ上げたい。bun test --coverageの結果的にMonsterTable.test.tsとrankings.tsだけまだ足りないテストがあった。MonsterTable.test.tsに関してはもう手で修正した方が早いくらいだったので自分で実装した。rankings.tsに関しては結構な量がありそうなのでAIに任せてみる。まずプロンプトは以下で実行していく。
code:prompt.txt
src/lib/__tests__/ranking.test.tsのテストカバレッジを上げたいです。現在bun test --coverageを実行するとFuncsとLinesの出力状況は前者が77.27で後者が46.03です。テストが不足している箇所はsrc/lib/ranking.tsの90,92-102,104-133,135-137,139-140,142,147-149,180-183,205-208,274,280,309,311,316-325,335,337,342-349,372-445,488,498-501,505-508,513-516,521-533,547,550,555-588,601,603-605,608-611,613-636,639-661,663-667と出力されています。まずはカバレッジを上げるために必要なテストケースをリストアップしましょう。そして一つずつテストを書いていきましょう。テストケースをまずは一つ書いて必ずbun testでテストを実行してください。成功するまで次のテストケースの実装に進まないでください。bun testを実行するときは対象のテストファイルのみを指定して実行してください。全てのテストケースを実装し全てのテストケースが成功したら必ずgitコミットしてください。src/components/__tests__やsrc/lib/__tests__ディレクトリにはすでにいくつかのテストがあるので参考にしてください。.clinerulesに従って回答してください。
bun test --coverageだとローカル関数もcoverage対象になってしまいexportさせないといけなくなり困る。vitestのcoverageを使えないか試す。こっちなら/* istanbul ignore next */みたいなskipアノテーションが効く。
初期段階の設定ファイルをいじる工程とかはAuto-approveにしないで確認しながらの方が良い。軌道に乗るまでは慎重に進めた方が暴走を防いで手戻りが減らせるっぽい。
最後に使った.clinerulesは以下。キノピーさんのv5のrulesをカスタマイズしてる。