mcpField
U
using-backstage-catalog

using-backstage-catalog

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

using-backstage-catalog について

using-backstage-catalog は、Backstage のフロントエンドおよびバックエンドプラグインでカタログ操作を実装するためのスキルです。エンティティの取得・検索やカタログロケーションの管理方法に加え、認証情報、非同期取得、よくある注意点を説明します。

主な機能

  1. 01参照によるエンティティ取得
  2. 02フィルターによるエンティティ検索
  3. 03ロケーションの登録・更新・解除
  4. 04フロントエンドとバックエンドのパターン
  5. 05認証情報と非同期取得のガイダンス

活用シーン

  1. 01プラグイン内でカタログエンティティを検索
  2. 02条件に一致するエンティティを一覧表示
  3. 03カタログロケーションをプログラムから管理
  4. 04スキャフォールド済みプラグインにカタログ操作を追加

インストール

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

$npx skills add https://github.com/vinzscam/backstage-skills --skill using-backstage-catalog

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

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
fetch-by-ref.md
query-entities.md
register-entity.md

詳細

Backstage カタログのパターン

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

  • プラグインで、ref を指定して特定のエンティティ(Group、Component、User など)を取得する必要がある場合
  • プラグインで、フィルターを使ってエンティティをクエリする必要がある場合(特定のチームが所有するすべての Component、指定したタイプのすべての Group など)
  • プログラムから新しいカタログのロケーションを登録したり、エンティティを更新したり、ロケーションの登録を解除したりする必要がある場合
  • フロントエンドコードとバックエンドコードの両方に適用できます。エントリーポイントは異なりますが、操作は同じです

適切なパターンの選択

フロントエンド(フロントエンドプラグインのコンポーネント内)
状況パターンリファレンス
ref で単一のエンティティを取得するuseApi(catalogApiRef).getEntityByRef(ref)references/fetch-by-ref.md (フロントエンドのセクション)
フィルターを使ってエンティティをクエリするuseApi(catalogApiRef).getEntities({ filter })references/query-entities.md (フロントエンドのセクション)
ロケーションを登録/更新/登録解除するuseApi(catalogApiRef).addLocation / refreshEntity / removeLocationByIdreferences/register-entity.md (フロントエンドのセクション)
バックエンド(バックエンドプラグインまたはモジュール内)
状況パターンリファレンス
ref で単一のエンティティを取得するcatalog.getEntityByRef(ref, { credentials }) を catalogServiceRef 経由で呼び出すreferences/fetch-by-ref.md (バックエンドのセクション)
フィルターを使ってエンティティをクエリするcatalog.getEntities({ filter }, { credentials }) を catalogServiceRef 経由で呼び出すreferences/query-entities.md (バックエンドのセクション)
ロケーションを登録/更新/登録解除するcatalog.addLocation / refreshEntity / removeLocationById を catalogServiceRef 経由で呼び出すreferences/register-entity.md (バックエンドのセクション)

2 つの呼び出しモード

  • スタンドアロン(開発途中):ユーザーが既存のプラグインを編集中です。上の状況一覧から適切なリファレンスを選び、適用します。
  • スキャフォールド後(creating-backstage-plugin から呼び出される場合):新たにスキャフォールドされたプラグインにパターンを適用します。各リファレンスの「スキャフォールド後の使用」セクションにファイルと挿入箇所が記載されています。frontend-template のスキャフォールドではフロントエンドのパターンを、backend-template のスキャフォールドではバックエンドのパターンを使用します。

よくある注意点

  • フロントエンドのコードでは、catalogApiRef は @backstage/plugin-catalog-react から取得します。@backstage/catalog-client ではありません。後者はバックエンド用です。
  • NFS プラグインでは、useApi 自体は @backstage/frontend-plugin-api から取得します。catalogApiRef はプラグイン固有であり、@backstage/plugin-catalog-react のままです。
  • バックエンドのコードでは、@backstage/plugin-catalog-node の catalogServiceRef に依存します。これは認証とディスカバリーの設定が済んだ状態でカタログクライアントをラップし、BackstageCredentials を直接受け取ります。メソッドには { credentials }(BackstageCredentials オブジェクト)を渡します。{ token }(文字列)ではありません。受信した HTTP リクエストでは、httpAuth.credentials(req) で認証情報を取得します。サービス間の処理(スケジュールされたタスクや初期化時のフェッチ)では、auth.getOwnServiceCredentials() を使用します。手動で new CatalogClient(...) を作成しないでください。これは基盤となる API ですが、標準的なインターフェースはサービス参照です。
  • getEntityByRef は Entity | undefined を返します。エンティティが削除されている場合や、参照が不正な場合があるため、必ず undefined のケースを処理してください。
  • getEntities は { items: Entity[] } を返します。分割代入するか、.items にアクセスしてください。
  • getEntities のフィルターは、1 つのオブジェクト内では AND 条件、オブジェクトの配列では OR 条件で結合されます。
  • フロントエンド:レンダー中にフェッチしないでください。react-use の useAsync(マウント時または依存関係の変更時に自動フェッチ)か useAsyncFn(ボタン操作でフェッチ)でラップしてください。{ loading, error, data } のために useState を手動で設定しないでください。このフックは競合状態やアンマウント時のクリーンアップを適切に処理します。
  • バックエンド:キャッシュなしで HTTP リクエストのたびにフェッチしないでください。頻繁にアクセスされる処理では、常に最新のデータが必要ない結果をメモ化するために coreServices.cache を使用してください。

UI の規約

可能な場合は、描画に @backstage/ui(Skeleton、Alert、Text、Flex、Button など)を使用してください。コンポーネントの一覧とスタイリングのガイダンスについては、using-backstage-ui スキルを参照してください。

コメント