
はじめに
こんにちは。ACS事業部 亀崎です。
前回の「Software Catalog」に引き続き、今回も Backstage の基本機能の1つ、Software Template をご紹介したいと思います。
Software Template
Software Template機能の基本的な機能は、あらかじめ用意したフォルダ、ファイル一式(テンプレート)を、新しいGitリポジトリとして作成・コピーする、またはテンプレートフォルダ・ファイル一式の追加するPull Requestを作成する機能です。
テンプレートからコピーする際、何も変更を加えずそのままコピーする機能とともに、特定のキーワード( {{ values }} といった特定の文字列)をユーザー指定の文字列に置き換える機能も備わっています。キーワード埋め込みの例としては、アプリケーション名などが挙げられます。
ソースリポジトリにテンプレート用のカタログ情報を用意し、それをPlaTT/Backstageに登録することで、指定したテンプレートが利用できるようになります。

ユースケース1 IaC Scriptの共有
社内のWeb API系システムなどを開発・実行する際、App Service/Functions等の利用する実行環境やデータベースなど、一定のパターン構成で提供することも多いかと思います。こうした場合に、Platform Teamがそのプロビジョニングスクリプトを用意していることも多いと思います。このプロビジョニングスクリプトをテンプレートとして登録し、各システム開発チームが必要に応じてそのテンプレートをコピーし、アプリケーション開発チーム自身がクラウドリソースをプロビジョニングできるようにします。

ユースケース2 アプリケーション初期コード(ボイラープレート)の共有
アプリケーションの初期コードの準備は面倒なものです。これらの初期コードは実は個々のアプリケーションで大きな違いはなく、いつも同じ作業の繰り返しです。Microservice化されたシステムの場合、特にこの傾向が強く、かつ何度も繰り返し行われる作業になります。こうした共通部分をテンプレートとして登録し、各システム開発チームがそのテンプレートをコピーし、アプリケーション開発を即座に始められるようにすることで、作業時間を短縮できます。
登録内容
Software Templateを登録するには、BackstageのTemplate Catalog情報を記述します。(公式ドキュメントはこちらです)
# Notice the v1beta3 version apiVersion: scaffolder.backstage.io/v1beta3 kind: Template # some metadata about the template itself metadata: name: v1beta3-demo title: Test Action template description: scaffolder v1beta3 template demo spec: owner: backstage/techdocs-core type: service # these are the steps which are rendered in the frontend with the form input parameters: - title: Fill in some steps required: - name properties: name: title: Name type: string description: Unique name of the component ui:autofocus: true ui:options: rows: 5 owner: title: Owner type: string description: Owner of the component ui:field: OwnerPicker ui:options: catalogFilter: kind: Group - title: Choose a location required: - repoUrl properties: repoUrl: title: Repository Location type: string ui:field: RepoUrlPicker ui:options: allowedHosts: - github.com # here's the steps that are executed in series in the scaffolder backend steps: - id: fetch-base name: Fetch Base action: fetch:template input: url: ./template values: name: ${{ parameters.name }} owner: ${{ parameters.owner }} - id: fetch-docs name: Fetch Docs action: fetch:plain input: targetPath: ./community url: https://github.com/backstage/community/tree/main/backstage-community-sessions - id: publish name: Publish action: publish:github input: allowedHosts: ['github.com'] description: This is ${{ parameters.name }} repoUrl: ${{ parameters.repoUrl }} - id: register name: Register action: catalog:register input: repoContentsUrl: ${{ steps['publish'].output.repoContentsUrl }} catalogInfoPath: '/catalog-info.yaml' # some outputs which are saved along with the job for use in the frontend output: links: - title: Repository url: ${{ steps['publish'].output.remoteUrl }} - title: Open in catalog icon: catalog entityRef: ${{ steps['register'].output.entityRef }}
記述内容には重要な要素が2つあります。それが parameters と steps です。

parametersは、テンプレートの出力先リポジトリ情報や、テンプレート内の文字列置き換え処理で利用する入力値を指定する部分になり、画面で表示されます。

parametersで指定できる代表的な入力フィールドは次のようなものになります。
- 通常のテキスト入力
- Repository Picker
- Owner Picker
- Entity Picker
steps は実際のコピー等の処理内容を記載するもので、一般的は source repositoryからのテンプレートを取得する fetch と target repositoryへ書き出す publish というアクションから構成されます。

stepsで指定できる代表的な機能は以下のとおりです。
fetch系 (組み込みFetchアクション群)
- fetch:template
文字列置換を実行しながら一連のフォルダ/ファイルを取得する - fetch:plain
置換は行わず指定されたフォルダ/ファイルを取得する
publish系 (GitHub関連のアクション群)
- publish:github
リポジトリを作成し、取得したフォルダ/ファイルを展開する - publish:github:pull-request
ブランチを作成し、フォルダ/ファイルを指定先に展開後、Pull Requestを作成する - github:environment:create
GitHub Environmentを作成する
Templateのカタログ化
Software Templateは前回ご紹介した Software Catalogの表現形式の1つでもあります。このため、様々なパターンのテンプレートを作成・公開し、利用者に選択してつかってもらうことができます。

今回紹介したSoftware Templateを使うことで、組織内で頻繁に発生するような実装・指定を、個々の開発者が個別に調査し、実装し、検証し、といったことが不要になり、 すでに実績のあるコードを組織内で共有・利用者が直接選択し、すぐにそれらを利用できるようになります。これによって、作業時間の短縮や品質向上にも寄与できるのではないかと考えます。
ぜひ、有効にご活用ください。
まとめ
弊社では オープンソースのInternal Developer Portal であるBackstageをマネージド・サービスとして提供しています。

また、Platform Engineering、Backstageに関するご支援をさせていただいております。ご興味のある方ぜひご連絡ください。