Cursorなどで利用できるProject Rulesを共有するサービスとCLIを書いた
Project Rulesの概要
Cursorなど、LLMの支援を受けることができるエディタでは、特定のファイルや状況に応じてコンテキストを与えるための Project Rules
というものが存在する。
Zennの記事では以下のものが詳しい。
これらのファイルは .cursor/rules/
に .mdc
ファイル形式で配置される。テキストファイル形式にできるということは当然他者と共有できるということで、すでに .cursorrules
や *.mdc
を共有する試みは散見される。
代表的なものを以下に列挙する。
Cursor Directory
rulesの共有以外にもMCPサーバーやCursor関連記事など、総合的なサービスになっている。
Awesome Cursor Rules
みんな大好きAwesomeまとめ。あまり整理されていないが、とにかく数が多い。 .cursorrules
形式が多い。
mizchi/ailab
魂、震えちゃった。使っている技術セットが合致していれば、ここから持ってくるのが一番いいのでは。
gitignore.ioのProject Rules版が欲しい
このような状況で私が最初に考えたのは「自分で考えるのは面倒なので、他人の作ったイケてるルールを簡単に導入したい」ということだ。読者諸賢もそうではないだろうか。
少なくとも、趣味のプログラミングで使うようなものは簡単に導入したい。仕事で使うものはもちろんじっくり育てる必要があるが、そもそも業務ではまだ使えない。つーか、正直書き方がわからない。
これはどこかで通った道だ。そう、 .gitignore
。あれである。
.gitignore
よくわからない。そんな時に道標になってくれた gitignore.io のことを覚えているだろうか?私はいまだに趣味のプロジェクトでリポジトリを立ち上げた時に
$ gi xcode,swift,macos >> .gitignore
をしている。
Project Rulesに関しても当然同じようなサービスが存在しているものだと思っていたが、調べた限りでは存在しなかった。しょうがないので自分で書いた。まあ実際にコードを書いたのは ChatGPT o3-mini-high
なのだが...。
WebとCLI
先達のgitignore.ioに倣って、WebとCLIをそれぞれ書いた。リポジトリは以下である。
Web
gitignore.io丸パクリである。キーワードを入力すると利用可能なルールがサジェストされるので、選択して Create
を押すだけ。画面遷移してプレーンテキストのようなスタイルでルールが表示される。
こちらは主に閲覧用に作成したので、機能は必要最低限になっている。
CLI
ひとまずmacOS向けにビルドしている。homebrewにも一応対応したので、次の方法でインストールできるはずだ。
brew tap fumito-ito/projectrules
brew install projectrules
helpコマンドで用途を確認できる。
$ projectrules -h
OVERVIEW: Generate .mdc files based on provided keywords.
USAGE: ProjectRules <keywords> [--repo <repo>] [--target-directory <target-directory>] [--dry-run]
ARGUMENTS:
<keywords> Comma-separated keywords (e.g., Swift, TypeScript, Python)
OPTIONS:
-r, --repo <repo> Specify a GitHub repository in owner/reponame format. If provided, the {keyword}.mdc file from
that repository will be used.
-t, --target-directory <target-directory>
Specify the output directory. Defaults to the current directory.
--dry-run If set, display the output content to standard output instead of writing to a file.
-h, --help Show help information.
キーワードをカンマ区切りで指定することで、それぞれのキーワードファイルを作成するようにしている。つまり、以下のような挙動だ。
$ projectrules best-practices-for-writitng-nextjs,coding-rules-for-supabase-edge-functions -t .cursor/rules
$ ls .cursor/rules
swift.mdc ios.mdc
将来的には、既存のルールから少しずつ拡張して最終的に自分のprivateリポジトリで業務に利用するルールを育てるようなユースケースを想定している。そのため、 --repo
オプションで自前のリポジトリをターゲットにできるようにした。
projectrules coding-rules-for-supabase-edge-functions -t .cursor/rules -r your-org/your-repo
Please Contribute !
Web / CLIからアクセスできる mdc
ファイルは以下のリポジトリに格納されているものだ。いけているルールが書けたら、ぜひPull Requestを送ってほしい。
現状、いくつかの企業がAI向けのプロンプトを公開しているため、発見できる範囲で取り込んでいる。こういった流れは今後加速していくのだろう。
- https://docs.convex.dev/ai
- https://developers.cloudflare.com/workers/get-started/prompting/
- https://supabase.com/docs/guides/getting-started/ai-prompts
ルールの作成以外でもコントリビュートを受け付けている。
現状、特に mdc
ファイルの命名で悩んでいる。名前が長すぎるのだ。とはいえ、 mdc
ファイルはコンテキストに強く束縛されているため、短くするとコンテキストが失われてしまう。この辺の解消方法も募集中である。
ChatGPT o3-mini-high
Special thanks to このプロジェクトを作成するにあたって、コードの8割程度を ChatGPT o3-mini-high
に依頼して生成した。Swiftは他の言語に比較するとサンプル数が少ないと思われ、生成の精度もそこまで高くはなかった。
60点くらいのものを出してくるのでエラーを確かめつつ都度修正していく、くらいのレベル感である。
とはいえライブラリのサンプルとして提示されている範囲のコードであるとか、JSONから Codable
なコードを生成するであるとか、テストやドキュメントを後からつけて欲しいという依頼であればいい精度で返してくれる。
筆者はWebサービス初心者であり、本プロジェクトをGCPにデプロイしてドメイン設定して...みたいな部分に大いに腰が引けていたが、その点ではChatGPTが大いに役立ってくれた。
Discussion