fusion-developer-portal について
fusion-developer-portalは、Fusionポータルシェルの開発を支援するAgentスキルです。モジュール設定、アプリの読み込みとルーティングから、ポータルUIや分析・テレメトリーの設定、デプロイまでを案内します。
主な機能
- 01Fusionポータルの雛形作成
- 02ポータルモジュールと認証の設定
- 03アプリ読み込みとルーティングの実装
- 04ポータルナビゲーションとコンテキストUI
- 05分析・テレメトリー・デプロイの設定
活用シーン
- 01Fusionポータルの新規作成
- 02ポータルモジュールとMSAL認証の設定
- 03Fusionアプリの埋め込みとルート設定
- 04ポータルのビルド、アップロード、タグ付け
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ equinor/ fusion-skills --skill fusion-developer-portalインストール後、Claude Code で/fusion-developer-portalを入力して読み込まれたか確認します。
同梱ファイルCHANGELOG.mdreferences/portal-architecture.md
詳細
Fusion 開発者ポータル
Fusion アプリを共有のクローム(ヘッダー、コンテキストセレクター、ナビゲーション)内で読み込み、ルーティングし、レンダリングするホストアプリケーションである、Fusion ポータルシェルの開発をガイドします。
使用する場面
- 新しい Fusion ポータルをスキャフォールドする
portal.manifest.tsまたはffc portal devに関する質問- ポータルレベルのモジュール(テレメトリ、アナリティクス、ナビゲーション、サービス、アプリモジュール)を設定する
- カスタムアプリローダーまたはポータルシェルを構築する
- ポータルレベルのルーティング(
/apps/:appKey/*)を追加する - アプリを埋め込むための
ApploaderコンポーネントまたはuseApploaderフック - ポータルヘッダー、コンテキストセレクター、ブックマークのサイドシートを接続する
- ポータルが実行時に Fusion アプリを読み込み、初期化する仕組みを理解する
- ポータルレベルのアナリティクスまたはテレメトリを追加する
- ポータルをデプロイする(
ffc portal build、ffc portal upload)
使用しない場面
- アプリレベルの機能開発 →
fusion-app-react-dev - バックエンドサービスの変更 → 別のリポジトリ
- Fusion ヘルプセンターとの統合 →
fusion-help-integration - スキルの作成 →
fusion-skill-authoring - Issue の作成 →
fusion-issue-authoring
必要な入力
必須
- 構築するもの:ポータルのスキャフォールド、機能の追加、モジュールの設定、またはポータルアーキテクチャの把握
- ポータルの状況:新規作成か、既存のポータルの変更か
条件付き
- スキャフォールド時のポータル名/ID
- 認証の設定時の MSAL クライアント ID とサービスディスカバリー URL
- 有効化する特定のモジュール(アナリティクス、テレメトリ、ブックマーク、フィーチャーフラグ、AG Grid)
- カスタムアプリローダーが必要か、デフォルトの
Apploaderで十分か
手順
ステップ 1 — ポータルタスクを分類する
ユーザーが必要としている内容を判断します。
- 新しいポータルをスキャフォールドする → ステップ 2
- ポータルモジュールを設定する → ステップ 3
- アプリの読み込みとルーティング → ステップ 4
- ポータルのクローム(ヘッダー、コンテキスト、ブックマーク) → ステップ 5
- アナリティクスとテレメトリ → ステップ 6
- ビルドとデプロイ → ステップ 7
Fusion MCP が利用可能な場合は、最新の API サーフェスを確認するために、"portal manifest definePortalManifest ffc portal" や "createFrameworkProvider PortalModuleInitiator portal configure" のようなクエリで mcp_fusion_search_framework を優先して使用します。MCP で確認できていないガイダンスには、フォールバックであることを明記します。
ステップ 2 — 新しいポータルをスキャフォールドする
Fusion Framework CLI を使用します。
mkdir my-fusion-portal && cd my-fusion-portal
pnpm init
pnpm add -D @equinor/fusion-framework-cli
必要なファイルを作成します。
portal.manifest.ts— ポータルのメタデータと設定:
import { definePortalManifest } from '@equinor/fusion-framework-cli/portal';
export default definePortalManifest((env, { base }) => ({
name: 'my-portal',
version: '1.0.0',
entry: './src/index.tsx',
}));
portal.schema.ts(任意)— 設定検証スキーマsrc/index.tsx— ポータルのエントリーポイント(references/portal-architecture.md を参照)
開発サーバーを起動します。
pnpm fusion-framework-cli portal dev
# or: ffc portal dev
ステップ 3 — ポータルモジュールを設定する
ポータルレベルの設定には FrameworkConfigurator を使用します(アプリのように AppModuleInitiator は使用しません)。設定コールバックでモジュールを有効にします。
import type { FrameworkConfigurator } from '@equinor/fusion-framework';
import { enableAppModule } from '@equinor/fusion-framework-module-app';
import { enableNavigation } from '@equinor/fusion-framework-module-navigation';
import { enableAnalytics } from '@equinor/fusion-framework-module-analytics';
const configure = (configurator: FrameworkConfigurator) => {
enableAppModule(configurator);
enableNavigation(configurator, '/');
enableAnalytics(configurator, { /* ... */ });
};
アプリの設定との主な違い:ポータルでは FrameworkConfigurator を設定し、そのモジュールはすべての子アプリに引き継がれます。MSAL/認証はポータルレベルで設定され、アプリに継承されます。
モジュール設定の全容と portal-analytics のクックブックリファレンスについては、references/portal-architecture.md を参照してください。
ステップ 4 — アプリの読み込みとルーティング
ポータルでは /apps/:appKey/* をアプリローダーにルーティングします。方法は 2 つあります。
シンプルな埋め込み — 組み込みの Apploader コンポーネントを使用します。
import { Apploader } from '@equinor/fusion-framework-react-app/apploader';
<Apploader appKey="my-app" />
警告:
Apploaderは実験的な POC です。埋め込んだアプリではルーティングやコンテキストに問題が生じる可能性があります。PowerBI や PowerApps のビューなど、シンプルなアプリに最適です。
カスタムアプリローダー — 読み込み状態、エラー処理、マウントを完全に制御する場合に使用します。useFramework<[AppModule]>() を使用し、fusion.modules.app.current$ を監視して、app.initialize() を呼び出します。注釈付きのカスタム AppLoader パターンについては、references/portal-architecture.md を参照してください。
ポータルのルーティングでは通常、ナビゲーションモジュールを介して react-router-dom を使用します。
const Router = () => {
const framework = useFramework();
const router = framework.modules.navigation.router;
return <RouterProvider router={router} />;
};
ステップ 5 — ポータルの UI 要素
ポータルレベルの UI には、通常、次のものが含まれます。
- ヘッダー — Fusion ロゴ、コンテキストセレクター、ブックマーク、ユーザー設定を含むトップバー
- コンテキストセレクター —
useCurrentContextまたはuseContextSelectorを介してアプリのコンテキストモジュールに接続します - ブックマークのサイドシート — ナビゲーションモジュールを介して表示を切り替えます
- アプリのナビゲーション — アプリを切り替えるためのサイドバーまたはトップレベルのナビゲーション
アプリが独自のヘッダーを構築することはありません。ポータルシェルから提供されます。
ステップ 6 — 分析とテレメトリ
ポータルレベルの分析では、アプリのライフサイクルイベントを収集します。アダプターとコレクターを使用して有効にします。
import { enableAnalytics } from '@equinor/fusion-framework-module-analytics';
import { ConsoleAnalyticsAdapter } from '@equinor/fusion-framework-module-analytics/adapters';
import { AppLoadedCollector, AppSelectedCollector } from '@equinor/fusion-framework-module-analytics/collectors';
enableAnalytics(configurator, (builder) => {
builder.addAdapter(new ConsoleAnalyticsAdapter());
builder.addCollector(new AppLoadedCollector());
builder.addCollector(new AppSelectedCollector());
});
テレメトリ(OpenTelemetry / Application Insights)については、references/portal-architecture.md を参照してください。
ステップ 7 — ビルドとデプロイ
# Build the portal template
ffc portal build
# Upload to the Fusion portal service (authenticate via `az login` or FUSION_TOKEN env var)
ffc portal upload --portal-id <id>
# Tag a specific version
ffc portal tag --portal-id <id> --tag latest --version <version>
トークンをコマンドに直接貼り付けないでください。 対話型認証には
az loginを使用するか、CI パイプライン用にFUSION_TOKEN環境変数を設定してください。
ステップ 8 — 検証
ffc portal devがエラーなく起動する- アプリが
/apps/:appKeyで読み込まれる - コンテキストセレクターとヘッダーが正しく表示される
- TypeScript がエラーなくコンパイルされる
- (有効な場合)アプリの読み込み/選択時に分析イベントが発生する
期待される出力
- アプリの読み込み、ルーティング、UI 要素を備えた、動作するポータルシェル
- 正しい
FrameworkConfiguratorの使用によるポータルレベルのモジュール設定 - アプリの初期化時の読み込み状態とエラー状態への対応
- 作成または変更した内容の簡潔な概要
ヘルパーエージェント
fusion-app-react-dev と同じ補助インフラストラクチャです。
fusion-research— ポータルの動作が不明な場合に、ソースに基づいて Fusion エコシステムを調査しますfusion-code-conventions— 命名、TSDoc、コードスタイルをチェックします
Fusion MCP が利用可能な場合、ポータル固有の検索には mcp_fusion_search_framework を優先してください。
安全性と制約
- MSAL はポータルレベルです — アプリで認証を設定しないでください。ポータルから引き継がれます
- ポータル API を創作しないでください — MCP またはドキュメントで確認された API のみを参照してください
Apploaderは実験的な機能です — アプリへの埋め込みについて案内する際は、ルーティング/コンテキストの制限を必ず説明してください- ソースにシークレットを含めないでください — MSAL クライアント ID はハードコードせず、環境変数から取得してください
- 本番環境の Fusion ポータルを変更しないでください — このスキルの対象はカスタムポータルの開発のみです
- すべての変更で Conventional Commits を使用してください