Ohara Lab

スサノオのシステム構成

トップページへ戻る

DeviceClass と透過型プロキシ

機器を実際に操作するのは、機器側で動作する DeviceClass である。ネットワーク上のクライアントは、DeviceProxy/通信クライアントを通じてその公開 API を呼び出す。Python のメソッド呼び出しに近い記述を可能にすることを「透過型プロキシ」と呼ぶが、クライアント上に DeviceClass の実体が複製されるわけではない。

ローカルで DeviceClass を直接使う場合は通信 Frame を必要としない。一方、ネットワーク利用では、メソッド実行場所、ファイル入出力、シリアライズ、接続断、タイムアウト、例外の伝達に境界が生じる。

実行場所と副作用

たとえばサーバー側の DeviceClass にファイル保存を実装すると、そのメソッドは通常サーバー側のファイルシステムを操作する。クライアント側へ保存したい場合は、データを取得してクライアントで保存するなど、処理の実行場所を明示した API 設計が必要となる。透過型というだけで保存先が自動的にクライアント側へ切り替わることはない。

通信 Frame の役割

クライアント側                         機器側
利用プログラム
    ↓
DeviceProxy / Client ── ネットワーク ── Frame / Server
                                          ↓
                                       DeviceClass
                                          ↓
                                         機器

ese774 Frame は FastAPI / HTTP、gRPC Frame は gRPC による通信を扱う。DeviceClass は機器制御を担い、Frame は通信境界での要求・応答の変換やエラー伝達を担う。機器固有のエラー処理を通信実装へ移す必要はない。

動的ディスパッチと明示的 API は排他的ではない。ese774 Frame では動的公開と専用 Router/Pydantic の明示的 API を組み合わせられる。gRPC Frame の Describe は OpenAPI とは異なるメソッド発見機構である。

参照


作者