感情王国
ブログ一覧に戻る

GitHub CopilotとClaude Codeのインストラクションを1ファイルで管理する方法

GitHub Copilot と Claude Code を両方使っていると、コーディング規約や命名規則を両方のツールに覚えさせる必要があります。ところが、それぞれのツールが読むファイルの場所が異なるため、同じ内容を 2 箇所に書くはめになりがちです。この記事では、シンボリックリンクを使って 1 つのマスターファイルで両ツールのインストラクションを管理する方法を紹介します。

この記事の対象読者:

  • GitHub Copilot と Claude Code を日常的に併用している方
  • コーディング規約やルールを両ツールに適用したい方
  • インストラクションファイルの二重管理に手間を感じている方

各ツールのインストラクション形式の違い

まず、それぞれのツールがどのような場所・形式でインストラクションを読み取るか整理しておきましょう。

GitHub Copilot の場合

GitHub Copilot は .github/instructions/ ディレクトリ以下の *.instructions.md ファイルを読みます。ファイルのフロントマターに applyTo: キーを書くと、どのファイルパターンに適用するかを指定できます。

---
applyTo: "**/*.ts"
---
TypeScript ファイルでは strict モードを有効にすること。
型推論に頼りすぎず、明示的な型注釈を付けること。

Claude Code の場合

Claude Code は .claude/rules/ ディレクトリ以下の Markdown ファイルを読みます。フロントマターの paths: キーにグロブパターンを書くと、対象ファイルへのインストラクションとして認識されます。

---
paths: **/*.ts\n---\nTypeScript ファイルでは strict モードを有効にすること。\n型推論に頼りすぎず、明示的な型注釈を付けること。

読み取るパスもフロントマターのキーも異なります。これが二重管理の根本的な原因です。

問題: 二重管理の発生

実際のプロジェクトで両ツールを使い始めると、次のような状況になります。

.github/
  instructions/
    typescript.instructions.md   ← Copilot 用
    react.instructions.md        ← Copilot 用
.claude/
  rules/
    typescript.md                ← Claude Code 用
    react.md                     ← Claude Code 用

内容がほぼ同一のファイルが 2 セット存在することになります。これは見た目の問題だけではありません。チームで規約を更新するとき、片方のファイルを更新し忘れると、ツールごとに異なるルールが適用されてしまいます。

たとえば、「any 型の使用を禁止する」というルールを追加したとき、GitHub Copilot 側のファイルだけ更新して Claude Code 側を忘れると、Claude Code は any を使ったコードを提案し続けます。こういった不整合は、特に複数人のチーム開発で気づきにくく、じわじわとコードの品質を下げていきます。

解決策: シンボリックリンクでマスターを共有する

.github/instructions/ のファイルをマスターデータとして定義し、.claude/rules/ にシンボリックリンクを貼るのが今回の方法です。

.github/
  instructions/
    typescript.instructions.md   ← マスターファイル(実体)
.claude/
  rules/
    typescript.md                ← シンボリックリンク(実体なし)

物理的なファイルは .github/instructions/ にしか存在しません。.claude/rules/ にあるのはシンボリックリンクであり、同じファイルを指しています。インストラクションの内容を変更するときは、マスターファイルを 1 つ編集するだけで、両ツールに反映されます。

マスターファイルのフロントマター

マスターファイルには、両ツールが必要とするフロントマターのキーを両方書いておきます。各ツールは自分が知らないキーを無視するため、互いに干渉しません。

---
applyTo: "**/*.ts"
paths: **/*.ts
---
フロントマターの状態GitHub CopilotClaude Code
applyTo のみ本文を参照できる本文を参照できない
paths のみ本文を参照できない本文を参照できる
両方あり本文を参照できる本文を参照できる

具体的な設定手順

1. マスターファイルを作成する

.github/instructions/ にインストラクションファイルを作成します。

.github/instructions/typescript.instructions.md:

---
applyTo: "**/*.ts,**/*.tsx"
paths: **/*.{ts,tsx}
---

## TypeScript コーディング規約

### 型の扱い
- `strict` モードを有効にすること(`tsconfig.json` で設定済み)
- `any` 型の使用を禁止する。代わりに `unknown` を使い、型ガードで絞り込むこと
- 関数の戻り値型は必ず明示すること

### 命名規則
- 変数・関数: camelCase
- クラス・インターフェース・型: PascalCase
- 定数: UPPER_SNAKE_CASE
- ファイル名: kebab-case

2. .claude/rules/ ディレクトリを作成する

mkdir -p .claude/rules

3. シンボリックリンクを貼る

ln -s ../../.github/instructions/typescript.instructions.md .claude/rules/typescript.md

相対パスで指定することがポイントです。ln -s の第 1 引数はリンク先(マスター)、第 2 引数は作成するリンクのパスです。.claude/rules/ から見た相対パスで ../../.github/instructions/ を指定しています。

複数のファイルがある場合は同様に繰り返します。

ln -s ../../.github/instructions/react.instructions.md .claude/rules/react.md
ln -s ../../.github/instructions/general.instructions.md .claude/rules/general.md

4. シンボリックリンクを確認する

ls -la .claude/rules/
lrwxr-xr-x  typescript.md -> ../../.github/instructions/typescript.instructions.md
lrwxr-xr-x  react.md -> ../../.github/instructions/react.instructions.md

-> でリンク先が表示されていれば正しく設定できています。

ディレクトリ構成の Before / After

Before(二重管理):

.github/
  instructions/
    typescript.instructions.md   ← Copilot 用(実体)
    react.instructions.md        ← Copilot 用(実体)
.claude/
  rules/
    typescript.md                ← Claude Code 用(実体・重複)
    react.md                     ← Claude Code 用(実体・重複)

After(シンボリックリンクで統合):

.github/
  instructions/
    typescript.instructions.md   ← マスター(実体)
    react.instructions.md        ← マスター(実体)
.claude/
  rules/
    typescript.md                ← シンボリックリンク
    react.md                     ← シンボリックリンク

物理ファイルは .github/instructions/ のみ。編集はマスターファイルだけで完結します。

Git での管理

シンボリックリンク自体は Git で追跡できます。チームメンバーがリポジトリをクローンすると、シンボリックリンクも再現されます。

git add .claude/rules/typescript.md
git add .github/instructions/typescript.instructions.md
git commit -m "feat: add unified TypeScript instruction file"

まとめ

この方法のポイントをまとめると、次のようになります。

  • .github/instructions/ をマスターデータとして定義し、インストラクションの実体をここに置く
  • .claude/rules/ にはシンボリックリンクを貼り、マスターファイルを参照させる
  • マスターファイルのフロントマターに applyTo(Copilot 用)と paths(Claude Code 用)の両方を書く
  • 物理ファイルは 1 つだけなので、編集の漏れが起きない
  • Git でシンボリックリンクを追跡することでチーム全体に設定を共有できる

既存の設定がある場合は、.github/instructions/ のファイルにフロントマターの paths: を追記し、.claude/rules/ のファイルをシンボリックリンクに置き換えるだけで移行できます。

参考リンク