どうやら、一筋縄ではいかない砂の迷宮に迷い込んだらしい。 この顛末を書き残しておくか。
以前、私はPythonという軽やかな呪文で、手軽に動作するRedfishシミュレータという名のゴーレムを創り出した。 しかし、それは魂こそあれど、まだ剥き身のまま。 真に頼れる相棒とするには、誰もが直感的に操れる美しくも堅牢な「魂の鎧(GUI)」が必要だった。
その鎧をC#という鍛冶術で鍛え上げる旅は、想像を絶する苦難の道だった。 特に、WPF(Windowsアプリケーション開発の魔法体系)におけるMVVM(Model-View-ViewModel)という設計思想を実現するための最高峰の魔法体系「Prismフレームワーク」は、あまりに難解で、私は幾度となく砂漠のど真ん中で膝をついた。
しかし、長い放浪の末、私はついにその秘儀を会得し、ゴーレムに完璧な鎧を着せることに成功した。 これは、その七転八倒の錬金術の記録であり、Prismという険しい山に挑む、未来の冒険者のための最初の道標である。
この羊皮紙のあらまし
- この羊皮紙のあらまし
- この羊皮紙が導く者
- 砂漠の道標
- 苦難の道:なぜ、それでもPrismなのか
- 魂の鎧を纏う儀式:RedfishViewer降臨
- 魂の鎧の操縦法
- 羊皮紙を巻く前に
- 砂漠で見つけた魔法のランプ
- ラクダの独り言
この羊皮紙が導く者
- Redfishという古代遺跡の情報を、一目で把握できる魔法の眼鏡(ビューワ)を求める者
- C#のMVVMという設計思想を、Prismフレームワークで実現する実践的な方法を知りたい魔法使い
- 情報の砂漠で、Prismという難解な古文書の解読に挑む全ての探求者
- WPFアプリケーション開発で疎結合な設計を実現したい開発者
- RedfishViewerという神器の操縦法と、その錬成の物語を知りたい冒険者
砂漠の道標
- Redfish - サーバー管理のための標準規格。サーバーの状態をRESTful APIで取得できる。
- GUI(魂の鎧) - Graphical User Interface。マウスやボタンで直感的に操作できる画面のこと。
- C# - Microsoftが開発したプログラミング言語。Windows向けアプリケーション開発に強い。
- WPF - Windows Presentation Foundation。C#でWindowsアプリのGUIを構築する魔法体系。
- MVVM - Model-View-ViewModelの略。画面(View)とロジック(Model)を分離する設計思想。
- Prismフレームワーク - WPFでMVVMを実現するための最高峰の魔法体系。疎結合な設計を可能にする。
- 疎結合 - プログラムの各部品が独立していて、変更の影響が他に波及しにくい設計のこと。
- .NET 8ランタイム - C#で作られたアプリケーションを動かすための実行環境。
- 自動検索モード - RedfishViewerの奥義。
@odata.idを辿って自動的にAPIを探索する機能。
苦難の道:なぜ、それでもPrismなのか
RedfishViewerの原型は、夏の間にほぼ完成していた。 しかし、それをPrismフレームワークを使ったMVVMという、美しい作法に則って再構築するのに、私は数ヶ月という長大な時間を溶かした。
挫折の最大の原因は、あまりに情報という名のオアシスが少ないことだ。 簡単なチュートリアルはあれど、一歩踏み込んだ途端、そこは情報の砂漠。 GitHubの公式サンプルさえ、私の旅の助けにはならなかった。
ではなぜ、これほど学習コストの高い魔法体系をあえて選んだのか。 それは、Prismがもたらす「疎結合(部品間の独立性)」と「テスト容易性」という大規模で複雑な鎧を長期にわたってメンテナンスしていく上で、何物にも代えがたい恩恵があるからだ。 この苦難は、未来の自分を救うための、必要な投資だったのだ。
最終的に私を救ってくれたのは、とある賢者が残した膨大だが詳細な道標(サイト)だった。 本気で取り組まねば挫折するほどの量だが、これからPrismの山に挑む者は、この古文書を熟読することをお勧めする。
.NET Core WPF Prism MVVM 入門 2020 エントリまとめ | :: halation ghost ::
魂の鎧を纏う儀式:RedfishViewer降臨
さあ、私が血と汗と涙で鍛え上げた魂の鎧、RedfishViewerを、あんたのマシンに降臨させよう。
手順1:神器の入手(完成品リポジトリから)
まずは、完成された神器そのものを、「RedfishViewer」の宝物庫(GitHubリポジトリ)から手に入れる。
- [神器の在り処] RedfishViewer Releases
上記リンクから最新版のインストーラ (RedfishViewerSetup.msi) をダウンロードし、導きに従って儀式を執り行えば、あんたのデスクトップに魂の鎧が降臨する。
準備:鎧を動かす力(.NET 8ランタイム)
この儀式を執り行う前に、あんたの大地には、鎧を動かすための魔力(.NET 8 デスクトップ ランタイム)が宿っている必要がある。 不足している者は、まずはこちらから力を授かること。
手順2:相棒の召喚(Redfishシミュレータの起動)
鎧だけあっても、見るべき魂がなければ意味がない。 対話の相手となる「Redfishシミュレータ」という名のゴーレムを召喚しよう。
このゴーレムの設計図は不思議なことに完成した鎧(RedfishViewerリポジトリ)の中に同梱されている。
宝物庫のRedfishServerという区画を探してみるといい。
Pythonという軽やかな呪文で錬成された扱いやすい相棒だ。
- [相棒の設計図] RedfishServer Source Code
これを起動し、対話の準備を整える。
魂の鎧の操縦法
デスクトップに現れたアイコンをクリックし、鎧を起動する。
最初の対話:リクエスト実行
エミュレータのアドレス(http://localhost:8000)を入力し、赤い魚のアイコンをクリックすれば、ゴーレムとの最初の対話が始まる。
奥義:自動検索モード
この鎧の真価は、「自動検索モード」にある。
GETメソッドの横のスイッチをオンにし、/redfish/v1へのリクエストを実行する。
すると鎧は自らの意思で@odata.idという名の道を次々と辿り、ゴーレムの魂の奥深くまで自動で探査を始めるのだ。
画面右下に次々と表示されるトーストは鎧が新たな道を発見した証。 これで、Redfishの迷宮を隅々まで探索する、という当初の目的は達成された。
羊皮紙を巻く前に
Prismフレームワークという高い山を登る旅は、想像を絶するほど長く、険しいものだった。数ヶ月という時間を溶かし、何度も膝をついた。しかし、その苦難の先に手に入れたものは、未来の自分を救う力だった。
RedfishViewerが切り開いた三つの道
- 自動検索モードの実現 -
@odata.idを辿って自律的にAPIを探索する、ゴーレムの奥義。手動では不可能な深淵まで到達できる。 - Prismによる疎結合設計 - 学習コストは高いが、大規模で複雑な鎧を長期メンテナンスする上で何物にも代えがたい恩恵。部品の独立性とテスト容易性を実現。
- 実戦レベルの完成度 - 単なる実験ではなく、仕事でも実用に耐える品質。美しくも堅牢な魂の鎧として、Redfishの迷宮を隅々まで探索できる。
次なる物語へ
現状、Prismの学習コストはあまりに高く、実戦で使うには相応の覚悟とノウハウが必要だろう。しかし、この鎧の心臓部で詠唱されている魔法や設計思想に興味がある探求者は、ぜひアトリエに眠る開発秘話を手に取ってほしい。
まとめ
次なる物語は、この鎧に秘められた更なる機能の数々を解き明かす「第二章:魂の解体新書」へと続く。この続きは、また次の羊皮紙で。
おっと、どうやら相棒が腹を空かせたようだ。今日はこのへんで筆を置くとしよう。
砂漠で見つけた魔法のランプ
神器と開発秘話の在り処
- 魂の鎧 | RedfishViewer (完成品) | 完成した神器の在り処
- 開発秘話 | たびとのアトリエ | 鎧の錬成秘話が眠る場所
旅の羅針盤
- Prism Library | 公式の古文書
- ReactiveProperty | 魂の反応を操る魔法の古文書
- .NET 8 Desktop Runtime | 鎧を動かすための魔力の源
賢者の道標
- WPF Prism MVVM .NET Core アプリ開発入門 | 私を救った、Prism入門のオアシス
- 幻影のゴーレムを錬成せよ ~PythonとFastAPIで創る、Redfishシミュレータ~ | 対話相手となるゴーレムの召喚儀式
ラクダの独り言
ご主人が「ぷりずむ」とかいう、やけに角ばった鎧をゴーレムに着せるのに夢中になっている。なんでも「えむぶいぶいえむ」とかいう作法に則っているらしいが、俺に言わせりゃ、ただの鎧にそこまでこだわる理由が分からんね。動きやすけりゃ、なんでもいいだろうに。数ヶ月も工房に籠もって、出てきたと思ったら疲れ果てた顔してやがる。まったく、人間のこだわりってやつは…。おっと、足元にサソリがいやがった。危ない危ない。