こんにちは!今日は、Backstageの核となる概念の一つである「コンポーネント(Component)」が、二つの異なる文脈でどのように使用されるかについて詳しく見ていきましょう。🚀
Backstageを初めて触る方が最も混乱しやすい点の一つですが、この二つの「コンポーネント」の意味を明確に理解することで、Backstageアーキテクチャと実際の活用方法をはるかに深く把握することができます。今日のこの記事を通じて、その混乱を完全に解消します!💡

🏗️ Backstageにおける「コンポーネント」の二つの意味
Backstageでは、「コンポーネント」という用語は大きく二つの文脈で使用されます。一つはソフトウェアカタログエンティティとしてのkind: Componentであり、もう一つはフロントエンドUIを構成するReactコンポーネントです。この二つを正確に区別することが重要です。
1. kind: Component (ソフトウェアカタログエンティティ) 🧩
最初の意味は、Backstageのソフトウェアカタログ(Software Catalog)モデルにおいて最も基本となるエンティティタイプです。皆さんのサービス、ライブラリ、ウェブサイトなど、実際のコードで実装されたソフトウェア単位を表します。
✅ 主要な特徴
- 定義: catalog-info.yamlファイル内でkind: Componentとして定義されます。
- 役割:
- コード単位: 特定のビジネスロジックを実行するマイクロサービス、ウェブアプリケーション、ライブラリ、モバイルアプリなどを表現します。
- 所有権: 誰がこのサービスを担当しているか (owner)、どのシステムに属しているか (system) などのメタデータを含みます。
- 可視性: Backstage UIで、当該コンポーネントのTechDocs、CI/CDステータス、警告、ダッシュボードなどを一目で確認できるように接続する中心点としての役割を果たします。
- 例:
- payment-service (マイクロサービス)
- user-dashboard-frontend (フロントエンドウェブアプリ)
- shared-logging-library (再利用可能なライブラリ)
📊 kind: Component YAMLの例
YAML
apiVersion: backstage.io/v1alpha1
kind: Component # 👈 ここが最初の「コンポーネント」の意味です。
metadata:
name: order-processing-service
description: 고객의 주문을 처리하고 결제 시스템과 연동하는 백엔드 서비스
annotations:
github.com/project-slug: example-org/order-service
spec:
type: service # コンポーネントのタイプ(service, website, libraryなど)
lifecycle: production
owner: team-nova # このサービスを担当するチーム
system: e-commerce-platform # このサービスが属するシステム
ここでkind: Componentは、「注文処理サービス」という実際のソフトウェアコードの塊を意味します。
2. フロントエンドReactコンポーネント (UI構成要素) 🎨
二つ目の意味は、Backstageフロントエンドのユーザーインターフェース(UI)を構成するビルディングブロックとしての「Reactコンポーネント」です。ReactJSフレームワークの一般的な用法と同じです。
✅ 主要な特徴- 定義: TypeScript/JavaScriptで書かれたReactコードファイル(tsx, jsx)です。
- 役割:
- UIレンダリング: 画面に特定の機能を表示したり、ユーザー入力を処理したりするUI要素を担当します。
- 再利用性: ボタン、カード、テーブル、チャート、特定のエンティティの詳細情報パネルなど、様々なUI構成要素を再利用可能な単位にします。
- プラグイン開発: Backstageプラグインを開発する際、皆さんが作成するすべてのUIはReactコンポーネントの組み合わせで構成されます。
- 例:
- (エンティティ詳細ページ全体をレンダリングするコンポーネント)
- (TechDocsドキュメントを表示するカードコンポーネント)
- (コスト分析ダッシュボードを表示するコンポーネント)
🖥️ Reactコンポーネントのコード例
TypeScript
// packages/app/src/components/catalog/EntityPage.tsx (Backstageアプリの一部)
import React from 'react';
import { EntityPageLayout } from '@backstage/plugin-catalog';
import {
EntityAboutCard,
EntityLinksCard,
EntityCatalogGraphCard,
} from '@backstage/plugin-catalog';
// ... その他、様々なReactコンポーネントをインポートします。
export const customEntityPage = (
<EntityPageLayout>
<EntityPageLayout.Content>
{/* 👈 ここで、EntityAboutCardはReactコンポーネントです。 */}
<EntityAboutCard variant="gridItem" />
<EntityLinksCard variant="gridItem" />
<EntityCatalogGraphCard variant="gridItem" />
</EntityPageLayout.Content>
{/* ... 他のタブやコンポーネント ... */}
</EntityPageLayout>
);
上記のコードで、EntityPageLayout、EntityAboutCardなどはすべてReactコンポーネントであり、Backstage UIを構成する視覚的な要素です。
🎯 二つの「コンポーネント」の意味を正しく接続する
さて、この二つの「コンポーネント」の意味がどのように相互に接続されるかを理解することが重要です。
- kind: Component (ソフトウェアエンティティ)は、Backstageカタログに登録された実際のソフトウェアです。
- Reactコンポーネント (UI構成要素)は、そのkind: Componentエンティティの情報をBackstage UIに取得し、視覚的に表示する役割を果たします。
例えば、「order-processing-service」というkind: Componentエンティティがカタログに登録されると、BackstageフロントエンドのReactコンポーネントと、その中に含まれる、などのReactコンポーネントが、このエンティティのメタデータを読み込み、画面に美しくレンダリングしてくれるのです。✨
🏁 結論: 文脈で区別する「コンポーネント」
Backstageでは、「コンポーネント」という用語は文脈に応じて以下の二つの意味を持ちます。
- ソフトウェアカタログのkind: Component: 皆さんのアプリケーション、サービス、ライブラリなど、実際のソフトウェアコード単位を表すエンティティです。
- フロントエンドReactコンポーネント: Backstage UIを作成し、エンティティ情報を視覚的に表現するUI構成要素です。
この二つの意味を正確に区別し理解することで、Backstageのアーキテクチャをはるかに明確に把握し、皆さんの組織に合ったカタログを効果的に構築し、必要であれば直接プラグインを開発する上で大きな助けとなるでしょう!🚀
コメントを残す