mcpField
C
creating-backstage-scaffolder-action

creating-backstage-scaffolder-action

github.com/vinzscam開発449 回インストール10 週間前に更新
リポジトリ

creating-backstage-scaffolder-action について

Backstage Scaffolder の開発者向けに、テンプレートから呼び出せるカスタムバックエンド Action の作成方法を案内します。Action の定義とモジュール登録に加え、実行方式や実行時の注意点も扱います。

主な機能

  1. 01Scaffolder Template Action の作成
  2. 02バックエンドモジュールの登録
  3. 03単独編集とスキャフォールド生成
  4. 04ログ、出力、キャンセルの処理
  5. 05dry-run 動作の設定

活用シーン

  1. 01テンプレートに独自のバックエンド処理を追加
  2. 02既存の scaffolder-backend-module を拡張
  3. 03長時間 Action のログを提供
  4. 04dry-run 中の副作用を回避

インストール

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

$npx skills add https://github.com/vinzscam/backstage-skills --skill creating-backstage-scaffolder-action

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

同梱ファイルreferences/module-registration.mdreferences/template-action.md

詳細

Backstage Scaffolder アクションの作成

このスキルを使用する場面

  • Scaffolder テンプレートから呼び出せるカスタムアクションを作成する場合(例:acme:user:create、myorg:slack:notify)
  • 既存の scaffolder-backend-module-* プラグインを編集する場合

作成するもの

Scaffolder アクションは、scaffolderActionsExtensionPoint に対して TemplateAction を登録するバックエンドモジュール(createBackendModule({ pluginId: 'scaffolder', ... }))です。構成要素は次の2つです。

  1. アクション本体(createTemplateAction で作成)
  2. アクションを登録するモジュール

適切なパターンを選ぶ

作成するものリファレンス
アクション本体references/template-action.md
アクションを組み込むモジュールreferences/module-registration.md

2つの呼び出し方法

  • 単独:既存の scaffolder-backend-module-* を編集します。
  • スキャフォールド後(creating-backstage-plugin から scaffolder-backend-module 用に呼び出される場合):アクション定義とモジュール登録の両方のファイルをまとめて生成します。

よくある注意点

  • アクションの id は <namespace>:<name>(または <namespace>:<group>:<name>)の規則に従います。namespace は自由に選べます。インストール済みモジュールのカタログにある他のアクションと衝突しない、安定した名前を選んでください。
  • スキーマは生の Zod スキーマではなく、ファクトリー関数です。例:input: { name: z => z.string() }(input: { name: z.string() } ではありません)。Backstage は Zod のバージョンを内部で固定するためにこのパターンを使用します。../backstage/plugins/scaffolder-node/src/actions/createTemplateAction.ts を参照して形式を確認してください。
  • アクションハンドラーのコンテキスト(ctx)には、ctx.logger、ctx.workspacePath、ctx.input(入力スキーマに基づく型付き)、出力を出力する ctx.output(name, value)、ユーザー ID を取得する ctx.getInitiatorCredentials()、サンドボックス化された作業用の ctx.createTemporaryDirectory()、キャンセル用の ctx.signal(AbortSignal)、ドライランモード用の ctx.isDryRun が含まれます。
  • 実行時間の長いアクションでは、定期的に ctx.logger.info を呼び出してください。Scaffolder の UI はログをユーザーにストリーミングします。
  • ドライランに対応するには、supportsDryRun: true を設定し、ハンドラー内で ctx.isDryRun を確認して副作用をスキップしてください。
  • テンプレートでは if: ${{ always() }} と if: ${{ failure() }} を使って、失敗後のステップ実行を制御できます。always() は無条件に実行し、failure() は先行するステップが失敗した場合にのみ実行します。これらはテンプレートエンジンに組み込まれているため、アクションの作成者が対応する必要はありません。

コメント