🔗

Cursor Rulesをシンボリックリンクで参照する検証(開発日記 No.075)

に公開

関連リンク

はじめに

昨日はCursor Rulesの管理方法について色々と検討しました。今日は、その続きとして、シンボリックリンクを使ってRulesを参照する方法を試してみます。これがうまくいけば、Rulesの管理がかなり楽になるはず!

背景と目的

Cursor Rulesを効率的に管理し、複数のプロジェクトで共有したいというのが今回の目的です。理想としては、共通のRulesを修正したら、すべてのプロジェクトに自動的に反映されるようにしたい。そこで、シンボリックリンクを使って、Rulesを共有リポジトリから参照する方法を試してみることにしました。

検討内容

まずは、Rulesをどのように整理するかを考えました。昨日の検証で、Rulesは以下のカテゴリに分けられることがわかっています。

  • knowledge: 常に適用される背景知識
  • modes: タスクに応じて切り替える特定の役割
  • references: 参考資料やドキュメント

これらのカテゴリごとにディレクトリを分け、それぞれのRulesファイルをシンボリックリンクで参照するようにします。

シンボリックリンクの作成方法も検討しました。手動で作成することもできますが、数が多くなると大変なので、スクリプトを使って自動化することにしました。

実装内容

まずは、Rules専用リポジトリ(my-cursor-rules)の構造を確認しました。

次に、シンボリックリンクを作成するためのスクリプトを作成しました。以下のスクリプトは、プロジェクトの .cursor/rules ディレクトリに、rules-common 内のRulesファイルへのシンボリックリンクを一括で作成します。

#!/bin/bash

# プロジェクトルートディレクトリから実行することを想定

# knowledgeカテゴリのRulesファイルに対するシンボリックリンク作成
for file in .cursor/rules-common/knowledge/*.mdc; do
  filename=$(basename "$file")
  mkdir -p .cursor/rules/knowledge
  ln -sf "../rules-common/knowledge/$filename" ".cursor/rules/knowledge/$filename"
done

# modesカテゴリのRulesファイルに対するシンボリックリンク作成
for file in .cursor/rules-common/modes/*.mdc; do
  filename=$(basename "$file")
  mkdir -p .cursor/rules/modes
  ln -sf "../rules-common/modes/$filename" ".cursor/rules/modes/$filename"
done

# referencesカテゴリのRulesファイルに対するシンボリックリンク作成
for file in .cursor/rules-common/references/*.md; do
  filename=$(basename "$file")
  mkdir -p .cursor/rules/references
  ln -sf "../rules-common/references/$filename" ".cursor/rules/references/$filename"
done

スクリプトを実行後、Cursorで動作確認を行いました。

  • 背景知識 Rule 確認: プロジェクトを開き、「このプロジェクトについて教えてください」と質問。背景知識に基づいた応答があることを確認。
  • Manual モード Rule 確認: Cmd + Shift + P で "Apply Cursor Rule" を選択し、debug_mode_rule が表示されることを確認。選択後、デバッグに関する質問をして、デバッグモードの指示に従った応答があることを確認。
  • Agent Requested モード Rule 確認: 「このコードをレビューしてください」と質問。review_mode_rule.mdc の指示に従ったレビュー応答があることを確認。

最後に、共通Rulesを更新した場合の影響を確認しました。my-cursor-rules リポジトリのローカルコピーで .mdc ファイルを編集し、変更をコミット&プッシュ。その後、検証用プロジェクトでサブモジュールを更新しました。

git submodule update --remote --merge
git add .cursor/rules-common
git commit -m "Update common cursor rules submodule"

Cursorで再度プロジェクトを開き、更新されたRuleが適用されていることを確認しました。

技術的なポイント

シンボリックリンクを使用する際に重要なのは、リンク先のパスを正しく指定することです。特に、相対パスを使用する場合は、スクリプトの実行場所によってリンクが正しく機能しないことがあります。今回のスクリプトでは、プロジェクトルートディレクトリから実行することを前提として、相対パスを指定しています。

また、共通Rulesの更新を各プロジェクトに反映させるために、Git Submoduleを使用しました。Submoduleを使用することで、Rulesリポジトリを独立して管理しつつ、各プロジェクトで特定のバージョンを参照することができます。

所感

シンボリックリンクを使ったRulesの管理は、想像以上に便利でした!共通のRulesを修正するだけで、すべてのプロジェクトに反映されるのは本当に楽です。

ただ、Windows環境ではシンボリックリンクの扱いに注意が必要です。Git Bashなどの対応環境が必要になる場合があるので、チームメンバーに事前に周知しておく必要があります。

また、Git Submoduleの管理は少し複雑なので、チーム内で十分に理解しておく必要があります。Submoduleの更新を忘れると、古いRulesが適用されたままになってしまうので注意が必要です。

今後の課題

  • Windows環境でのシンボリックリンクの動作確認
  • Git Submoduleの管理方法のドキュメント作成
  • Rulesの追加・修正を容易にするためのツール開発

まとめ

今回は、Cursor Rulesをシンボリックリンクで参照する方法を検証しました。この方法を使うことで、複数プロジェクト間での共通Rulesの管理と更新を効率化できることがわかりました。特に、Git Submoduleと組み合わせることで、柔軟性と管理性のバランスが取れた仕組みを構築できます。今後は、この仕組みをさらに改善し、チーム開発での生産性向上に貢献していきたいです。

GitHubで編集を提案

Discussion