📝

Cursorなどで利用できるProject Rulesを共有するサービスとCLIを書いた

2025/03/04に公開

Project Rulesの概要

Cursorなど、LLMの支援を受けることができるエディタでは、特定のファイルや状況に応じてコンテキストを与えるための Project Rules というものが存在する。
https://docs.cursor.com/context/rules-for-ai

Zennの記事では以下のものが詳しい。
https://zenn.dev/globis/articles/cursor-project-rules

これらのファイルは .cursor/rules/.mdc ファイル形式で配置される。テキストファイル形式にできるということは当然他者と共有できるということで、すでに .cursorrules*.mdc を共有する試みは散見される。

代表的なものを以下に列挙する。

Cursor Directory

https://cursor.directory/rules

rulesの共有以外にもMCPサーバーやCursor関連記事など、総合的なサービスになっている。

Awesome Cursor Rules

https://github.com/PatrickJS/awesome-cursorrules

みんな大好きAwesomeまとめ。あまり整理されていないが、とにかく数が多い。 .cursorrules 形式が多い。

mizchi/ailab

https://github.com/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をそれぞれ書いた。リポジトリは以下である。
https://github.com/fumito-ito/ProjectRules

Web

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を送ってほしい。

https://github.com/fumito-ito/mdcvalult

現状、いくつかの企業がAI向けのプロンプトを公開しているため、発見できる範囲で取り込んでいる。こういった流れは今後加速していくのだろう。

ルールの作成以外でもコントリビュートを受け付けている。

現状、特に mdc ファイルの命名で悩んでいる。名前が長すぎるのだ。とはいえ、 mdc ファイルはコンテキストに強く束縛されているため、短くするとコンテキストが失われてしまう。この辺の解消方法も募集中である。

Special thanks to ChatGPT o3-mini-high

このプロジェクトを作成するにあたって、コードの8割程度を ChatGPT o3-mini-high に依頼して生成した。Swiftは他の言語に比較するとサンプル数が少ないと思われ、生成の精度もそこまで高くはなかった。

60点くらいのものを出してくるのでエラーを確かめつつ都度修正していく、くらいのレベル感である。

とはいえライブラリのサンプルとして提示されている範囲のコードであるとか、JSONから Codable なコードを生成するであるとか、テストやドキュメントを後からつけて欲しいという依頼であればいい精度で返してくれる。

筆者はWebサービス初心者であり、本プロジェクトをGCPにデプロイしてドメイン設定して...みたいな部分に大いに腰が引けていたが、その点ではChatGPTが大いに役立ってくれた。

Discussion