砂漠の旅人(たびと)

UNIX / MS-DOS 時代から電脳砂漠を旅しています

【RedfishViewer】Redfish のビューワを C# で作ってみる (WPF + Prism) - 前編

こんにちは、たびとです。

これまでに、Redfish を記事にして、もう少し早く GUI 版の Redfish ビューワを完成させる予定でしたが、 C# Prism 対応にチャレンジしていたため、かなり遅れてしましました。

前回は、Redfish エミュレータを作成することで、自宅でも簡単に Redfish 疑似環境を作ってみました。 ここでは、Python + FastAPI の組み合わせで実現しています。

sabakunotabito.hatenablog.com

今回は、作成した Redfish ビューワである RedfishViewer は、GitHub に公開しています。 ここにも Redfish エミュレータソースコードを修正し、RedfishServer として格納しています。

github.com

この記事の対象者

  • Redfish ビューワに興味のある方、使ってみたい方
  • C# の MVVM を Prism フレームワークで作成したい方

MVVM 対応について

Redfish ビューワの原型は夏ぐらいに完成していたのですが、 Prism フレームワークを使った MVVM への対応にかなりの時間を費やしました。

Prism は何度か挑戦したのですが、全く理解できずに諦めかけていたのですが、 今回初めて、作り上げることができました。

prismlibrary.com

それと、Prism に必須の ReactiveProperty を使っています。

github.com

何度も挫折した最大の原因は、Prism の情報量が少なすぎる点です。 チュートリアル程度は直ぐに探せますが、少し複雑になると探せなくなります。 どこかのサイトに Prism の GitHub のサンプルを学ぶと全て理解できるような主旨がありましたが、 今回の RedfishViewer を作る上では、あまり参考になりませんでした。

個人的に最も参考になったサイトを紹介します。 Prism がゼロベースか初心者レベルであれば、以下のサイトを時間をかけて学ぶことをお勧めします。 サイトでの説明は抜粋なので、GitHub に公開されたソースコードと合わせて学ぶと理解が進むと思います。 ただし、全てを学ぼうとすると、相当なボリュームがあるため、本気で取り組まないと挫折します。

elf-mission.net

RedfishViewer のインストール

それでは、RedfishViewer をインストールしていきましょう。

.NET 8 デスクトップ ランタイム

開発当初は、.NET 6 を使っていましたが、.NET 8 リリースに合わせて変更しています。 RedfishViewer は Windows 環境で動作するため、デスクトップ ランタイムが必要になります。

dotnet.microsoft.com

.NET 8 がインストールされていない場合、デスクトップ ランタイム 8.0.0 をインストールしてください。

.NET 8 デスクトップ ランタイム

RedfishViewer のダウンロード

GitHub にはインストーラ版と ZIP 版をリリースしています。 好みに合わせてダウンロードしてください。

github.com

RedfishServer インストール

仕事でもない限り、サーバ環境がない方の方が多いと思うので、 GitHub の RedfishServer フォルダ内にある main.py を使って Redfish をエミュレートします。 起動方法は前回記事、または、以下の GitHub の README を参照してください。 ただし、前回記事のソースコードから内容を修正しているため、GitHub 版を使ってください。

github.com

RedfishViewer

インストーラ版は、ユーザ配下にインストールされ、Administrator 権限は不要となっています。 ダウンロードしたインストーラをクリックするとインストーラが起動します。

インストーラ起動

次に、インストール先を変更する画面が表示されますが、そのまま次に進みます。

インストール先の変更

インストールの確認画面が表示されるので、そのままインストールを開始します。

インストール確認

インストールが終了すると完了画面が表示されます。閉じるボタンを押してインストーラを終了します。

インストール完了

ZIP 版は適当なフォルダに解凍し、RedfishViewer.exe をクリックして起動してください。

RedfishViewer の使い方

インストーラを使ってインストールした場合、デスクトップに RedfishViewer のアイコンが作成されるので、 これをクリックして起動します。

RedfishViewer 起動直後

リクエスト実行

WSL 上で Redfish エミュレータが起動していることを確認し、http://localhost:800 と入力します。 赤い魚をクリックするか、Enter キーを押すとリクエストが実行されます。

リクエスト実行結果

自動検索モード

次に、上部の GET メソッドの横のスイッチをオンにし、http://localhost:8000/redfish/v1 と入力して実行すると、 画面の右下に次々とトースト形式のメッセージが表示されて、リクエストが実行されていきます。 ただし、エミュレータは全ての @odata.id を定義していないため、エラーのトーストが表示されます。

自動検索モード

GET の横のスイッチをオンにすると 自動検索モード となり、出現した @odata.id を探して再帰的に検索するようになっています。 これで、これまでの Redfish 記事で実現したかった @odata.id を全て抽出する GUI アプリが完成したことになります。

まとめ

MVVM 対応するために Prism フレームワークを使ったため、Prism と ReactiveProperty を学ぶだけで 1 ヶ月以上、 さらに WPF として作っていたアプリのコンバートと機能拡張に 3 ヶ月以上と長期の時間を要してしまいました。 RedfishViewer の開発を通して、現状では学習コストが高すぎるため、仕事では使えないと思います。 これまでに MVVM による豊富な開発経験とノウハウが蓄積されていれば話は別ですけどね。

今回は、これまでの流れで、RedfishViewer を使った @odata.id を全て抽出することにフォーカスして説明しました。 次回は、RedfishViewer の機能を説明したいと思います。

この続きは、こちらからどうぞ。

sabakunotabito.hatenablog.com

では、皆さん、よい旅を。