最大の特徴「DI(依存性注入機能)」はコードに何をもたらすのか
数あるJavaフレームワークの中でも、特にSpringフレームワークが広く支持されている理由の1つに、「DI(Dependency Injection:依存性注入機能)」と呼ばれる機能がある。これは定数や変数、インスタンスを処理の外部から処理に渡せる機能で、XMLやBean、アノテーションなどで定義することができる。この機能を活用すればコードの依存性を下げ、疎結合性を向上させることができる。
プログラムの単体テストなどの場面では、特にこのDIが大きな効果を発揮するという。例えばある特定のクラスの単体テストを行いたいのに、依存する別のクラスの実装が完了していない場合、通常は依存先クラスのスタブを作成してテストを行う。その際、単純なプログラムであればテスト用のコードを大量に書く必要はないが、分岐が数多く存在するような場合、分岐チェック用のテスト用プログラムを新たに記述する必要が出てくる。
このようなテストコードの記述は、テストコード削除漏れによるバグの作り込みや、継承が増えた場合にコード量がさらに増加するなどさまざまな問題をはらむため、できれば行いたくない。そこでSpringフレームワークのDIを使い、アノテーションを記述して依存性を注入すれば、前述のようなテストシナリオに最小限の記述の追加のみで対応できる。
具体的には、環境変数の値によって自動的にクラスのインスタンスが作成されるため、テスト用の分岐コードを記述することなく分岐処理のテストが可能になる。また継承が増えたとしても、アノテーションの追加のみで対応できるためソースコードがシンプルになり、再利用性も高められる。そのため河上氏によれば、コード管理の面でもメリットが多いという。
「余計なコードを書かなくて済むようになるので、ソースコードが見やすく、可読性や保守性が向上するというメリットがあります。また開発者にとっては、単体テストのために記述したコードの削除漏れに起因するバグは常に怖いものですが、そうしたミスも排除できます」
Springフレームワークの導入に向けた学習コストは?
ただしSpringフレームワークを使った開発は、決して「いいことずくめ」ではない。佐藤氏によれば、実際に導入・利用するうえでの最大のハードルは「学習コスト」だという。
「Springフレームワークの最大の強みであるDIも、未経験者が理解するまでには時間がかかることが多いですね。チーム内に経験者がいない場合や、学習のための時間や費用を確保できない場合は、なおさら習得のハードルを高く感じると思います」
ただし幸いなことに、Springフレームワークに関する情報はインターネット上にあふれており、コミュニティも多数存在するため開発者同士の情報交換も活発に行われている。またSpringフレームワークはOSSであるため、導入コストも最小限に抑えられる。そのため「皆さんが思うほど、Springフレームワーク導入のハードルは決して高くありません。確かにある程度の習熟期間は必要ですが、それを『コスト』ととらえるのではなく、開発効率化を実現するための『投資』ととらえるべきではないでしょうか」と佐藤氏は提言する。
とはいえ、「OSSをそのまま利用するのは、やはりハードルが高い」と感じるデベロッパーも決して少なくないだろう。そんな場合は、VMware社が提供するエンタープライズ版の商用Sprintフレームワーク「VMware Spring Runtime」が適しているという。有償ではあるものの、これを使うことでOSSでは得られないさまざまな付帯サービスや手厚いサポートを受けられるため、OSSを独力で導入する場合と比べハードルがぐっと低くなる。
なおSB C&Sでは現在、DevOpsに関するさまざまな情報や関連製品・サービスの紹介を行う「DevOps Hub」というWebメディアを運営しており、VMware Spring Runtimeに関する情報も積極的に発信しているという。河上氏によれば、今後はDevOpsの新しいトレーニングサービスもこのDevOps Hubを通じて提供していく予定だという。
「DevOpsを推進するためのチームビルディングやマインドセットを学べるトレーニングコンテンツをパッケージングして提供する予定です。もちろん、今回ご紹介したSpringフレームワークの導入に関するご相談も受け付けていますので、興味のある方はぜひ気軽にDevOps Hubまでお問い合わせいただければと思います」
関連情報
SB C&Sは、VMware Tanzu をはじめとした DevOps の成功に必要なサービスを提供し、お客さまのDevOps 導入をトータルでサポートします。詳細はこちらから!