orchestrate-multi-repo-sdks について
API仕様リポジトリから、言語ごとに分かれたSDKリポジトリの生成を調整するスキルです。PRを起点とする生成、状態報告、関連するSDK PRのマージやクローズを扱います。
主な機能
- 01複数のSDKリポジトリで生成を開始
- 02SDKのプルリクエストを調整
- 03仕様PRに生成状況を報告
- 04言語別SDKのチーム運用に対応
活用シーン
- 01API仕様PRの開始時にSDKを生成
- 02仕様PRの終了時にSDK PRを処理
- 03異なるチーム間のSDKリリースを調整
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ speakeasy-api/ sdk-generation-skills --skill orchestrate-multi-repo-sdksインストール後、Claude Code で/orchestrate-multi-repo-sdksを入力して読み込まれたか確認します。
詳細
複数リポジトリの SDK をオーケストレーションする
各言語の SDK がそれぞれ独自のリポジトリ(例:myapi-typescript、myapi-python、myapi-go)にある場合に、SDK の生成を管理します。
使用する場面
- 異なる言語の SDK が別々のリポジトリにある
- PR をトリガーとして、リポジトリをまたいで SDK を生成する必要がある
- 自動的な PR の調整(仕様 PR がクローズした際に SDK の PR をマージまたはクローズする)を行いたい
- 異なるチームがそれぞれ異なる言語の SDK を保守している
- ユーザーが「複数リポジトリの SDK」「リポジトリ間のワークフロー」「SDK の PR 同期」と言っている
アーキテクチャ
┌─────────────────────────────────────────────────────────┐
│ API Spec Repository │
├─────────────────────────────────────────────────────────┤
│ PR opened │ PR merged/closed │ Main push │
│ ↓ │ ↓ │ ↓ │
│ kick-off │ reconcile-prs │ sync │
└───────────────┴──────────────────────┴──────────────────┘
│ │ │
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ typescript │ │ python-sdk │ │ go-sdk │
│ SDK PR │ │ SDK PR │ │ SDK PR │
└──────────────┘ └──────────────┘ └──────────────┘
ワークフロー 1:生成を開始する(PR トリガー)
仕様 PR が開かれたときに、各言語のリポジトリで SDK の生成をトリガーします。
# .github/workflows/kick-off-generation.yaml
name: Kick Off SDK Generation
on:
pull_request:
types: [opened, synchronize, reopened]
jobs:
trigger_sdk_repos:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- repo: myapi-typescript
- repo: myapi-python
- repo: myapi-go
steps:
- name: Trigger SDK generation
env:
GH_TOKEN: ${{ secrets.SDK_REPOS_PAT }}
run: |
gh workflow run sdk_generation.yaml \
--repo "your-org/${{ matrix.repo }}" \
--field feature_branch="${{ github.head_ref }}"
ワークフロー 2:PR を調整する(マージ/クローズ時)
仕様 PR がクローズしたときに、SDK の PR を自動でマージまたはクローズします。
# .github/workflows/reconcile-prs.yaml
name: Reconcile SDK PRs
on:
pull_request:
types: [closed]
jobs:
manage_sdk_prs:
runs-on: ubuntu-latest
strategy:
matrix:
repo: [myapi-typescript, myapi-python, myapi-go]
steps:
- name: Manage SDK PR
env:
GH_TOKEN: ${{ secrets.SDK_REPOS_PAT }}
run: |
branch="${{ github.event.pull_request.head.ref }}"
was_merged="${{ github.event.pull_request.merged }}"
pr_number=$(gh pr list --repo "your-org/${{ matrix.repo }}" \
--head "$branch" --json number --jq '.[0].number')
if [[ -n "$pr_number" ]]; then
if [[ "$was_merged" == "true" ]]; then
gh pr merge "$pr_number" --repo "your-org/${{ matrix.repo }}" \
--squash --delete-branch
else
gh pr close "$pr_number" --repo "your-org/${{ matrix.repo }}"
fi
fi
SDK リポジトリのワークフロー
各 SDK リポジトリには、ディスパッチ可能なワークフローが必要です。
# .github/workflows/sdk_generation.yaml (in each SDK repo)
name: SDK Generation
on:
workflow_dispatch:
inputs:
feature_branch:
description: 'Feature branch from spec repo'
required: false
jobs:
generate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Create branch
if: inputs.feature_branch != ''
run: git checkout -b "${{ inputs.feature_branch }}"
- name: Generate SDK
run: speakeasy run -y
env:
SPEAKEASY_API_KEY: ${{ secrets.SPEAKEASY_API_KEY }}
- name: Create PR
if: inputs.feature_branch != ''
run: |
git add -A && git commit -m "chore: regenerate SDK" || exit 0
git push -u origin "${{ inputs.feature_branch }}"
gh pr create --title "SDK update" --body "Auto-generated" || true
必須のシークレット
| シークレット | 場所 | 用途 |
|---|---|---|
SPEAKEASY_API_KEY | すべてのリポジトリ | Speakeasy CLI の認証 |
SDK_REPOS_PAT | 仕様リポジトリ | SDK リポジトリ用の repo スコープを持つ PAT |
PR ステータスの報告
SDK の生成ステータスを仕様 PR に報告します。
- name: Update PR comment
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
marker=""
comment="$marker
### ${{ matrix.repo }} SDK
| Status | PR |
|--------|-----|
| ✅ Success | [View PR](url) |"
gh api "repos/${{ github.repository }}/issues/${{ github.event.pull_request.number }}/comments" \
-f body="$comment"
複数リポジトリとモノレポの比較
| 項目 | 複数リポジトリ | モノレポ |
|---|---|---|
| 分離性 | 独立したバージョン管理 | 共通のバージョン管理 |
| CI の複雑さ | 高い | 低い |
| 最適な用途 | チームや開発サイクルが異なる場合 | リリースを統一する場合 |
トラブルシューティング
| 問題 | 解決策 |
|---|---|
| PAT の権限 | repo と actions のスコープがあることを確認します |
| ブランチが見つからない | SDK リポジトリの main にワークフローが必要です |
| PR が作成されない | ブランチにすでに PR が存在するか確認します |
関連スキル
start-new-sdk-project- SDK リポジトリのセットアップorchestrate-multi-target-sdks- 単一リポジトリで複数のターゲットを管理する
コメント
Markdown 対応