メインコンテンツへスキップ
エンジニアリング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がランタイム多態性を提供し、コンポジションルートがすべてを結合します。