第7章 動的プラグイン
7.1. 動的プラグインの概要 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform Web コンソールは、実行時にリモートソースから動的プラグインをロードして解釈します。動的プラグインをコンソールに提供して公開する 1 つの方法は、OLM Operator を使用することです。Operator は、プラグインをホストする HTTP サーバーを備えたプラットフォーム上にデプロイメントを作成し、Kubernetes サービスを使用してプラグインを公開します。
動的プラグインを使用すると、実行時にカスタムページやその他の拡張機能をコンソールユーザーインターフェイスに追加できます。ConsolePlugin カスタムリソースはコンソールにプラグインを登録し、クラスター管理者はコンソールの Operator 設定でプラグインを有効にします。
7.1.1. 主な特長 リンクのコピーリンクがクリップボードにコピーされました!
動的プラグインを使用すると、OpenShift Container Platform エクスペリエンスに次のカスタマイズを行うことができます。
- カスタムページの追加。
- 管理者と開発者を超えたパースペクティブを追加します。
- ナビゲーション項目の追加。
- リソースページへのタブおよびアクションの追加。
7.1.2. 全般的なガイドライン リンクのコピーリンクがクリップボードにコピーされました!
プラグインを作成するときは、次のガイドラインに従ってください。
-
プラグインをビルドして実行するには、
Node.jsを使用する必要があります。npm や yarn などの任意のパッケージマネージャーを使用できます。 -
CSS クラス名の前にプラグイン名を付けて、競合を回避します。例:
my-plugin__headingおよびmy-plugin_\_icon - 他のコンソールページとの一貫したルック、フィール、および動作を維持します。
プラグインの作成時には、react-i18next のローカリゼーションガイドラインに従ってください。以下の例のように
useTranslationフックを使用できます。const Header: React.FC = () => { const { t } = useTranslation('plugin__console-demo-plugin'); return <h1>{t('Hello, World!')}</h1>; };- 要素セレクターなど、プラグインコンポーネント外のマークアップに影響を与える可能性のあるセレクターは避けてください。これらは API ではなく、変更される可能性があります。これらを使用すると、プラグインが破損する可能性があります。これを防ぐには、独自のプラグインの外部で HTML 要素を変更するセレクターを使用しないでください。
-
プラグイン Web サーバーが提供するすべてのアセットの
Content-Typeレスポンスヘッダーを使用して、有効な JavaScript Multipurpose Internet Mail Extension (MIME) タイプを指定します。各プラグインデプロイメントには、そのプラグインの生成済みアセットをホストする Web サーバーが含まれている必要があります。 - Webpack バージョン 5 以降を使用してプラグインをビルドする必要があります。推奨されるセットアップは、コンソールプラグインテンプレートを参照してください。
-
衝突を避けるために、CSS クラス名の前にプラグイン名を付けます (例:
my-plugin__heading、my-plugin_\_icon)。
7.1.3. PatternFly ガイドライン リンクのコピーリンクがクリップボードにコピーされました!
プラグインを作成する場合は、PatternFly の使用に関する以下のガイドラインに従ってください。
PatternFly コンポーネントと CSS 変数を直接使用してください。SDK は、特定の PatternFly コンポーネントに関するコンソール固有のラッパーを提供します。たとえば、SDK の
ListPageHeaderは PatternFly のPageHeaderをラップします。PatternFly コンポーネントと変数を使用すると、将来のバージョンのコンソールでも、プラグインの外観の一貫性を保ちやすくなります。- OpenShift Container Platform バージョン 4.14 以前を使用している場合は、PatternFly 4.x を使用します。
- OpenShift Container Platform バージョン 4.15 から 4.18 では、PatternFly 5.x を使用します。
- OpenShift Container Platform バージョン 4.19 以降では、PatternFly 6.x を使用します。
- PatternFly’s accessibility fundamentals に従って、プラグインにアクセスできるようにします。
-
Bootstrap や Tailwind などの他の CSS ライブラリーは使用しないでください。これらは PatternFly と競合し、コンソールの他の部分とマッチしない可能性があります。プラグインのユーザーインターフェイスに固有のスタイルのみを含めます。コンソールは、基本の PatternFly スタイルに加えてこれらのスタイルを評価します。
@patternfly/react-styles/*/.cssまたは@patternfly/patternflyから直接スタイルをインポートしないでください。代わりに、コンソール SDK によって提供されるコンポーネントと CSS 変数を使用します。 - コンソールアプリケーションは、サポートされているすべての PatternFly バージョンのベーススタイルをロードします。
7.1.3.1. react-i18next でメッセージを翻訳する リンクのコピーリンクがクリップボードにコピーされました!
この プラグインテンプレート は、react-i18next を使用してメッセージを翻訳する方法を示しています。
前提条件
- プラグインテンプレートをローカルに複製する必要があります。
- オプション: プラグインをローカルでテストするには、コンテナー内で OpenShift Container Platform Web コンソールを実行します。Docker または Podman 3.2.0 以降を使用できます。
手順
名前の競合を避けるために、名前の前に
plugin__を付けます。このプラグインテンプレートは、デフォルトでplugin__console-plugin-templatenamespace を使用します。プラグインの名前 (例:plugin__my-plugin) を変更する場合は更新する必要があります。たとえば、useTranslationフックを使用できます。conster Header: React.FC = () => { const { t } = useTranslation('plugin__console-demo-plugin'); return <h1>{t('Hello, World!')}</h1>; };重要i18nnamespace をConsolePluginリソースの名前と一致させる必要があります。必要な動作に応じて
spec.i18n.loadTypeフィールドを設定します。plugin__console-demo-plugin例spec: backend: service: basePath: / name: console-demo-plugin namespace: console-demo-plugin port: 9001 type: Service displayName: OpenShift Console Demo Plugin i18n: loadType: PreloadloadType: Preload-
ロード中、動的プラグインの後に、
i18nnamespace からプラグインのすべてのローカリゼーションリソースを読み込みます。
console-extensions.json内のラベルに%plugin__console-plugin-template~My Label%という形式を使用します。コンソールは、値をplugin__console-plugin-templatenamespace の現在の言語のメッセージに置き換えます。以下に例を示します。{ "type": "console.navigation/section", "properties": { "id": "admin-demo-section", "perspective": "admin", "name": "%plugin__console-plugin-template~Plugin Template%" } }i18next-parser の TypeScript ファイルにコメントを追加して、
console-extensions.jsonからのメッセージをメッセージカタログに追加します。以下に例を示します。// t('plugin__console-demo-plugin~Demo Plugin')メッセージを追加または変更するときにプラグインテンプレートの
localesフォルダー内の JSON ファイルを更新するために、次のコマンドを実行します。$ yarn i18n