エンジニアとして3年目に突入し、一番触れる機会が多かった言語がJavaでSpringを利用する機会も多かったためJavaでのSpringのメリットやデメリットについて記載していきます。まずはJavaのフレームワークであるSpringとは何か、またSpringのメリット・デメリットについて実際に利用して感じたことも含めて記事を書いています。
記事の信頼性:エンジニア3年目の「しう」が実際の開発現場でJavaのフレームワーク、Springを利用して感じたメリット・デメリットについて記載しています。
Spring FrameworkとSpring Bootは異なるものやから、そのあたりも解説していくで!
Spring Framework・Spring Bootとは【Java】
Spring Frameworkはオープンソースのフレームワークです。2004年にバージョン1.0がリリースされ、多くのエンジニアに利用をされているフレームワークとなります。省略をしてSpringと呼ばれることもあります。
アスペクト指向プログラミングやMVCモデル(Model、View、Controller)などのサービスを提供するモジュールから構成されています。Javaだけでなく、KotlinやGroovyでも利用することができるフレームワークとなっています。
ちなみに、Spring BootというSpring Frameworkの機能の使い分けが困難という欠点を解消するために作られたフレームワークも存在していて、筆者の「しう」が開発現場で利用する時にはSpring Bootを利用することが多かったです。
Spring BootはSpring Initializrのサイトを利用することで Lombok や MySQL Driver など自分の選択した機能を利用するプロジェクトの作成ができます。Lombokについては下記の記事で紹介しているので参考にしてください。
Springの特徴
Springの特徴について下記の順番で記載していきます。今から紹介するSpringの特徴は、 Spring FrameworkとSpring Bootのどちらにも当てはまっているものになります。
- DI(Dependency Injection):依存性の注入
- AOP(アスペクト志向プログラミング)により管理がしやすい
DI(Dependency Injection):依存性の注入
SpringはDI(Dependency Injection)を提供しており、オブジェクト間の依存関係を疎結合にすることができます。Javaの場合はプログラム同士の依存性が高いとテストや保守対応がしにくくなるため、DIを利用してメンテナンスのしやすいシステム開発をおこなうことは大切です。
AOP(アスペクト志向プログラミング)により管理がしやすい
AOP(アスペクト志向プログラミング)という特徴もあります。AOPは、Springが提供する機能の一つで、アプリケーション全体にまたがる機能をモジュール化し、コードの再利用性や保守性を向上させるための手法です。
実際のJavaを利用した開発現場では、エラー時に原因が特定できるようにするため、処理中にcatch句を通る場合はログの出力をさせたい場合が多いです。しかし、ログ出力の処理を各機能でそれぞれ書いてしまうとログの出力内容を一部変えたい場合など実装をした機能全ての修正が必要になります。
AOPではアプリケーションの機能を横断する共通処理を、別のクラスに分離することができるため、アプリケーション全体にまたがる共通処理を一箇所にまとめることができ、保守性を高めることができます。
JavaでSpringを利用するメリット
JavaでSpringを利用するメリットについて下記の順番で説明していきます。技術選定をする際にはメリットを理解した上で選定することが大切になるので、頭の中に入れておくといいでしょう。
- 案件数が豊富
- 生産性の向上
- コミュニティーの活発さ
- JUnitを利用したテストコードの実装
案件数が豊富
JavaでSpringを利用する1つ目のメリットは、案件数が豊富ということです。転職活動やSESでの面接の時には今まで利用してきた技術について質問がされますが、その案件で採用されている技術の経験があると面接で好印象を持たれやすいです。
つまり案件数が多いということはその経験を今後、エンジニアとして働くときに活かしやすいということです。仕事を通じてせっかく勉強するのであれば将来の役にたつ勉強の方がいいので、案件数が豊富なSpringの案件に取り組むといいでしょう。
人気な技術の経験があると転職活動の時にも活かしやすいで!
生産性の向上
JavaでSpringを利用する2つ目のメリットは、生産性の向上です。特にSpring Bootでは、システム開発でよく使われる機能に関するサービスを提供しており、自分で1から全て構築する必要は少なくなっています。
先ほど紹介した記事内で書かれているLombokを利用することでJavaでよく使われるGetterやSetter、コンストラクターの記載も短縮できます。システム開発において生産性の向上は重要で、Springを利用するメリットとなっています。
コミュニティーの活発さ
JavaでSpringを利用する3つ目のメリットは、コミュニティーの活発さです。Springは、オープンソースのフレームワークであり、世界中の開発者が利用しています。そのため、調査が必要な場合に既に誰かが調べた内容が見つかる可能性が高いです。
新しいフレームワークの場合は、コミュニティーが活発でなく調査をするのに時間がかかったりするため、コミュニティーの活発さもSpringのメリットとなります。
JUnitを利用したテストコードの実装
JavaでSpringを利用する4つ目のメリットは、JUnitを利用したテストコードの実装です。開発現場によってはテストコードを利用せずにエビデンスを残す手法を採用している現場もありますが、どちらも経験した筆者の立場からするとテストコードは利用した方がいいです。コードの修正対応が入った場合に、テストコードを記載していると既存保証がしやすく最終的にかかる工数が少なくなるからです。
JavaでSpringを利用するデメリット
JavaでSpringを利用するデメリットについて下記の順番で説明していきます。
- 土台の設定が難しい
- 学習コストが高い
土台の設定が難しい
Springを利用する場合、様々な設定をする必要が出てきます。先ほど紹介したDIを利用する時の設定やSpring Boot利用時のbuild.gradleの設定が該当します。そのため、Springを利用することで効率アップは測ることができますが、最初の土台設定に時間がかかる可能性があります。
筆者の「しう」が未経験で入社した会社で一番できるエンジニアがSpringの土台の設定をしてくれていましたが、その部分で手間がかかるという理由で小規模な案件の時にLaravel(PHP)を採用することもありました。
学習コストが高い
上記の土台の設定が難しいに関連しますが、Springを利用する場合は学習コストが高くなります。豊富な機能があるため、組み合わせる際にどの機能を採用するかも学ぶ必要がありますし、DIに関する理解もプログラミング初心者にとって簡単なものではありません。
しかし、特にJavaでの開発でSpringが採用されることが多いことからも分かるように、学習コストが高くても使いこなせると開発効率が高くなるフレームワークです。
JavaでSpringを勉強する方法
JavaでSpringを勉強する方法は下記の2つの方法があります。自分に合った方法を選ぶといいですが、それぞれについて両方経験した視点から解説していきます。
- Udemyでのハンズオン
- 書籍での学習
Udemyでのハンズオン
1つ目の方法はUdemyでのハンズオンによる学習です。Springを利用する場面としては実際にシステム開発をする時に開発効率アップなどのために利用する場面が多いです。つまり考え方というよりは実務面でのコーディングなどで必要となるため、その場合はハンズオンでの方法を推奨しています。
オススメのUdemyの動画は「IntelliJ ではじめる Spring Boot:課題管理アプリを作って学ぶWebアプリケーション開発の基礎
実際に購入して勉強してみたけど、Spring Bootでよく使われるLombokやCRUD処理、DIについても学ぶことができてオススメやで!
書籍での学習
2つ目の方法は書籍での学習です。個人的にはUdemyでのハンズオンを推奨していますが、どうしても本で勉強を進めたいという場合は「Spring徹底入門 Spring FrameworkによるJavaアプリケーション開発
ただ、筆者の「しう」も購入して読んでみましたが、かなり分厚く時間がかかりすぎるためあまりオススメはしていません。また、Spring BootでなくSpring Frameworkの解説書となるため、今から改めて学習するなら「Spring Boot 3 プログラミング入門
まとめ
いかがでしたか?今回は、次の順番でSpringのメリットやデメリットなどについて記載をしました。
- Spring Framework・Spring Bootとは【Java】
- Springの特徴
- JavaでSpringを利用するメリット
- JavaでSpringを利用するデメリット
- JavaでSpringを勉強する方法
Javaでの開発で一番有名なフレームワークはSpringなので、Springについての知識を持っておくとJavaエンジニアとしては開発がしやすくなります。Springの特徴やメリット・デメリットを把握した上でシステム開発に役立ててください。
☟あわせて読みたい 「しう」のオススメブログ
コメント