Backstageでカスタムアイコンを追加する
はじめに
Backstageでカスタムアイコンを追加する方法について説明します。
Backstageで使えるアイコン
Backstageでは、カタログのLinkなどで使えるアイコンがいくつか用意されています。
使えるアイコンは、dashboard
、docs
、email
などがあり、下記から確認できます。
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のアイコンを追加してみます。
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
Guidelines for how to use the Backstage logos and icons
次に、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からアイコンを追加してみます。
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
Contribute to monda00/backstage-sample development by creating an account on GitHub.
参考
- Customize the look-and-feel of your App | Backstage Software Catalog and Developer Platform
- backstage/packages/app-defaults/src/defaults/icons.tsx at master · backstage/backstage
- Material Icons - Material-UI