こんにちは、2024年度入社の齋藤です。
現在私は、フルスタック人材の育成を目的とした新人研修に取り組んでいます。Webアプリケーションの開発からAWSを用いたインフラ構築まで幅広い知識を習得できるため、非常に充実した研修内容だと感じています。
今回は、その一環としてAWS Cloud9上でWebアプリケーションの開発を行った際に用いた、Spring Boot というフレームワークを紹介します。
Spring Boot の概要
まず、Spring Boot の概要について説明します。
Spring Boot とは
Spring Boot とは、JavaでのWebアプリケーション開発を迅速かつ効率的に行うためのフレームワークです。
Spring Frameworkに搭載されているフレームワークの1つで、手軽な設定と少ないコード量でアプリケーションを作成するのに役立ちます。
Spring Boot の特徴
①Webコンテナの内包
Spring Boot は、Webアプリケーション開発を容易にするために、WebコンテナをJAR(JavaARchive)ファイルに内包することができます。これにより、単一のJARファイルでWebアプリケーションを作成し、手軽にデプロイすることが可能です。デフォルトでTomcatコンテナが含まれていますが、必要に応じて他のコンテナに切り替えることもできます。
②DI(依存性の注入)
依存しているとは?
「依存している」とは、「クラスAを正しく動作させるためには、クラスBが必要である」という状態を指します。これは、クラスAがクラスBに依存してることを意味しており、この状態ではクラスAが利用する機能をテストする際にも、クラスBが完成している必要があります。
通常、下の図のようにクラスAがクラスBを直接呼び出す場合、強い依存関係が発生します。
DI(Dependency Injection)を利用することで、クラスAはインターフェースを通じてクラスBを使用します。これにより、クラスBに依存せず、クラスAの単体テストを実行することが可能です。
Spring Boot では、アノテーションを使用することで、依存関係のあるインスタンスの管理を自動化します。これにより、インターフェイスを介すことなく依存関係を保つことができ、コードの可読性と保守性が向上し、開発効率が向上します。
これらの特徴を活かすことで、Spring Boot はJavaによるWebアプリケーション開発をより効率的に行うことができます。
開発環境
AWS Cloud9 での Spring Boot のアプリケーション開発方法について説明します。
実施方法
- Spring Boot のプロジェクトの作成
- Cloud9の画面下部のTerminalで下記コマンドを入力
spring init -j=17 --build=maven -d=web,thymeleaf -g=jp.scsk --package-name=jp.scsk.training.trgapp -a=web-ui-team-developer -n=web-ui-team-developer web-ui-team-developer
- 実行された結果、web-ui-team-developerの Spring Boot のプロジェクトが作成されたことを確認する。
- Cloud9の画面下部のTerminalで下記コマンドを入力
- アプリケーションの実行
- Cloud9の画面中央上部にある「Run」ボタンをクリックしてアプリケーションを実行します。
- 画面下部のターミナルにアプリケーションのログが表示されることを確認します。
実行結果 Using service at https:
//start
.spring.io
Project extracted to
'/home/ec2-user/environment/web-ui-team-developer'
ディレクトリ構造
Spring Boot プロジェクトを作成すると、以下のディレクトリ構造が作成されます。この構造は、プロジェクトを整理し、コードの管理を容易にするために設計されています。
web-ui-team-developer/ └── src/ ├── main/ │ ├── java/ │ │ └── jp/scsk/training/trgapp │ │ ├── Application.java │ │ ├── controller/ │ │ ├── service/ │ │ └── repository/ │ └── resources/ │ ├── application.properties │ ├── static/ │ └── templates/ └── test/ └── java/ └── jp/scsk/training/trgapp
Spring Boot を使ってWebアプリケーション開発に挑戦
Spring Boot を使ってWebアプリケーション開発に挑戦してみました。Webアプリケーション開発は設定ファイルの記述量が多く、敷居が高く感じていました。しかし、Spring Boot は設定ファイルが自動生成され、アノテーションで簡単に機能を追加できるため、非常に快適な開発体験でした!
とはいえ、初めての Spring Boot 開発で、いくつか戸惑ったポイントもありました。今回は、その中でも特に難しかったと感じた2つのポイントを紹介します。
アノテーションの付与
Spring Boot は、アノテーションと呼ばれるメタデータを使って、さまざまな機能を追加できます。アノテーションは、コードに特別な意味を付与し、Spring Boot にどのように動作させるかを指示する役割を果たします。
しかし、アノテーションの種類が多く、どのアノテーションをどの場所に付与すればいいのか、最初は戸惑いました。特に、複数のアノテーションを組み合わせる場合、その動作を理解するのに苦労しました。
Spring Boot のアノテーションについて、実際に作成したコントローラークラスを用いて紹介します。@Controller、@GetMapping、@Autowired などのよく使うアノテーションの用途と使い方を理解することで、Spring Boot アプリケーションをよりスムーズに開発できるようになります。
@Controller //コントローラークラス public class RootController { //依存性の注入 @Autowired private RootService rootService; //toppage表示 @GetMapping("/") public String showTopPage(Model model) { // サーバ名と IP アドレスを取得 rootService.addServerIpModel(model); return "top_page"; } //userlist表示 @GetMapping("/user_list") public String showUserListPage(Model model) { rootService.addUserInfoToModel(model); return "user_list"; } }
- @Controller
このクラスがコントローラークラスであることを示します。つまり、Webリクエストを受け取って処理を行う役割を担うクラスであることを宣言しています。 - @GetMapping
HTTP GETリクエストを処理するメソッドを定義します。 - @Autowired
Springの依存性注入機能を利用して、Serviceクラスに自動的に連携させます。
pom.xmlファイルの修正
Spring Boot プロジェクトを作成しただけでは、Webアプリケーションをビルドして実行することができませんでした。pom.xmlファイルに、ビルド設定を追加する必要がありました。
pomファイルとは?
pomファイルは、プロジェクトの構成と依存関係を管理するための重要な設定ファイルです。pomファイルには、プロジェクトのビルド、パッケージング、実行に必要な情報が記述されており、開発者はこのファイルを使用してプロジェクトを効率的に管理できます。
具体的には、以下の2つのプラグインを追加しました。
-
- maven-jar-plugin:Javaソースコードをコンパイルするためのプラグイン
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.2.0</version> <configuration> <archive> <manifest> <mainClass>jp.scsk.training.trgapp.WebUiTeamApplication</mainClass> </manifest> </archive> </configuration> </plugin>
-
- maven-compiler-plugin:Javaソースコードをコンパイルして生成されたクラスファイルをjarファイルにパッケージングするためのプラグイン
- maven-compiler-plugin:Javaソースコードをコンパイルして生成されたクラスファイルをjarファイルにパッケージングするためのプラグイン
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>17</source> <target>17</target> <mainClass>jp.scsk.training.trgapp.WebUiTeamApplication</mainClass> </configuration> </plugin>
この修正で、Spring Boot アプリケーションが適切にパッケージングされ、実行時に起動クラスが正しく呼び出されるようになりました。
ただ、pom.xmlファイルは、プロジェクトの構成情報全体を定義するため、変更する際は慎重に進める必要があります。特に、プラグインのバージョンや依存関係のバージョンを間違えると、ビルドエラーが発生したり、アプリケーションが正常に動作しなくなる可能性がありますのでご注意を。。
おわりに
本投稿では、Spring Boot の基本的な機能や特徴や触ってみた感想について書いてみました。JavaによるWebアプリケーション開発を効率的に進めるための役立つツールであることを理解いただけたでしょうか。Spring Boot を利用することで、迅速な開発と保守性の高いコードの実現が可能となります。ぜひ Spring Boot を開発に活かしていただければと思います。