creating-backstage-scaffolder-action について
Backstage Scaffolder の開発者向けに、テンプレートから呼び出せるカスタムバックエンド Action の作成方法を案内します。Action の定義とモジュール登録に加え、実行方式や実行時の注意点も扱います。
主な機能
- 01Scaffolder Template Action の作成
- 02バックエンドモジュールの登録
- 03単独編集とスキャフォールド生成
- 04ログ、出力、キャンセルの処理
- 05dry-run 動作の設定
活用シーン
- 01テンプレートに独自のバックエンド処理を追加
- 02既存の scaffolder-backend-module を拡張
- 03長時間 Action のログを提供
- 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つです。
- アクション本体(
createTemplateActionで作成) - アクションを登録するモジュール
適切なパターンを選ぶ
| 作成するもの | リファレンス |
|---|---|
| アクション本体 | 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()は先行するステップが失敗した場合にのみ実行します。これらはテンプレートエンジンに組み込まれているため、アクションの作成者が対応する必要はありません。
コメント
Markdown 対応