mcpField
M
manage-openapi-overlays

manage-openapi-overlays

github.com/speakeasy-api開発18104 回インストール37 週間前に更新
リポジトリ

manage-openapi-overlays について

再利用可能な Overlay ファイルで OpenAPI 仕様を調整するスキルです。SDK 生成や検証のワークフロー向けに、ソース仕様を変更せず JSONPath で対象を指定できます。

主な機能

  1. 01JSONPath 指定で Overlay を作成
  2. 02Overlay ファイルの適用と検証
  3. 03仕様の比較による Overlay 生成
  4. 04拡張による lint 問題への対処
  5. 05Speakeasy ワークフローへの追加

活用シーン

  1. 01SDK 名やメソッドのグループを調整
  2. 02ソース仕様を変えずに問題を修正
  3. 032つの仕様間の変更を記録

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/speakeasy-api/sdk-generation-skills --skill manage-openapi-overlays

インストール後、Claude Code で/manage-openapi-overlaysを入力して読み込まれたか確認します。

同梱ファイルcontent/security-schemes.mdcontent/validation.md

詳細

manage-openapi-overlays

オーバーレイを使うと、ソースを変更せずに SDK 生成用の OpenAPI 仕様をカスタマイズできます。このスキルでは、オーバーレイファイルの作成、仕様への適用、検証エラーの修正方法を説明します。

コンテンツガイド

トピックガイド
OpenAPI の検証content/validation.md
セキュリティスキームcontent/security-schemes.md

これらのガイドでは、仕様の検証、よくある問題の修正、認証方式の設定について説明します。

認証

環境変数 SPEAKEASY_API_KEY を設定するか、speakeasy auth login を実行してください。

使用するタイミング

オーバーレイファイルを手動で操作する必要があるときに、このスキルを使用してください。

  • 特定の JSONPath ターゲットを指定して、オーバーレイファイルを一から作成する
  • 既存のオーバーレイファイルを仕様に適用する
  • オーバーレイの構文と構造を検証する
  • 2 つの仕様を比較してオーバーレイを生成する
  • オーバーレイの仕組み(actions、targets、update/remove)を理解する
  • オーバーレイを手動で作成して lint の問題を修正する
  • ユーザーが「create overlay」「apply overlay」「overlay file」「manual overlay」「overlay syntax」「JSONPath targeting」「validate overlay」と言った場合

対象外:AI を活用した命名候補の提案(代わりに improve-sdk-naming を参照してください)

入力

入力必須説明
対象の仕様はいカスタマイズまたは修正する OpenAPI 仕様
カスタマイズ内容条件による適用する変更(グループ、名前、再試行、説明)
オーバーレイファイル条件による適用する既存のオーバーレイ(適用ワークフローの場合)
lint 出力あると便利修正する検証エラー(修正ワークフローの場合)

出力

出力説明
オーバーレイファイルJSONPath を対象にした変更を含む YAML ファイル
変更済みの仕様変換された OpenAPI 仕様(適用時)

コマンド

仕様を比較してオーバーレイを生成する
speakeasy overlay compare -b <before-spec> -a <after-spec> -o <output-overlay>

仕様の変更版があり、その差分を再利用可能なオーバーレイとして記録したい場合に使用します。

仕様にオーバーレイを適用する
speakeasy overlay apply -s <spec-path> -o <overlay-path> --out <output-path>
オーバーレイを検証する
speakeasy overlay validate -o <overlay-path>

オーバーレイを手動で作成する

次の構造でオーバーレイファイルを作成します。

overlay: 1.0.0
info:
  title: My Overlay
  version: 1.0.0
actions:
  - target: "$.paths['/example'].get"
    update:
      x-speakeasy-group: example
      x-speakeasy-name-override: getExample

各 action には target(JSONPath 式)と、update(マージするオブジェクト)または remove(ターゲットを削除するためのブール値)があります。

例:SDK メソッドの命名とグループ化

overlay: 1.0.0
info:
  title: SDK Customizations
  version: 1.0.0
actions:
  - target: "$.paths['/users'].get"
    update:
      x-speakeasy-group: users
      x-speakeasy-name-override: list
  - target: "$.paths['/users'].post"
    update:
      x-speakeasy-group: users
      x-speakeasy-name-override: create
  - target: "$.paths['/users/{id}'].get"
    update:
      x-speakeasy-group: users
      x-speakeasy-name-override: get
  - target: "$.paths['/users/{id}'].delete"
    update:
      x-speakeasy-group: users
      x-speakeasy-name-override: delete
      deprecated: true

これにより、次の SDK メソッドが生成されます:sdk.users.list()、sdk.users.create()、sdk.users.get()、sdk.users.delete()。

例:オーバーレイを適用する

# Apply overlay and write merged spec
speakeasy overlay apply -s openapi.yaml -o sdk-overlay.yaml --out openapi-modified.yaml

# Compare two specs to generate an overlay
speakeasy overlay compare -b original.yaml -a modified.yaml -o changes-overlay.yaml

ワークフローで使用する(推奨)

オーバーレイを手動で適用する代わりに、.speakeasy/workflow.yaml に追加します。

sources:
  my-api:
    inputs:
      - location: ./openapi.yaml
    overlays:
      - location: ./naming-overlay.yaml
      - location: ./grouping-overlay.yaml

オーバーレイは順番に適用されます。後のオーバーレイは前のオーバーレイを上書きできます。この方法により、speakeasy run の実行時にオーバーレイが常に適用されます。

よくある修正パターン

ソース仕様を編集できない場合は、オーバーレイを使って検証の問題を修正します。

問題オーバーレイによる修正
操作名が適切でない操作に x-speakeasy-name-override を追加する
説明がない操作に summary または description を追加する
タグがない操作に tags 配列を追加する
操作のグループ化が必要操作に x-speakeasy-group を追加する
再試行の設定が必要操作または全体に x-speakeasy-retries を追加する
エンドポイントを非推奨にする操作に deprecated: true を追加する
SDK 固有のメタデータを追加する任意の x-speakeasy-* 拡張を追加する
修正ワークフロー
# 1. Validate the spec to identify issues
speakeasy lint openapi --non-interactive -s openapi.yaml

# 2. Create an overlay file targeting each issue (see patterns above)

# 3. Add overlay to workflow.yaml under sources.overlays

# 4. Regenerate the SDK
speakeasy run --output console

Speakeasy 拡張機能リファレンス

拡張機能(x-speakeasy-*)を使用して SDK の生成をカスタマイズできます。オーバーレイを通じて適用します。

拡張機能適用対象目的
x-speakeasy-retriesオペレーションまたはルート再試行動作を設定します
x-speakeasy-paginationオペレーション自動ページネーションを有効にします
x-speakeasy-name-overrideオペレーションSDK メソッド名を上書きします
x-speakeasy-groupオペレーションメソッドを名前空間の下にグループ化します
x-speakeasy-unknown-valuesenum を含むスキーマ不明な enum 値を許可します
x-speakeasy-globalsルートSDK 全体で使用するパラメーターを定義します
x-speakeasy-custom-security-schemeセキュリティスキーム複数パートのカスタム認証
再試行
actions:
  - target: "$.paths['/resources'].get"  # Or "$" for global
    update:
      x-speakeasy-retries:
        strategy: backoff
        backoff:
          initialInterval: 500      # ms
          maxInterval: 60000        # ms
          maxElapsedTime: 3600000   # ms
          exponent: 1.5
        statusCodes: ["5XX", "429"]
        retryConnectionErrors: true
ページネーション

オフセット/リミット:

actions:
  - target: "$.paths['/users'].get"
    update:
      x-speakeasy-pagination:
        type: offsetLimit
        inputs:
          - name: offset
            in: parameters
            type: offset
          - name: limit
            in: parameters
            type: limit
        outputs:
          results: $.data
          numPages: $.meta.total_pages

カーソル:

actions:
  - target: "$.paths['/events'].get"
    update:
      x-speakeasy-pagination:
        type: cursor
        inputs:
          - name: cursor
            in: parameters
            type: cursor
        outputs:
          results: $.events
          nextCursor: $.next_cursor
オープン enum(耐障害性)

API が新しい enum 値を返した際に SDK が破損しないようにします。

actions:
  - target: "$.components.schemas.Status"
    update:
      x-speakeasy-unknown-values: allow

すべての enum に適用する場合(オーバーレイのルートに x-speakeasy-jsonpath: rfc9535 を追加します):

actions:
  - target: $..[?length(@.enum) > 1]
    update:
      x-speakeasy-unknown-values: allow
グローバルヘッダー

SDK 全体で使用するヘッダーをコンストラクターのオプションとして追加します。

actions:
  - target: $
    update:
      x-speakeasy-globals:
        parameters:
          - $ref: "#/components/parameters/TenantId"
  - target: $.components
    update:
      parameters:
        TenantId:
          name: X-Tenant-Id
          in: header
          schema:
            type: string

結果:client = SDK(api_key="...", tenant_id="tenant-123")

カスタムセキュリティスキーム

複雑な認証(HMAC、複数パートの認証情報)の場合:

actions:
  - target: $.components
    update:
      securitySchemes:
        hmacAuth:
          type: http
          scheme: custom
          x-speakeasy-custom-security-scheme:
            schema:
              type: object
              properties:
                keyId:
                  type: string
                keySecret:
                  type: string
  - target: $
    update:
      security:
        - hmacAuth: []

gen.yaml で envVarPrefix: MYAPI を設定すると、MYAPI_KEY_ID と MYAPI_KEY_SECRET の環境変数をサポートするコードが生成されます。

JSONPath ターゲティングリファレンス

ターゲット選択対象
$.paths['/users'].getGET /users オペレーション
$.paths['/users/{id}'].*/users/{id} のすべてのオペレーション
$.paths['/users'].get.parameters[0]GET /users の最初のパラメーター
$.components.schemas.UserUser スキーマ定義
$.components.schemas.User.properties.nameUser スキーマの Name プロパティ
$.infoAPI 情報オブジェクト
$.info.titleAPI タイトル
$.servers[0]最初のサーバーエントリー

避けるべきこと

  • オーバーレイを使用して、無効な YAML/JSON 構文エラーを修正しないでください。ソースファイルを修正してください
  • 壊れた $ref パスをオーバーレイで修正しようとしないでください。ソース仕様を修正してください
  • 誤ったデータ型を修正するためにオーバーレイを使用しないでください。これは API 設計上の問題です
  • オーバーレイでスキーマを重複排除しようとしないでください。構造分析が必要です
  • ソース仕様の修正が必要なエラーを無視しないでください。オーバーレイですべてを解決できるわけではありません
  • 外部で管理されているソース OpenAPI 仕様を直接変更しないでください
  • speakeasy overlay create コマンドを使用しないでください。そのようなコマンドは存在しません

トラブルシューティング

エラー原因解決策
"target not found"JSONPath が仕様の構造と一致しません仕様を確認して、パスと大文字・小文字が正確に一致しているか確かめてください
変更が適用されないワークフローにオーバーレイがありませんworkflow.yaml の sources.overlays にオーバーレイを追加してください
"invalid overlay"YAML の形式が正しくありませんオーバーレイの構造を確認してください。overlay、info、actions が必要です
YAML parse errorオーバーレイの構文が無効ですYAML のインデントと引用符を確認してください
変更が反映されないターゲットパスが間違っています大文字・小文字も含めて正確なパスを指定した $.paths['/exact-path'] を使用してください
オーバーレイ適用後もエラーが続くオーバーレイでは解決できない問題ですソース仕様の修正が必要な問題かどうか確認してください
オーバーレイの順序が競合している後のオーバーレイが前のオーバーレイを上書きしていますworkflow.yaml でオーバーレイの順序を変更するか、1 つのファイルにまとめてください

変更後の手順

オーバーレイファイルを作成または変更し、workflow.yaml に追加した後、SDK を再生成するようユーザーにプロンプトを表示してください。

オーバーレイの設定が完了しました。 speakeasy run で SDK を再生成しますか?

ユーザーが確認した場合は、次を実行します。

speakeasy run --output console

SDK にオーバーレイの変更を反映するには、再生成が必要です。

コメント