GitHub Actions
GitHub Actionsを使用して、ClaudeCodeの設定ファイルやドキュメントを複数のリポジトリに同期できます。弊社では、以下のような設定ファイルを用いて、システムプロンプトを各リポジトリに同期しています。
テンプレートは以下のページで公開しています。
https://github.com/interactive-inc/open-prompt/blob/main/github.workflows/sync-sample.yml
弊社の推奨ルール
- 1つのリポジトリで設定ファイルを一元管理し複数の開発リポジトリへ同期する
- ClaudeCode関連ファイル(agents、commands、output-styles)を共有する
- GitHub Instructionsで共通のプロンプトを管理する
- 仕様書は開発リポジトリと相互に同期する
同期するファイルの種類
- 共通の設定ファイル(editorconfigなど)
- GitHubの共通ファイル(Issueのテンプレートなど)
- Copilot
- prompts -
.github/prompts - instructions -
.github/instructions
- prompts -
- ClaudeCode
- agents -
.claude/agents - commands -
.claude/commands - output-styles -
.claude/output-styles
- agents -
- 社内MCPサーバ -
mcp - 仕様書ディレクトリ -
.docs
設定ファイルの構成
システムプロンプトと仕様書とMCPサーバの全てを同期する場合は以下のような構成になります。
name: Sync sample
on:
workflow_dispatch:
push:
branches:
- main
paths:
- ".github/workflows/sample.yml"
- "github.prompts/*"
- "claude.commands/*"
- "docs/sample/**"
jobs:
sync:
runs-on: ubuntu-latest
strategy:
matrix:
target_repo:
- RyukyuInteractive/sample
env:
GIT_USER_NAME: RyukyuInteractive
GIT_USER_EMAIL: <>
GIT_COMMIT_MESSAGE: "from RyukyuInteractive/inta"
DOCS_FROM: docs
DOCS_TO: docs/sample
GITHUB_INSTRUCTIONS_FROM: github.instructions
GITHUB_INSTRUCTIONS: |
core.instructions.md
ts.instructions.md
GITHUB_PROMPTS_FROM: github.prompts
GITHUB_PROMPTS: |
app.md
api.md
CLAUDE_AGENTS_FROM: claude.agents
CLAUDE_AGENTS: |
biome-errors-checker.md
CLAUDE_COMMANDS_FROM: claude.commands
CLAUDE_COMMANDS: |
instructions.md
CLAUDE_OUTPUT_STYLES_FROM: claude.output-styles
CLAUDE_OUTPUT_STYLES: |
docs.md
steps:
- name: 💪 Checkout source repository
uses: actions/checkout@v3
with:
path: FROM
- name: 💪 Checkout target repository
uses: actions/checkout@v3
with:
repository: ${{ matrix.target_repo }}
path: TO
token: ${{ secrets.PAT_TOKEN }}
- name: ⚙️ Sync config files
- name: 🐙 Sync .github
- name: 🐙 Sync .github/instructions
- name: 🐙 Sync .github/prompts
- name: ✴️ Sync .claude/agents
- name: ✴️ Sync .claude/commands
- name: ✴️ Sync .claude/output-styles
- name: 📁 Sync .docs
- name: 🚀 Commit and push changes
環境変数(env)の役割
ドキュメントの同期設定
DOCS_FROM: docs # ターゲットリポジトリでの配置先ディレクトリ
DOCS_TO: docs/sample # ソースリポジトリ内のドキュメント元ディレクトリ
リポジトリでは仕様書をdocsディレクトリで管理しています。
コピー先のDOCS_TOでは必要なドキュメントのサブディレクトリで指定しています。
GitHub Instructionsの同期設定
GITHUB_INSTRUCTIONS_FROM: github.instructions # ソースリポジトリのディレクトリ
GITHUB_INSTRUCTIONS: | # 同期するファイルのリスト
core.instructions.md
docs.instructions.md
ts.instructions.md
_FROMはソースリポジトリ内のディレクトリを指定し、ファイル名のみの変数(GITHUB_INSTRUCTIONS)は同期するファイルをパイプ文字(|)で複数行リストとして定義します。
環境変数の命名規則
_FROMサフィックス: ソースリポジトリ内の設定ファイルの場所- ファイル名のみの変数: 同期するファイルのリスト(複数行で記述)
DOCS_FROM/DOCS_TO: 特殊な命名(FROMがターゲット側、TOがソース側)
チェックアウト
ソースリポジトリをFROMディレクトリに、ターゲットリポジトリをTOディレクトリにチェックアウトします。
steps:
- name: 💪 Checkout source repository
uses: actions/checkout@v3
with:
path: FROM
- name: 💪 Checkout target repository
uses: actions/checkout@v3
with:
repository: ${{ matrix.target_repo }}
path: TO
token: ${{ secrets.PAT_TOKEN }}
同期処理の詳細
設定ファイルの同期
- name: ⚙️ Sync config files
run: |
cp "FROM/.editorconfig" "TO/.editorconfig"
GitHub Prompts
GitHub Instructions
GitHubのInstructionsを同期します。
- name: 🐙 Sync .github/instructions
run: |
rm -rf TO/.github/instructions
mkdir -p TO/.github
mkdir -p TO/.github/instructions
echo "$GITHUB_INSTRUCTIONS" | xargs -I {} cp "FROM/$GITHUB_INSTRUCTIONS_FROM/{}" "TO/.github/instructions/{}"
サブディレクトリを使用する場合(既存ファイルを保持)
弊社では、プロジェクト固有の設定を保持したい場合、サブディレクトリを使用します。_や:などの記号をディレクトリ名に使用することで、共通設定と固有設定を分離します。
# agents: "_"サブディレクトリに共通設定を配置
- name: ✴️ Sync .claude/agents
run: |
rm -rf TO/.claude/agents/_
mkdir -p TO/.claude/agents
mkdir -p TO/.claude/agents/_
echo "$CLAUDE_AGENTS" | xargs -I {} cp "FROM/$CLAUDE_AGENTS_FROM/{}" "TO/.claude/agents/_/{}"
# commands: ":"サブディレクトリに共通設定を配置
- name: ✴️ Sync .claude/commands
run: |
rm -rf TO/.claude/commands/:
mkdir -p TO/.claude/commands
mkdir -p TO/.claude/commands/:
echo "$CLAUDE_COMMANDS" | xargs -I {} cp "FROM/$CLAUDE_COMMANDS_FROM/{}" "TO/.claude/commands/:/{}"
この方法により、以下のようなディレクトリ構造になります:
.claude/
├── agents/
│ ├── _/ # 共通設定(同期される)
│ │ └── biome-errors-checker.md
│ └── project-specific.md # プロジェクト固有(保持される)
├── commands/
│ ├── :/ # 共通設定(同期される)
│ │ └── instructions.md
│ └── custom-command.md # プロジェクト固有(保持される)
└── output-styles/
├── _/ # 共通設定(同期される)
│ └── docs.md
└── project-style.md # プロジェクト固有(保持される)
MCPサーバーの同期
ディレクトリごと同期します。
- name: 🍎 Sync mcp
run: |
rm -rf TO/mcp
cp -r FROM/mcp TO/mcp
ファイルパス
ソースリポジトリの構造はこのようになっています。
FROM/ (source-repo)
├── .editorconfig # 共通設定ファイル
├── .github/
│ └── PULL_REQUEST_TEMPLATE.md
├── github.prompts/ # Copilot用(envのGITHUB_PROMPTS_FROM)
│ ├── app.md
│ └── api.md
├── github.instructions/ # ClaudeCode instructions用(envのGITHUB_INSTRUCTIONS_FROM)
│ ├── core.instructions.md
│ └── ts.instructions.md
├── claude.agents/ # ClaudeCode agents用(envのCLAUDE_AGENTS_FROM)
│ ├── biome-errors-checker.md
│ └── ts-errors.md
├── claude.commands/ # ClaudeCode commands用(envのCLAUDE_COMMANDS_FROM)
│ └── instructions.md
├── claude.output-styles/ # ClaudeCode output-styles用(envのCLAUDE_OUTPUT_STYLES_FROM)
│ └── docs.md
├── docs/sample/ # ドキュメント(envのDOCS_TO)
│ └── README.md
└── mcp/ # MCPサーバー設定
同期先のリポジトリではこのように配置されます。
TO/ (target-repo)
├── .editorconfig # FROM/.editorconfigからコピー
├── .github/
│ ├── PULL_REQUEST_TEMPLATE.md # FROM/.github/からコピー
│ ├── prompts/ # Copilotが読み込む場所
│ │ ├── app.md # FROM/github.prompts/からコピー
│ │ └── api.md
│ └── instructions/ # ClaudeCodeが読み込む場所
│ ├── core.instructions.md # FROM/github.instructions/からコピー
│ └── ts.instructions.md
├── .claude/
│ ├── agents/ # ClaudeCode agentsが読み込む場所
│ │ ├── biome-errors-checker.md # FROM/claude.agents/からコピー
│ │ └── ts-errors.md
│ ├── commands/ # ClaudeCode commandsが読み込む場所
│ │ └── instructions.md # FROM/claude.commands/からコピー
│ └── output-styles/ # ClaudeCode output-stylesが読み込む場所
│ └── docs.md # FROM/claude.output-styles/からコピー
├── .docs/ # ドキュメント(envのDOCS_FROM)
│ └── README.md # FROM/docs/sample/からコピー
└── mcp/ # MCPサーバー設定