Backstageでカスタムアイコンを追加する

2024.08.04
2024.08.04
プログラミング
Backstage

はじめに

Backstageでカスタムアイコンを追加する方法について説明します。

Backstageで使えるアイコン

Backstageでは、カタログのLinkなどで使えるアイコンがいくつか用意されています。

使えるアイコンは、dashboarddocsemailなどがあり、下記から確認できます。

backstage/packages/app-defaults/src/defaults/icons.tsx at master · backstage/backstage

backstage/packages/app-defaults/src/defaults/icons.tsx at master · backstage/backstage

Backstage is an open framework for building developer portals - backstage/backstage

実際にカタログのLinkで表示すると、下記のようになります。

これでも十分ですが、もっとカスタマイズしたい場合は、カスタムアイコンを追加することができます。

カスタムアイコンの追加方法

カスタムアイコンを追加する方法は、以下の2つがあります。

  • SVGから追加
  • Material IconやReact Iconsから追加

SVGから追加

まずは、SVGからアイコンを追加してみます。

packages/app/src/assets/icons/CustomIcons.tsxを作成し、SVGからアイコンを追加します。今回は、Backstageのアイコンを追加してみます。

packages/app/src/assets/icons/CustomIcons.tsx
1import { SvgIcon, SvgIconProps } from '@material-ui/core';
2
3import React from 'react';
4
5export const BackstageIcon = (props: SvgIconProps) => (
6  <SvgIcon {...props} viewBox="0 0 337.46 428.5">
7    <path
8      fill="currentColor"
9      width="1em"
10      height="1em"
11      display="inline-block"
12      d="M303,166.05a80.69,80.69,0,0,0,13.45-10.37c.79-.77,1.55-1.53,2.3-2.3a83.12,83.12,0,0,0,7.93-9.38A63.69,63.69,0,0,0,333,133.23a48.58,48.58,0,0,0,4.35-16.4c1.49-19.39-10-38.67-35.62-54.22L198.56,0,78.3,115.23,0,190.25l108.6,65.91a111.59,111.59,0,0,0,57.76,16.41c24.92,0,48.8-8.8,66.42-25.69,19.16-18.36,25.52-42.12,13.7-61.87a49.22,49.22,0,0,0-6.8-8.87A89.17,89.17,0,0,0,259,178.29h.15a85.08,85.08,0,0,0,31-5.79A80.88,80.88,0,0,0,303,166.05ZM202.45,225.86c-19.32,18.51-50.4,21.23-75.7,5.9L51.61,186.15l67.45-64.64,76.41,46.38C223,184.58,221.49,207.61,202.45,225.86Zm8.93-82.22-70.65-42.89L205.14,39,274.51,81.1c25.94,15.72,29.31,37,10.55,55A60.69,60.69,0,0,1,211.38,143.64Zm29.86,190c-19.57,18.75-46.17,29.09-74.88,29.09a123.73,123.73,0,0,1-64.1-18.2L0,282.52v24.67L108.6,373.1a111.6,111.6,0,0,0,57.76,16.42c24.92,0,48.8-8.81,66.42-25.69,12.88-12.34,20-27.13,19.68-41.49v-1.79A87.27,87.27,0,0,1,241.24,333.68Zm0-39c-19.57,18.75-46.17,29.08-74.88,29.08a123.81,123.81,0,0,1-64.1-18.19L0,243.53v24.68l108.6,65.91a111.6,111.6,0,0,0,57.76,16.42c24.92,0,48.8-8.81,66.42-25.69,12.88-12.34,20-27.13,19.68-41.5v-1.78A87.27,87.27,0,0,1,241.24,294.7Zm0-39c-19.57,18.76-46.17,29.09-74.88,29.09a123.81,123.81,0,0,1-64.1-18.19L0,204.55v24.68l108.6,65.91a111.59,111.59,0,0,0,57.76,16.41c24.92,0,48.8-8.8,66.42-25.68,12.88-12.35,20-27.13,19.68-41.5v-1.82A86.09,86.09,0,0,1,241.24,255.71Zm83.7,25.74a94.15,94.15,0,0,1-60.2,25.86h0V334a81.6,81.6,0,0,0,51.74-22.37c14-13.38,21.14-28.11,21-42.64v-2.19A94.92,94.92,0,0,1,324.94,281.45Zm-83.7,91.21c-19.57,18.76-46.17,29.09-74.88,29.09a123.73,123.73,0,0,1-64.1-18.2L0,321.5v24.68l108.6,65.9a111.6,111.6,0,0,0,57.76,16.42c24.92,0,48.8-8.8,66.42-25.69,12.88-12.34,20-27.13,19.68-41.49v-1.79A86.29,86.29,0,0,1,241.24,372.66ZM327,162.45c-.68.69-1.35,1.38-2.05,2.06a94.37,94.37,0,0,1-10.64,8.65,91.35,91.35,0,0,1-11.6,7,94.53,94.53,0,0,1-26.24,8.71,97.69,97.69,0,0,1-14.16,1.57c.5,1.61.9,3.25,1.25,4.9a53.27,53.27,0,0,1,1.14,12V217h.05a84.41,84.41,0,0,0,25.35-5.55,81,81,0,0,0,26.39-16.82c.8-.77,1.5-1.56,2.26-2.34a82.08,82.08,0,0,0,7.93-9.38A63.76,63.76,0,0,0,333,172.17a48.55,48.55,0,0,0,4.32-16.45c.09-1.23.2-2.47.19-3.7V150q-1.08,1.54-2.25,3.09A96.73,96.73,0,0,1,327,162.45Zm0,77.92c-.69.7-1.31,1.41-2,2.1a94.2,94.2,0,0,1-60.2,25.86h0l0,26.67h0a81.6,81.6,0,0,0,51.74-22.37A73.51,73.51,0,0,0,333,250.13a48.56,48.56,0,0,0,4.32-16.44c.09-1.24.2-2.47.19-3.71v-2.19c-.74,1.07-1.46,2.15-2.27,3.21A95.68,95.68,0,0,1,327,240.37Zm0-39c-.69.7-1.31,1.41-2,2.1a93.18,93.18,0,0,1-10.63,8.65,91.63,91.63,0,0,1-11.63,7,95.47,95.47,0,0,1-37.94,10.18h0V256h0a81.65,81.65,0,0,0,51.74-22.37c.8-.77,1.5-1.56,2.26-2.34a82.08,82.08,0,0,0,7.93-9.38A63.76,63.76,0,0,0,333,211.15a48.56,48.56,0,0,0,4.32-16.44c.09-1.24.2-2.48.19-3.71v-2.2c-.74,1.08-1.46,2.16-2.27,3.22A95.68,95.68,0,0,1,327,201.39Z"
13    />
14  </SvgIcon>
15);
Logos | Backstage Software Catalog and Developer Platform

Logos | Backstage Software Catalog and Developer Platform

Guidelines for how to use the Backstage logos and icons

次に、packages/app/src/App.tsxでアイコンを追加します。

packages/app/src/App.tsx
1import { BackstageIcon } from './assets/icons/CustomIcons'; // カスタムアイコンを追加
2
3const app = createApp({
4  apis,
5
6  ...
7
8  icons: {
9    backstage: BackstageIcon, // カスタムアイコンを追加
10  },
11});

React Iconsから追加

次は、React Iconsからアイコンを追加してみます。

package/app/src/App.tsx
1import { FaConfluence } from 'react-icons/fa'; // React Iconsからアイコンを追加
2
3const app = createApp({
4  apis,
5
6  ...
7
8  icons: {
9    confluence: FaConfluence, // React Iconsからアイコンを追加
10  },
11});

実際に表示してみる

実際に下記のカタログを登録して、アイコンが表示されるか確認してみます。

1apiVersion: backstage.io/v1alpha1
2kind: Component
3metadata:
4  name: productpage
5  description: The main web page interface for the BookInfo app
6  links:
7    - url: https://www.atlassian.com/ja/software/confluence
8      title: Confluence
9      icon: confluence # React Iconsから追加したアイコン
10    - url: https://backstage.io/
11      title: Backstage
12      icon: backstage # SVGから追加したアイコン

下記のように、追加したアイコンが表示されていることが確認できます。

今回実装したサンプルは、下記のリポジトリでから確認できます。

GitHub - monda00/backstage-sample

GitHub - monda00/backstage-sample

Contribute to monda00/backstage-sample development by creating an account on GitHub.

参考

Support

\ この記事が役に立ったと思ったら、サポートお願いします! /

buy me a coffee
Share

Profile

author

Masa

都内のIT企業で働くエンジニア
自分が学んだことをブログでわかりやすく発信していきながらスキルアップを目指していきます!

buy me a coffee