🎃

Strapi v5で設定画面を追加する

に公開

はじめに

Strapi4 から Strapi5 へ移行する過程で、色々と互換性がなくなったプラグインがありますが、
strapi-app-version というプラグインの利用をやめて同等の機能を実装した際のメモを残しておきます。

Strapi app version plugin

package.json からアプリのバージョンを拾って、設定画面に表示してくれるプラグインです。

https://market.strapi.io/plugins/@palmabit-strapi-app-version
https://github.com/Palmabit-IT/strapi-app-version

実装

実装にあたって、こちらの記事を参考にさせていただき記事中の既存のGlobal Settingsの中に追加するパターンを採用させていただきました。

https://yasuda.cloud/entry/2025/03/26/000311

また UI 部分は Strapi のコードを参考にしました。

https://github.com/strapi/strapi/blob/883f4fcabd28de02b78b7b00a70e33cd2d151d05/packages/core/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.tsx

ライブラリをインストールする

@strapi/design-system パッケージを利用するので以下のコマンドでライブラリをインストールします。

npm i @strapi/design-system@2.0.0-rc.24

画面を追加する

src/admin に components/AppVersion を作成し、index.tsx を作成します。

mkdir -p src/admin/components/AppVersion

touch src/admin/components/AppVersion/index.tsx

ファイルの中身はこんな感じになります。
デザイン部分はそのまま Strapi のコードをそっくりそのまま利用しています。

import * as React from "react";
import { useIntl } from "react-intl";

import { Flex, Grid, Typography } from "@strapi/design-system";
import { Layouts, Page } from "@strapi/admin/strapi-admin";
import packageJson from "../../../../package.json";

export default function AppVersion(): React.JSX.Element {
  const { formatMessage } = useIntl();

  return (
    <Layouts.Root>
      <Page.Title>
        {formatMessage(
          { id: "Settings.PageTitle", defaultMessage: "Settings - {name}" },
          { name: "App Version" }
        )}
      </Page.Title>
      <Page.Main>
        <Layouts.Header title="App Version" subtitle={`Sample CMS Version`} />
        <Layouts.Content>
          <Flex direction="column" alignItems="stretch" gap={6}>
            <Flex
              direction="column"
              alignItems="stretch"
              gap={4}
              hasRadius
              background="neutral0"
              shadow="tableShadow"
              paddingTop={6}
              paddingBottom={6}
              paddingRight={7}
              paddingLeft={7}
            >
              <Typography variant="delta" tag="h3">
                {formatMessage({
                  id: "global.details",
                  defaultMessage: "Details",
                })}
              </Typography>

              <Grid.Root gap={5} tag="dl">
                <Grid.Item col={6} s={12} direction="column" alignItems="start">
                  <Typography variant="sigma" textColor="neutral600" tag="dt">
                    {formatMessage({
                      id: "Settings.app.sampleCmsVersion",
                      defaultMessage: "sample cms version",
                    })}
                  </Typography>
                  <Flex gap={3} direction="column" alignItems="start" tag="dd">
                    <Typography>v{packageJson.version}</Typography>
                  </Flex>
                </Grid.Item>
              </Grid.Root>
            </Flex>
          </Flex>
        </Layouts.Content>
      </Page.Main>
    </Layouts.Root>
  );
}

設定画面の追加

一つ前の手順で作成した画面を利用して、
src/admin/app.tsx を以下のように修正します。

import type { StrapiApp } from '@strapi/strapi/admin';

export default {
  config: {
    locales: [],
  },
  bootstrap(app: StrapiApp) {
    console.log(app);
  },
  register(app: StrapiApp) {
    app.addSettingsLink('global', {
      intlLabel: {
        id: 'app-version',
        defaultMessage: 'App Version'
      },
      id: 'app-version',
      to: '/app-version',
      Component: async () => await import('./components/AppVersion'),
      permissions: [],
    })
  },
};

動作確認

アプリを起動します。

npm run develop

ブラウザで http://localhost:1337/admin へアクセスします。

サイドメニューの Settings アイコンより App Version を選択します。

作業は以上となります!

サンプルコード

まるごと下記リポジトリに置きました。ご参考まで。

https://github.com/htnk128/strapi5-sandbox

GitHubで編集を提案

Discussion