日本語版
最新ニュース
企業

Optimizely OMVP の 1 日

こんにちは。Optimizely OMVP の 1 日の別の記事へようこそ。この投稿では、CMS 12 で blazor ベースのアドオンを作成する方法と、これを Optimizely 独自のフィードを含むさまざまな NuGet フィードで公開する方法について説明します。 概要 この包括的なガイドでは、最新の .NET 開発の力とエンタープライズ コンテンツ管理を組み合わせて、Optimizely CMS 用のカスタム Blazor アドオンを構築するプロセスについて説明します。 Blazor は、スタック全体で C# を使用してリッチでインタラクティブな管理インターフェイスを作成するユニークな機会を CMS 開発者に提供し、言語間のコンテキスト切り替えを排除し、Optimizely のバックエンド API とのシームレスな統合を可能にします。カスタム ダッシュボード ウィジェット、特殊なプロパティ エディター、または完全な管理ツールを構築している場合でも、Blazor のコンポーネント ベースのアーキテクチャとリアルタイム機能により、Optimizely の機能を拡張するための理想的な選択肢となります。 このチュートリアルでは、Optimizely…

Optimizely OMVP の 1 日

1760511930
2025-10-14 13:58:00

こんにちは。Optimizely OMVP の 1 日の別の記事へようこそ。この投稿では、CMS 12 で blazor ベースのアドオンを作成する方法と、これを Optimizely 独自のフィードを含むさまざまな NuGet フィードで公開する方法について説明します。

概要

この包括的なガイドでは、最新の .NET 開発の力とエンタープライズ コンテンツ管理を組み合わせて、Optimizely CMS 用のカスタム Blazor アドオンを構築するプロセスについて説明します。

Blazor は、スタック全体で C# を使用してリッチでインタラクティブな管理インターフェイスを作成するユニークな機会を CMS 開発者に提供し、言語間のコンテキスト切り替えを排除し、Optimizely のバックエンド API とのシームレスな統合を可能にします。カスタム ダッシュボード ウィジェット、特殊なプロパティ エディター、または完全な管理ツールを構築している場合でも、Blazor のコンポーネント ベースのアーキテクチャとリアルタイム機能により、Optimizely の機能を拡張するための理想的な選択肢となります。

このチュートリアルでは、Optimizely ソリューション内で Blazor プロジェクトを設定し、それを CMS の認証およびルーティング システムと統合し、プラットフォームにネイティブな感覚を与える洗練された管理インターフェイスを作成する方法を学びます。

このガイドを終えるまでに、編集者のエクスペリエンスを強化し、特定のビジネス ニーズに合わせて Optimizely CMS を拡張する、運用環境に対応した Blazor アドオンを構築するための知識が得られます。最新の UI フレームワークを検討している経験豊富な Optimizely 開発者であっても、CMS の世界に参入した Blazor 愛好家であっても、このガイドは成功するために必要な実践的な洞察を提供します。

設定

次のセクションでは、プロジェクトのセットアップ方法、Blazor 機能の有効化方法、アドオンのメニューの作成方法、承認の有効化方法、さらにプロジェクトを垂直スライス機能にセットアップする方法について説明します。

拡張プロジェクトの作成

この拡張機能の例では、次のように 3 つの個別のプロジェクトを作成しました。

  • OptiGraphExtensions – メインの Blazor アドオン プロジェクト
  • OptiGraphExtensions.Test – 機能の単体テスト
  • SampleCMS – OptiGraphExtensions プロジェクトへの参照を備えた Optimizely CMS 12 の完全な実行バージョンを使用すると、実際の CMS 12 アプリケーションでテストできます。

CMS にアドオン DLL を反映させ、アドオンを検索するには、CMS によって選択されるようにアセンブリを定義する module.config がアドオン プロジェクトのルートに必要です。この場合、アセンブリはプロジェクトと同じ名前の「OptiGraphExtensions」を参照します。



  
    
  

  
    
      
    
  

新しいメニューオプションの追加

アドオンを CMS に表示するには、新しい MenuProvider を作成する必要があります。以下に示すように、クラスを装飾します [MenuProvider] IMenuProvider インターフェイスから継承します。次に、GetMenuItems メソッド内で個々のメニュー項目を作成します。

[MenuProvider]
public sealed class OptiGraphExtensionsMenuProvider : IMenuProvider
{
    public IEnumerable GetMenuItems()
    {
        // Nested Menu Example
        yield return CreateMenuItem("Opti Graph Extensions", "/global/cms/optigraphextensions", "/optimizely-graphextensions/administration/about/", SortIndex.Last + 30);
        yield return CreateMenuItem("About", "/global/cms/optigraphextensions/about", "/optimizely-graphextensions/administration/about/", SortIndex.Last + 31);
        yield return CreateMenuItem("Synonyms", "/global/cms/optigraphextensions/synonyms", "/optimizely-graphextensions/administration/synonyms", SortIndex.Last + 32);
        yield return CreateMenuItem("Pinned Results", "/global/cms/optigraphextensions/pinned.results", "/optimizely-graphextensions/administration/pinned-results", SortIndex.Last + 33);
    }

    private static UrlMenuItem CreateMenuItem(string name, string path, string url, int index)
    {
        return new UrlMenuItem(name, path, url)
        {
            IsAvailable = context => true,
            SortIndex = index,
            AuthorizationPolicy = OptiGraphExtensionsConstants.AuthorizationPolicy
        };
    }
}

サンプル CMS で Blazor を有効にする

以下を「Program.cs」または「Startup.cs」に追加します。

services.AddServerSideBlazor();

また、ApplicationBuilder で以下を追加する必要があります。

app.UseEndpoints(endpoints =>
{
    …
    endpoints.MapBlazorHub();
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id}");
    …
});

上記を追加したら、Optimizely CMS インスタンスで Blazor を実行できるようにするために必要な作業はこれだけです。

メイン管理コントローラー

メニュー オプションのコントローラーを必ず作成する必要があります。これは次の方法で作成されます。見てわかるように、ルートは上記の MenuProvider で指定されたルートと一致します。

[Authorize(Policy = OptiGraphExtensionsConstants.AuthorizationPolicy)]
public sealed class AdministrationController : Controller
{
    [HttpGet]
    [Route("~/optimizely-graphextensions/administration/about")]
    public IActionResult About()
    {
        var model = new AdministrationViewModel
        {
            Title = "Opti Graph Extensions - About",
            Subtitle = "OptiGraphExtensions is a comprehensive add-on for Optimizely CMS 12 that provides seamless management of both synonyms and pinned results within Optimizely Graph. This add-on enables content editors and administrators to enhance search experiences through intelligent synonym mapping and strategic result pinning capabilities, all integrated directly into your Optimizely CMS administration interface."
        };

        return View("~/Views/OptiGraphExtensions/Administration/About/Index.cshtml", model);
    }

    [HttpGet]
    [Route("~/optimizely-graphextensions/administration/synonyms")]
    public IActionResult Synonyms()
    {
        var model = new AdministrationViewModel
        {
            Title = "Opti Graph Extensions - Synonyms",
        };

        return View("~/Views/OptiGraphExtensions/Administration/Synonyms/Index.cshtml", model);
    }

    [HttpGet]
    [Route("~/optimizely-graphextensions/administration/pinned-results")]
    public IActionResult PinnedResults()
    {
        var model = new AdministrationViewModel
        {
            Title = "Opti Graph Extensions - Pinned Results",
        };

        return View("~/Views/OptiGraphExtensions/Administration/Pinned-Results/Index.cshtml", model);
    }
}

上記のコントローラーでリンクされているビューには、独自の個別の機能内に存在する関連する Razor コンポーネントを呼び出すメインの RenderComponentAsync 機能が含まれています (垂直機能のスライスについては以下で説明します)。この例を以下に示します。

@{
    Layout = "/Views/Shared/Layouts/_LayoutBlazorAdminPage.cshtml";
}

@(await Html.RenderComponentAsync(Microsoft.AspNetCore.Mvc.Rendering.RenderMode.Server))

参照されるメイン レイアウトは次のようになり、メインの Blazor js ファイルが含まれます。

@using EPiServer.Framework.Web.Resources
@using EPiServer.Shell.Navigation



    Opti Graph Extensions

    
    @ClientResources.RenderResources("ShellCore")

    
    @ClientResources.RenderResources("ShellCoreLightTheme")
    
    

    


    @Html.AntiForgeryToken() 
    @Html.CreatePlatformNavigationMenu()
    

@RenderBody()

Visual Studio を使用している場合は、パッケージ化するプロジェクトを右クリックし、プロパティを選択してプロジェクトのプロパティ画面を表示します。[パッケージ]セクションでは、NuGet パッケージのすべてのプロパティを定義できます。

以下を完了することをお勧めします。

財産 理由
パッケージID これは、nuget.org および nuget.optimizely.com 内でグローバルに一意の名前である必要があります。を使用する場合は、 $(AssemblyName) 変数を指定すると、これはプロジェクトの名前と一致します。
タイトル Visual Studio では、これをパッケージ マネージャーなどの UI 表示で使用されるパッケージの名前として説明しますが、これはほとんど使用されません。
パッケージバージョン これは、3 つまたは 4 つの部分とオプションのアルファまたはベータ タグからなるセマンティック バージョン番号である必要があります。例えば:
1.0.0
1.0.0.0
0.1.1-アルファ
0.2.2.0-ベータ版
著者 これには、すべてのパッケージ所有者の名前が含まれている必要があります。
会社 これには、アドオンを作成した企業の名前が含まれている必要があります。これが個人所有の場合は、これを次のように設定します。 $(Authors) Authors プロパティの値をミラーリングします。
説明 これはアドオンに関する短い説明である必要があります。これは、NuGet パッケージ フィード内および Optimizely CMS 内のプラグイン マネージャー画面内に表示されます。
著作権 これには所有者の名前と年が含まれている必要があります。ソフトウェアを作成すると著作権保護が自動的に適用されるため、申請したり料金を支払ったりする必要はありません。英国には著作権作品の登録制度がありません。ただし、著作権を検証するために料金を支払って追加の保護を提供する組織もあります。著作権について詳しくは、こちらをご覧ください。 著作権があなたの作品を保護する方法。ただし、自分が住んでいる国でこの問題について独自に調査することは価値があります。
プロジェクトのURL これは、アドオンのリポジトリまたは適切なプロジェクト ページを指す必要があります。開発者はこれを使用して、アドオンについて詳しく調べたり、解決が必要な可能性がある問題を報告したりできます。
お読みください これをリポジトリの readme.md に設定しました。これは、NuGet プラットフォーム内の開発者に表示されます。
リポジトリの URL アドオンがオープンソースであると仮定すると、これはアドオンのリポジトリを指す必要があります。
タグ これは、NuGet フィード内でパッケージを見つけやすくするための、区切られたタグのセットです。
ライセンスファイル これは、リポジトリ内のライセンスを参照する必要があります。アドオンのライセンスの種類を慎重に検討する必要があります。特定のライセンスでは、ユーザーがパッケージを利用するためにコードをオープンソースにする必要がある場合があるため、ライセンスの寛容性または制限性について慎重に検討してください。一部の非常に人気のあるアドオンが MIT または Apache ライセンスを採用していることは注目に値します。

MIT ライセンスには寛容な性質があり、保証がないため、私は MIT ライセンスを利用しています。私はユーザーと関わり、提起された問題に対処しますが、アドオンは無料であり、自由な時間に維持されます。

ライセンスの承諾が必要 これにチェックを入れると、消費者はパッケージをインストールするときにライセンスを受け入れる必要があります。 MIT ライセンスを使用している場合は、これにチェックを入れて、消費者にアドオンの保証なしの性質を受け入れるよう促すことができます。

Nuget.org

NuGet パッケージを Optimizely NuGet フィードに送信する前に、Nuget.org にリストされている NuGet パッケージを取得することをお勧めします。 NuGet.org でアドオンを送信するには、次のリンクにアクセスしてください。 https://www.nuget.org/users/account/LogOn サインインして、サインインすると、ここからパッケージのアップロード画面にアクセスできます - https://www.nuget.org/packages/manage/upload - 以下に示すように、.nupkg ファイルを選択し、[アップロード]をクリックするだけです。

この時点で、NuGet パッケージがアップロードされ、数分後にスキャンされ、インデックスが付けられ、NuGet.org フィードで利用できるようになります。

最適化してNoprace

まず、次のものがあることを確認してください。 オプティマイズリーワールド アカウント。にアクセスして新しいアカウントを作成できます。 オプティマイズリーワールド 右上隅にある登録リンクをクリックします。このアカウントは、Optimizely NuGet フィードへのアクセスも提供します。 Optimizely は 2 つの NuGet フィードを維持します。

  • https://nuget.optimizely.com (v2 NuGet フィード)
  • https://api.nuget.optimizely.com (v3 NuGet フィード)

パッケージを v2 NuGet フィードにアップロードすると、それらは自動的に v3 フィードに同期されるため、v2 にアップロードすることをお勧めします。 Optimizely がパッケージを受け取ると、QA チームがパッケージをレビューして、アドオンが CMS で適切に動作することを確認します。このプロセスを迅速化するには、リポジトリの Readme ファイルにテスト手順を含めてください。

通常、レビューには少なくとも 1 営業日かかりますが、テストの進行状況や結果を更新する自動通知システムはありません。パッケージが承認されているかどうかを確認するには、NuGet フィードを定期的にチェックする必要があります。

Optimizely はフィード上のすべてのパッケージをレビューするため、配布のためにアドオンの更新をそこから直接ダウンロードすることがベスト プラクティスです。ホットフィックスを迅速に展開する必要がある場合は、代わりに nuget.org を使用することを検討してください。

さらに、パッケージを Optimizely フィードと一緒に nuget.org に少なくとも 1 回アップロードする必要があります。これにより、パッケージ名が nuget.org に予約され、ユーザーに影響を与える可能性のある主要なフィード間での名前の競合が防止されます。

まとめ

このガイドでは、Optimizely CMS 用の Blazor ベースのアドオンを構築するための基本事項を検討し、プロジェクトの初期セットアップから NuGet フィードでの公開の準備まですべてをカバーしました。

重要なポイント:

  • CMS 開発における Blazor のパワー: Blazor のコンポーネント ベースのアーキテクチャを活用することで、スタック全体で C# を使用してリッチで対話型の管理インターフェイスを作成でき、フロントエンド言語とバックエンド言語の間でコンテキストを切り替える必要がなくなります。
  • コアの実装手順: 起動構成内のわずか数行のコードで、モジュール設定を構成し、シームレスなナビゲーション統合のためのカスタム メニュー プロバイダーを作成し、CMS で Blazor 機能を有効にする方法を学びました。
  • エンタープライズ対応の拡張機能: 適切な認証ポリシーと垂直機能スライシングのアプローチにより、アドオンは企業のセキュリティとスケーラビリティの要件を満たしながら、クリーンなアーキテクチャを維持できます。

カスタム ダッシュボード、特殊なプロパティ エディター、または完全な管理ツールを構築している場合でも、最新の .NET テクノロジーを使用して Optimizely CMS を拡張するための強固な基盤が得られます。次のステップでは、アドオンをパッケージ化し、NuGet を通じてコミュニティと共有し、他の開発者が Optimizely の実装を強化できるようにします。

コーディングを楽しんでください。CMS 開発で可能なことの限界を押し広げようとする、成長を続けるコミュニティへようこそ!

参考リンク

https://github.com/adayinthelifeofapro/OptiGraphExtensions
https://www.epinova.se/en/blog/2024/use-blazor-components-in-optimizely-cms-adminedit-interface/
https://www.stott.pro/article/creating-an-optimizely-addon-part-3

Graham Carr、ソリューションアーキテクト

私は、幅広い製品とテクノロジーにおいて 28 年以上の経験を持つ、経験豊富なソリューション アーキテクトです。私は、コンセプトから実現に至るまで、企業がデジタル ビジョンを実現できるよう支援してきました。私は DXP (デジタル エクスペリエンス プラットフォーム) に特に情熱を持っており、Optimizely の認定開発者であり、プラチナ OMVP でもあります。

2025 年 10 月 14 日

#Optimizely #OMVP #の #日

執筆者について: nipponese

Nipponese News編集部は、国内外のニュースを日本語で分かりやすくお届けします。