using-backstage-frontend-system について
Backstage New Frontend Systemでプラグインを作成・編集する開発者向けのスキルです。プラグイン構成、ルート、API、ページの実装パターンに加え、新規生成プラグインの設定方法も扱います。
主な機能
- 01プラグインと拡張機能のパターン
- 02ルート参照のガイド
- 03API公開とデータ取得のパターン
- 04ページとサブページの設定
- 05NFSフックとAPI参照
- 06実装時によくある注意点
活用シーン
- 01新しいNFSプラグインの定義
- 02ルート、ページ、サブページの追加
- 03プラグインAPIの公開や参照
- 04生成直後のプラグインへのNFSパターン適用
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ vinzscam/ backstage-skills --skill using-backstage-frontend-systemインストール後、Claude Code で/using-backstage-frontend-systemを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/api-extensions.mdhooks.mdpage-extensions.mdplugin-definition.mdroute-refs.mdsub-pages.md詳細
Backstage New Frontend System(NFS)のパターン
このスキルを使用する場面
- 新しいフロントエンドプラグインを定義する(
src/plugin.tsx) - ルート参照を宣言する(
src/routes.ts) - プラグインから API を公開する(
src/apis.ts) - ページ、サブページ、その他のエクステンションを追加する(
src/extensions.tsx) - NFS のフックを使用する(
useApi、useRouteRef)
適切なパターンを選ぶ
| 構築するもの | パターン | リファレンス |
|---|---|---|
| プラグイン自体 | createFrontendPlugin({ pluginId, ..., extensions }) | references/plugin-definition.md |
| ルート参照 | @backstage/frontend-plugin-api の createRouteRef、createSubRouteRef、createExternalRouteRef | references/route-refs.md |
| バックエンドエンドポイントの呼び出し(デフォルト) | fetchApi.fetch を呼び出す useAsync/useAsyncFn をラップしたデータフック — クライアントクラスもエクステンションも不要 | references/api-extensions.md |
| オープンソースプラグインで拡張可能な API を公開する | ApiBlueprint.make({ params }) | references/api-extensions.md |
| ページ(単一ルート) | PageBlueprint.make({ params: { path, routeRef, loader } }) | references/page-extensions.md |
| タブ付きページ | PageBlueprint(ローダーなし)+ SubPageBlueprint | references/sub-pages.md |
| コンポーネントで API を読み取る | @backstage/frontend-plugin-api の useApi(apiRef)、useRouteRef(routeRef) | references/hooks.md |
2 つの呼び出しモード
- スタンドアロン:ユーザーが既存の NFS プラグインを編集中の場合です。リファレンスを選んで適用します。
- スキャフォールド後(
frontend-plugin/frontend-plugin-moduleテンプレートでcreating-backstage-pluginから呼び出される場合):新しくスキャフォールドされたプラグインに標準的な NFS 構造を組み込みます —src/routes.ts、createFrontendPluginを使用するsrc/plugin.tsx、およびPageBlueprintエクステンションの例です。
よくある注意点
- NFS では、プラグインシステムのインポート元は
@backstage/core-plugin-apiではなく@backstage/frontend-plugin-apiです。フック(useApi、useRouteRef)、参照(identityApiRef、configApiRef、discoveryApiRef、fetchApiRef、storageApiRef、analyticsApiRef)、プリミティブ(createApiRef)はすべて新しいパッケージにあります。 createRouteRef()にid引数は不要です。id は、そのルートを所有するエクステンションから導出されます。createExternalRouteRef({ defaultTarget: '<pluginId>.<routeName>' })では、最も一般的なバインディングをdefaultTargetに設定してください。これにより、アプリで明示的なbindRoutesの呼び出しが不要になります。- 外部ルートがバインドされていない場合、
useRouteRef(externalRef)はundefinedを返すことがあります。必ずundefinedの場合を処理してください。 PageBlueprintのローダー内のページコンポーネントに、@backstage/core-componentsのPage、Header、PageWithHeaderを含めないでください。フレームワークのPageLayoutがPluginHeaderを自動的に描画します。ページコンテンツの最外部のラッパーには、@backstage/uiのContainerを使用してください。サブタイトルやカスタムアクションが必要な場合に限り、@backstage/uiのHeaderを使用してください。SubPageBlueprintのパスは相対パスです(先頭に/は付きません)。サブページコンポーネントはコンテンツのみを描画し、Page、Header、HeaderTabsは含めません。パディングが必要な場合は、サブページのコンテンツを@backstage/uiのContainerで囲んでください。createApiRef<T>().with({ id, pluginId })では、所有権が明示されるためビルダー形式が推奨されます。idは引き続きグローバルに一意である必要があります。API をオーバーライドできるのは、所有するプラグイン(またはそのプラグインを対象とするモジュール)だけです。fetchApi.fetchの呼び出しでは、@backstage/errorsのthrow await ResponseError.fromResponse(response)を使用して、OK 以外のレスポンスを処理してください。レスポンスボディを解析して構造化されたエラー情報を取り出し、他の Backstage UI サーフェス(例:<ResponseErrorPanel>)が理解できる型付きエラーを生成します。throw new Error(\Failed: ${response.status}`)` のように単純にエラーをスローしないでください。
コメント
Markdown 対応