旅の途中、興味深いオアシスを見つけた。 忘れないうちに、この羊皮紙に記しておくとしよう。
Redfish(サーバー管理用API規格)という広大にして難解な古代遺跡。 その全貌を解き明かすための魔法の眼鏡(ビューワ)を創る前に、私はまず、いつでも呼び出して対話できる、その完璧な「幻影(シミュレータ)」を錬成する必要があった。
情報の砂漠を彷徨い、私が見つけ出したのはPython(プログラミング言語)とFastAPI(Webフレームワーク)という驚くほど軽やかで強力な錬金術だった。 WSL2 Ubuntu(Windows上のLinux環境)という名の祭壇で、わずかな呪文を唱えるだけで本物と見紛うほどの精巧なゴーレムを創り出せるのだ。 これはその驚くほど簡単な錬成儀式の全てを記した、未来の錬金術師のための魔導書である。
この羊皮紙のあらまし
- この羊皮紙のあらまし
- この羊皮紙が導く者
- 砂漠の道標
- 第一の儀式:祭壇の準備(FastAPIインストール)
- 第二の儀式:魂の設計図(ソースコード)
- 第三の儀式:魂の召喚(シミュレータ起動)
- 最終奥義:C#による魂の深淵探査
- 羊皮紙を巻く前に
- 砂漠で見つけた魔法のランプ
- ラクダの独り言
この羊皮紙が導く者
- PythonのFastAPIという、モダンな錬金術に興味がある魔法使い
- RedfishのようなRestAPIの幻影を自らの手で創り出してみたいと願う者
- 実機という名の遺跡がなくとも、冒険を始めたいと願う全ての探求者
- 開発環境でAPIテストを繰り返し行いたい実践的な技術者
- 再帰処理による効率的なデータ収集手法を学びたい探求者
砂漠の道標
- Redfish - サーバー管理のための標準規格。RESTful APIでハードウェア情報を取得・制御できる。
- シミュレータ - 実際の機器を模倣する仮想環境。開発やテストに使用する。
- Python - シンプルで読みやすいプログラミング言語。Web開発や機械学習で広く使われる。
- FastAPI - Pythonの高速Webフレームワーク。REST APIの構築に特化している。
- WSL2 - Windows Subsystem for Linux 2。Windows上でLinuxを動かす仮想環境。
- 仮想環境 - Pythonパッケージを独立して管理する仕組み。プロジェクト間の干渉を防ぐ。
- JSON - JavaScript Object Notationの略。データ交換用の軽量テキスト形式。
- 再帰 - 関数が自分自身を呼び出す処理。階層構造の探索に有効。
- @odata.id - Redfish内でリソースへのリンクを示す特殊なキー。これを辿って全体構造を把握する。
第一の儀式:祭壇の準備(FastAPIインストール)
まずはWSL2 Ubuntuという祭壇に、儀式に必要な道具を揃える。
Pythonの仮想環境(独立した実行環境)という結界を張り、pip(パッケージ管理ツール)という名の魔法の袋に、fastapiとuvicorn(Webサーバー)という二つの魂の素を収める。
# 結界を張る $ python3 -m venv ~/devpy $ source ~/devpy/bin/activate # 魂の素を手に入れる $ pip3 install fastapi "uvicorn[standard]"
第二の儀式:魂の設計図(ソースコード)
次にゴーレムの魂の設計図をmain.pyという名の羊皮紙に記す。
@app.getという呪文の後にゴーレムが応えるべき問い(URI)と、その答え(JSON形式データ)をただひたすらに羅列していく。
from fastapi import FastAPI app = FastAPI() @app.get("/") def read_root(): return {"Hello": "Redfish"} @app.get("/redfish/v1") def read_root(): return {"@odata.type":"#ServiceRoot.v1_14_0.ServiceRoot", ...} # ...(以下、数多の問いと答えが続く)...
第三の儀式:魂の召喚(シミュレータ起動)
設計図が完成したらuvicornという呪文でゴーレムに命を吹き込む。
$ uvicorn main:app --reload
「Application startup complete.」という神託が聞こえれば幻影のゴーレムはあんたの目の前に降臨している。
最終奥義:C#による魂の深淵探査
ここからが、この旅の真骨頂だ。
C#(プログラミング言語)という別の魔法を使い、降臨したゴーレムの魂の奥深くに眠る全ての知識(@odata.id)を芋づる式に引き出す。
その秘儀の核心が、このReadメソッド(再帰関数)に刻まれている。
// 既に訪れた道(URI)を記録しておく羊皮紙 HashSet<string> OdataItems { get; set; } = new HashSet<string>() { "/redfish/v1/" }; /// <summary> /// 全ての知識を再帰的に読み込む /// </summary> public void Read(string path) { if (Client == null) return; // ゴーレムに問いかけ、答え(レスポンス)を得る var request = new RestRequest(path); var response = Client.ExecuteAsync(request, Method.Get).Result; if (response == null || response.Content == null || response.ResponseUri == null) return; // 答え(JSON)を一枚ずつめくり、古文書を解読していく var reader = new JsonTextReader(new StringReader(response.Content)); while (reader.Read()) { // ...(JSONを解析し、Elementsリストに格納する処理)... // もし、そのページに「@odata.id」という名の「新たな道」が記されていたなら… if (((string)val1).Equals("@odata.id")) { // そして、その道がまだ我々の知らない道であったなら… if (!OdataItems.Contains((string)val2)) { // 新たな道を記録し、再びこのReadメソッド自身を呼び出す(再帰) OdataItems.Add((string)val2); Read((string)val2); } } } }
この再帰(自分自身を呼び出す処理)の魔法により、最初に/redfish/v1/という入口から入るだけで、そこから繋がる全ての道を自動的に探査し、巨大な一枚の地図(JSONファイル)として描き出すことができるのだ。
羊皮紙を巻く前に
自宅にRedfishが使えるサーバがなくとも、PythonとFastAPIを組み合わせれば、これほど簡単に、そして精巧な幻影を創り出せるとは私自身も驚きだった。 そしてその幻影からC#の再帰の魔法で知識を引き出すことで、我々はRedfishという広大な遺跡の完全な地図を手に入れることができる。
FastAPIシミュレータの優れた点
- 軽量性と即応性 - 数十行のコードで本格的なAPI環境を構築できる圧倒的な手軽さ。
- 再帰処理による完全探索 -
@odata.idを辿る再帰の魔法により、階層構造を自動的に全探索できる。 - 実機不要の開発環境 - 高価なサーバを持たずとも、完璧な訓練相手を手に入れられる。
- 理解の深化 - 幻影を創る過程でRedfish規格そのものへの理解が飛躍的に深まる。
まとめ
これでRedfishビューワという次なる冒険のための完璧な訓練相手が手に入った。 仕事の砂嵐が止んだら、いよいよ本格的な鎧の錬成に取り掛かるとしよう。 この幻影のゴーレムが、未来の錬金術師たちの道標となることを願って。
どうやらインクが切れそうだ。 今日の記録はここまでにして、道具の手入れでもするとしよう。
砂漠で見つけた魔法のランプ
- FastAPI | 公式の古文書
- Postman | 魂の声を美しく聞くための魔法の水晶玉
- JSONの迷宮を解き明かせ ~Redfishの入れ子構造をマージする、再帰の魔法~ | かつての冒険の記録(Redfishの基本構造)
- 遺跡の魂を直接読み解け ~RestSharpで、Redfishの深淵を覗く~ | かつての冒険の記録(芋づる式取得の原型)
ラクダの独り言
ご主人が「しみゅれーた」とかいう、本物そっくりの幻のゴーレムを創り出して、一人で悦に入っている。 俺に言わせりゃ、幻だろうが本物だろうが、どうせ荷物は運んでくれねえんだ。 そんなことより、目の前にいる本物の相棒(俺のことだ)に、もっと構ってほしいもんだぜ。 おっと、足元にサソリがいやがった。 危ない危ない。