エンジニアリングMar 28, 2026
Deep EVM #22:Rustでの依存性注入 — ServiceLocator、Arc、トレイトオブジェクト
OS
Open Soft Team
Engineering Team
RustでのDI問題
依存性注入は基本的な設計原則です。Rustには標準DIフレームワークがなく、所有権モデルがナイーブなDIパターンを困難にします。
パターン1:Arcとトレイトオブジェクト
トレイトで振る舞いを定義し、Arc<dyn Trait>でランタイム多態性を受け入れる。テスト用にモック実装を提供。
パターン2:ジェネリクス(ゼロコスト抽象化)
パフォーマンスクリティカルなパスで動的ディスパッチオーバーヘッドが問題になる場合に使用。
コンポジションルートパターン
main()ですべての依存関係を作成し、下方に渡す。グローバル状態なし。
ServiceLocatorパターン
複雑なシステムで数十のサービスがある場合、TypeIdベースのレジストリを使用。
まとめ
RustのDIにフレームワークは不要です。トレイトが契約を定義し、Arc