All Posts
Updates

SpringBootって何?

Published on 2025年6月19日

Featured Image

# **Spring Boot入門ガイド:知っておくべきことの整理** ## **I. Spring Bootとは? \- 迅速なJavaアプリケーション開発の扉** Spring Bootは、JavaでのWebアプリケーション開発を迅速かつ効率的に行うために設計されたフレームワークです。これは、広範な機能を持つSpring Frameworkの一部として提供されており、手軽な設定と少ないコード量でアプリケーションを構築することを可能にします 1。その主要な目的は、従来のSpring Frameworkが持つ多機能性から生じる複雑さ、特に初期設定の煩雑さを解消し、開発者がより迅速かつ直感的に開発を進められるようにすることにあります 2。具体的には、従来のSpring Frameworkで手動で行う必要があったBeanの定義やXMLベースの設定といった多くのプロセスを自動化することで、開発の参入障壁を大幅に引き下げています 2。 Spring Bootの大きな特徴の一つは、アプリケーションを単一のJARファイルとして作成し、容易にデプロイできる点です 1。これは、Tomcatなどの組み込みHTTPサーバーをサポートしているため、別途サーバー環境をセットアップすることなく、アプリケーションを独立して実行できることによって実現されます 2。この特性は、Webアプリケーション開発、RESTfulサービス、マイクロサービスアーキテクチャ、クラウドベースアプリケーションといった、現代の多様な開発ニーズに強力な適性をもたらします 2。 ### **Spring Frameworkとの関係性** Spring Bootは、Spring Frameworkの「拡張版」として位置づけられ、その堅牢な基盤の上に構築されています 3。これは、Spring Frameworkが提供する全ての機能を継承しつつ、それをより使いやすくするための簡便な機能が追加されていることを意味します 3。Spring FrameworkがエンタープライズレベルのJavaアプリケーションを構築するための包括的な基盤を提供する一方で、Spring Bootはその上にさらなる利便性と簡潔さを付加しているのです 6。 この関係性を理解する上で、Spring Frameworkの核となる概念である「制御の反転(IoC: Inversion of Control)」と「依存性注入(DI: Dependency Injection)」の重要性を把握することが不可欠です 7。 * \*\*制御の反転(IoC)\*\*とは、オブジェクトの生成や管理といったプログラムの制御フローを、開発者が直接行うのではなく、フレームワークに委ねる設計原則を指します 8。これにより、クラス間の結合度が低下し、コードのテストが容易になるという利点が生まれます 9。 * \*\*依存性注入(DI)\*\*は、このIoCを実現するための具体的な手法です 8。オブジェクトが必要とする依存オブジェクトを、そのオブジェクト自身が生成するのではなく、外部(Spring IoCコンテナ)から注入するメカニズムです 8。この設計原則は、Javaクラス同士を互いに独立させ、疎結合なコードへと導き、結果としてコードの柔軟性と保守性を向上させます 1。 Spring Bootの強力な自動設定機能は、まさにこのIoCとDIの原則を基盤としています 3。フレームワークがクラスパスやプロパティに基づいて依存関係をインテリジェントに「注入」し、コンポーネントを構成するということは、IoC/DIが自動化された形で実行されていることを意味します。Spring Bootは手動でのIoC/DI設定の多くを隠蔽しますが、これらの概念の基本的な理解は、デバッグ、自動設定のカスタマイズ、そしてSpring Bootがなぜそのように動作するのかを理解するために不可欠であり、それは「舞台裏の魔法」を理解することに繋がります。 ### **Spring Bootが解決する課題と目的** 従来のSpring Frameworkでは、多数のXML設定ファイルが必要とされ、特に大規模なプロジェクトではその管理が非常に煩雑になるという課題がありました 6。Spring Bootは、Javaのアノテーションと自動設定の導入により、これらのXML設定のほとんどを不要にすることで、この問題に直接対処しています 4。 Spring Bootは、従来のJavaフレームワークやAPI(Java Database Connectivity (JDBC)、JavaServer Pages (JSP)、Java Servletなど)と比較して、Webアプリケーション開発を格段に容易にしました 3。開発者は、基礎となるSpring Frameworkの複雑な設定を深く学習することなく、すぐにSpring Bootを使った開発を開始できます 4。これにより、設定に費やす時間と労力が大幅に削減され、開発者はアプリケーションの核となるビジネスロジックの開発に集中できるようになり、結果として生産性が向上します 2。 この点から、Spring Bootは単なる機能追加ではなく、Spring Frameworkの「進化形」として、従来の課題に根本的に対処し、開発パラダイムを変化させたことが明らかになります。この「進化」は、特にマイクロサービスのような現代的なアプリケーションアーキテクチャにおいて、開発者の生産性と使いやすさを向上させる方向性を示しています。初心者にとって、これはSpring Frameworkの複雑な設定を最初から習得する必要がないことを意味し、ビジネスロジックに集中できるという大きな利点があります。しかし、より深い理解や高度なカスタマイズのためには、Springの核となる原則(IoC/DI)の理解が依然として重要です。 Spring Bootの「迅速な開発」という側面は、単にコードを書く速度だけでなく、プロジェクトのライフサイクル全体に及ぶ包括的な意味合いを持っています。これは、初期セットアップの高速化(Spring Initializrの活用)、パッケージングとデプロイメントの容易化(単一JARファイルと組み込みサーバー)、そしてマイクロサービスのような現代的なアーキテクチャパターンとの整合性を含んでいます 1。このことから、Spring Bootは単なる開発ツールにとどまらず、現代のアジャイルでクラウドネイティブなコンテキストにおけるアプリケーションのライフサイクル全体を考慮した包括的なソリューションであり、現在の業界トレンドにおいて非常に高い関連性を持つことが理解できます。 以下に、Spring FrameworkとSpring Bootの主な違いをまとめた比較表を示します。 | 項目 | Spring Framework | Spring Boot | | :---- | :---- | :---- | | **設定方法** | 複雑な設定が必要(XML/Javaベースの設定) | 自動設定が中心 | | **アプリケーション起動** | 別途サーバーをセットアップする必要あり | 組み込みサーバーで、すぐに起動可能 | | **開発スピード** | 設定に時間がかかる | すぐに開発を開始可能 | | **使用ケース** | 複雑なエンタープライズシステムや大規模なアプリ | 小〜中規模のアプリ開発に最適 | | **依存関係管理** | 手動で追加 | 自動で追加・設定 | | **IoC/DIの焦点** | 依存性注入 (DI) | 自動構成 (Autoconfiguration) | ## **II. Spring Bootの主要な特徴と利点** Spring Bootは、開発者に多くの具体的なメリットを提供し、そのメリットはいくつかの主要な技術的特徴によって支えられています。 ### **自動設定 (Auto-configuration)** Spring Bootの最も顕著な利点は、その「コンフィギュレーションの自動化」にあります 5。この機能により、開発者は手動で設定ファイルをほとんど記述することなく、アプリケーションを迅速に利用開始できます 5。Spring Bootは、アプリケーションのクラスパスに含まれるJAR依存関係を分析し、それに基づいて適切な設定を自動的に適用します 11。例えば、データベース接続の自動設定、組み込みサーバーの自動設定、Spring MVCコンポーネントの自動設定、さらにはセキュリティ設定の自動化まで、多岐にわたる設定が自動的に処理されます 2。 この自動設定は、主に@EnableAutoConfigurationアノテーションによって機能します 11。このアノテーションは、通常、Spring Bootアプリケーションのエントリポイントとなる@SpringBootApplicationアノテーションに含まれているため、開発者が意識することなく自動設定の恩恵を受けることができます 11。自動設定は非常に便利ですが、必要に応じてapplication.propertiesファイルでデフォルト設定を上書きしたり、特定の自動構成を無効にしたりすることも可能です 11。 この自動設定は「規約より設定(Convention over Configuration)」の原則を体現しており、開発者の認知負荷を劇的に軽減します 2。Spring Bootは、依存関係に基づいて適切なデフォルト設定を提供し、コンポーネントを自動的に構成することで、開発者がデータベース接続やWebサーバーのセットアップといった複雑な初期設定の詳細を全て知る必要をなくし、ビジネスロジックに集中できるようにします 12。この特性は、Spring Bootを初心者にとって非常に親しみやすいものにし、プロトタイピングを加速させます。しかし、同時に、プロジェクトが複雑になったり、特定の要件が出てきた場合に、これらのデフォルト設定をいつ、どのように上書きするかを理解する必要があるという側面も持ち合わせています。 ### **組み込みサーバー (Embedded Servers)** Spring Bootアプリケーションは、Tomcat、Jetty、Undertowといった一般的なHTTPサーバーを直接アプリケーション内に組み込むことができます 4。この機能により、開発者は別途サーバー環境をセットアップする手間が省け、アプリケーションを単一の実行可能なJARファイルとしてスタンドアロンで起動・実行することが可能になります 1。 この組み込みサーバーのサポートは、ローカル開発環境での迅速なテストやデバッグ、プロトタイピングフェーズにおいて特に大きな利点をもたらし、開発プロセスを大幅に加速させます 2。組み込みサーバーとスタンドアロンJARは、デプロイメントモデルを根本的に変革し、継続的インテグレーション/継続的デリバリー(CI/CD)の恩恵を最大化します 2。従来のWARファイルを外部のアプリケーションサーバーにデプロイする方式から、java \-jarコマンド一つで直接アプリケーションを実行できる能力は、デプロイメントを簡素化し 1、アプリケーションを真に自己完結型にします。この変化は、開発から本番環境へのパイプライン全体を合理化し、環境の不整合によって生じる「私のマシンでは動くのにサーバーでは動かない」といった問題を解消し、自動テストや継続的デリバリー(現代のDevOpsプラクティスの基盤)を大幅に促進します。 ### **スターター依存関係 (Starter Dependencies)** Spring Bootは、「スターター依存性」という独自の概念を導入しています 2。これは、特定の機能や技術スタック(例えば、Web開発、データアクセス、セキュリティなど)を使用するために必要な全ての依存関係(ライブラリ群)を、一つの便利な依存性としてまとめて提供するツールです 16。 全ての公式スターターは、spring-boot-starter-\*という命名パターンに従っており、アスタリスク(\*)は特定のアプリケーションタイプや技術を示します 16。例えば、Webアプリケーションを開発する場合、spring-boot-starter-webを追加するだけで、Spring MVCや組み込みTomcatなど、Web開発に必要な全ての依存関係が自動的にプロジェクトに含まれます 16。これにより、開発者は個々の依存性を細かく指定したり、互換性のあるバージョンを調査したりする手間が省け、関連するライブラリを一括で管理でき、依存性のバージョン管理も簡略化されます 2。 スターター依存関係は、依存性管理の複雑性を抽象化し、Springエコシステムとの連携を強化します 2。これは、複数のライブラリの互換性のあるバージョンを管理することが困難になりがちなJavaプロジェクトでしばしば遭遇する「依存性地獄」に対する直接的な解決策です。スターターはpom.xml(またはbuild.gradle)を簡素化するだけでなく、キュレーションされたライブラリセットを提供することで、開発者をベストプラクティスへと導きます。これにより、より一貫性のある堅牢なアプリケーションスタックが構築され、広大で強力なSpringエコシステム(Spring Data、Spring Security、Spring Cloudなど)との統合が容易になります 2。 以下に、主要なSpring Boot Starterとその役割をまとめた一覧表を示します。 | スターター名 | 役割/用途 | | :---- | :---- | | spring-boot-starter-web | Webアプリケーション(RESTful含む)構築、組み込みTomcat | | spring-boot-starter-data-jpa | JPAによるデータアクセス、Hibernate統合 | | spring-boot-starter-security | Spring Securityによる認証・認可機能の提供 | | spring-boot-starter-actuator | アプリケーションの監視と管理(ヘルスチェック、メトリクスなど) | | spring-boot-starter-test | テストサポート(JUnit, Mockitoなど) | | spring-boot-starter-thymeleaf | Thymeleafテンプレートエンジンサポート | | spring-boot-starter-jdbc | JDBCによるデータベースアクセス | ### **開発効率の向上とボイラープレートコードの削減** Spring Bootは、手軽な設定と少ないコード量でアプリケーションを作成できるため、開発効率を大幅に向上させます 1。多くの設定が自動化されていることで、設定に関する時間と労力が削減され、開発者はアプリケーションの核となるビジネスロジックの開発に集中できるようになります 2。これにより、定型的な繰り返しコード(ボイラープレートコード)の記述やXML構成の作成が不要になり、生産性が向上します 3。このスピード感は、特にスタートアップ企業や短期間でのプロジェクト配信が求められる環境において重要な利点であり、アジャイル開発プロセスや継続的インテグレーション(CI)/継続的デリバリー(CD)といった現代の開発手法とも非常に相性が良いです 2。 ### **マイクロサービス開発への適性** Spring Bootは、マイクロサービスアーキテクチャの構築に非常に適したフレームワークとして広く認識されています 2。組み込みWebサーバーと強力な自動設定機能により、独立して実行可能な小さなサービス(マイクロサービス)を迅速に開発し、容易にデプロイすることを可能にします 7。さらに、Spring Cloudなどの関連ライブラリと組み合わせることで、マイクロサービスベースのアーキテクチャ全体をクラウド環境に安全かつ迅速にデプロイすることが可能になり、その導入を強力に後押しします 7。 このことから、Spring Bootは単にアプリケーションを構築するためのフレームワークではなく、現代の分散アーキテクチャパターンを採用するための戦略的なイネーブラーであることが理解できます 2。迅速なイテレーションと組み込みの運用サポートに焦点を当てることで、多くの小さな、独立してデプロイ可能なサービスを効率的に開発・管理する必要があるマイクロサービスの要求に自然に適合します。 ## **III. Spring Bootプロジェクトの始め方** Spring Boot開発の最初のステップは、プロジェクトの作成です。このプロセスは、公式のプロジェクト生成ツールであるSpring Initializrを活用することで、非常に効率的に行うことができます。 ### **Spring Initializrを活用したプロジェクト生成** Spring Initializrは、Spring Boot開発者にとって不可欠な強力なツールであり、Spring Bootプロジェクトを迅速かつ効率的に立ち上げるための「プロジェクト生成ツール」として機能します 18。Webブラウザからhttps://start.spring.io/にアクセスすることで、このツールを利用できます 7。 このツールを使用すると、プロジェクトの基本構造、必要な設定ファイル、そして選択した依存関係を含む完全なSpring Bootプロジェクトをわずか数分で生成することが可能です 18。 Spring Initializrの主な機能は以下の通りです。 * **プロジェクトメタデータの設定**: プロジェクトの識別情報として、Group ID(例: com.example)、Artifact ID(プロジェクト名)、Name、Descriptionなどを設定できます 18。 * **言語選択**: Java、Kotlin、Groovyといったプログラミング言語から選択できます 18。 * **Spring Bootバージョン選択**: アプリケーションに使用するSpring Bootのバージョン(最新版または特定の安定版)を選択できます 18。 * **ビルドツールの選択**: MavenまたはGradleという主要なビルドツールから選択できます 18。 * **依存関係の追加**: Spring Web(Webアプリケーション開発用)、Spring Data JPA(データベース連携用)、Spring Security(セキュリティ機能用)など、プロジェクトに必要な依存関係を簡単に選択して追加できます 17。これらの依存関係は、プロジェクト生成後に手動で追加することも可能です 17。 Spring Initializrの利用は、環境構築の簡素化、Spring公式が推奨するベストプラクティスの自動適用、学習曲線の緩和、開発時間の節約、そしてチーム内でのプロジェクト構造の一貫性確保といった多大な利点をもたらします 18。 プロジェクト生成の一般的な手順は以下の通りです。 1. WebブラウザでSpring Initializrのウェブサイトにアクセスします 17。 2. プロジェクトのメタデータ、ビルドツール、言語、Spring Bootバージョンなどの設定を行います 17。 3. プロジェクトに必要な依存関係を選択します 17。 4. 「Generate(生成する)」ボタンをクリックし、生成されたプロジェクトのZIPファイルをダウンロードして展開します 17。 5. 展開したプロジェクトを、IntelliJ IDEAやEclipseなどの統合開発環境(IDE)で開きます 20。 このことから、Spring Initializrは単なるコードジェネレーターではなく、Spring Bootの「ベストプラクティス」を自動的に適用する「学習支援ツール」でもあることが理解できます 18。単にコードを迅速に手に入れるだけでなく、Springの規約に準拠した「正しく構造化された」コードを手に入れることで、暗黙的に良いプラクティスを学ぶことができるのです。初心者は常にSpring Initializrから始めるべきであり、これはガイドとして機能し、一般的な初期設定のミスを防ぎ、適切に構造化されたプロジェクト内でビジネスロジックの記述にすぐに集中できるようにします。 ### **基本的なプロジェクト構造と主要ファイル** Spring Bootプロジェクトは、主に責務(役割)を明確に分離したレイヤー構造で構成されています 24。このレイヤー化は、モジュール性、テスト容易性、保守性を促進する設計パターンに基づいています。 生成されるプロジェクトの主要なディレクトリとファイルは以下の通りです。 * **src/main/java**: Javaのソースコードを配置する主要なディレクトリです 25。このディレクトリ以下には、パッケージ名に応じたサブディレクトリが作成され、各クラスが配置されます。 * **Application.java (または{ProjectName}Application.java)**: これはSpring Bootアプリケーションの起動クラスであり、mainメソッドを含んでいます 20。@SpringBootApplicationアノテーションが付与されており、アプリケーションのエントリポイントとして機能します。 * **controllerパッケージ**: HTTPリクエストを受け付け、その処理をサービス層に委譲するコントローラークラスを配置します 25。 * **serviceパッケージ**: アプリケーションのビジネスロジックを実装するサービスクラスを配置します 25。 * **repositoryパッケージ**: データベースへのアクセスを行うリポジトリクラスを配置します 25。 * **configパッケージ**: Spring Bootの設定クラス(例: Webアプリケーションの設定やデータベース接続設定など)を配置します 25。 * **entityパッケージ**: データベースのテーブルとマッピングされるエンティティクラスを配置します 24。 * **src/main/resources**: アプリケーションが使用するリソースファイルを配置するディレクトリです 25。 * **application.properties (または application.yml)**: Spring Bootアプリケーションの様々な設定を記述するための主要なファイルです 20。 * **staticディレクトリ**: HTML、CSS、JavaScriptなどの静的ファイルを配置します 25。 * **templatesディレクトリ**: Thymeleafなどのテンプレートエンジンを使用する場合に、動的なHTMLファイルを配置します 25。 * **build.gradle (または pom.xml)**: プロジェクトのビルド設定を記述するファイルです 20。Spring Initializrで選択したライブラリやそのバージョンが自動的に反映されます。 このプロジェクト構造のレイヤー化は、Spring Bootの「責務分離」と「保守性」を高めるための基盤となります 24。各レイヤーとその責務(例:Controllerはリクエスト処理、Serviceはビジネスロジック、Repositoryはデータアクセス)を理解することは、スケーラブルで保守性の高いWebアプリケーションを記述するために不可欠です。これにより、開発者は「何をどこに置くべきか」を理解し、大規模なチームでのコラボレーションを促進します。 ## **IV. Webアプリケーション開発の基礎** Spring Bootを用いたWebアプリケーション開発の核となるのは、RESTfulエンドポイントの作成とHTTPリクエストの処理方法の理解です。 ### **RESTfulエンドポイントの作成 (@RestController, @GetMappingなど)** Spring Bootでは、@RestControllerアノテーションを使用することで、RESTful APIのエンドポイントを処理するコントローラークラスを宣言します 1。このアノテーションは、そのクラス内のメソッドの戻り値が直接HTTPレスポンスボディとしてクライアントに返されることを示唆しています 26。 @RequestMappingアノテーションは、クラス全体または特定のメソッドに対して、ベースとなるURLパスを設定するために用いられます 27。これにより、関連するエンドポイントをグループ化し、コードの可読性を高めることができます。 HTTPメソッドに対応する専用のアノテーションを使用することで、ルーティングの定義が非常に簡潔になります 26。 * **@GetMapping**: HTTP GETリクエストを処理するメソッドに付与され、主にデータの取得に使用されます 1。 * **@PostMapping**: HTTP POSTリクエストを処理するメソッドに付与され、新しいデータ(リソース)の作成に使用されます 26。 * **@PutMapping**: HTTP PUTリクエストを処理するメソッドに付与され、既存のデータ(リソース)の完全な更新に使用されます 26。 * **@DeleteMapping**: HTTP DELETEリクエストを処理するメソッドに付与され、データ(リソース)の削除に使用されます 26。 例えば、非常にシンプルな「Hello, World\!」APIは、@RestControllerと@GetMappingを組み合わせることで、わずか数行のコードで実装できます 26。 Spring Bootのアノテーションは、RESTful APIの「宣言的プログラミング」を可能にし、コードの意図を明確にするという重要な役割を担っています 1。開発者は、ルーティング、リクエスト解析、レスポンスのシリアライズといった定型的なコードを明示的に書く代わりに、コードの目的と振る舞いを「宣言」できます。例えば、「これはRESTコントローラーである」や「このメソッドはこのパスへのGETリクエストを処理する」といった形で、コードの意図が直接的に表現されます。この宣言的なアプローチにより、Spring Bootのコードは特にRESTfulサービスにおいて非常に読みやすく、保守しやすくなります。HTTPリクエストがJavaメソッドにどのようにマッピングされるかを理解するための学習曲線は短縮されますが、各アノテーションのセマンティックな意味を理解することは依然として重要です。 以下に、HTTPメソッドとそれに対応するSpring Bootアノテーションの役割をまとめた表を示します。 | HTTPメソッド | Spring Bootアノテーション | 役割 | | :---- | :---- | :---- | | GET | @GetMapping | データを取得 | | POST | @PostMapping | データを作成 | | PUT | @PutMapping | データを更新 | | DELETE | @DeleteMapping | データを削除 | ### **HTTPリクエストの処理** Spring Bootでは、クライアントからのHTTPリクエストを効率的に処理するためのメカニズムが提供されています。 * **リクエストパラメータの受け取り**: * **パスパラメータ (@PathVariable)**: URLパスの一部として渡される動的な値を受け取るために使用されます。例えば、/products/{id}のようなURLから、{id}の部分に埋め込まれた商品IDの値を取得できます 26。 * **クエリパラメータ (@RequestParam)**: URLのクエリ文字列(例: /search?name=コーヒー)から値を受け取るために使用されます 26。 * **リクエストボディ (@RequestBody)**: POSTやPUTリクエストで送信されるJSONやXML形式のリクエストボディを、対応するJavaオブジェクトに自動的にマッピングするために使用されます 26。これにより、複雑なデータ構造も簡単に扱えます。 * **責務の分離**: コントローラーはHTTPリクエストの受け付けと初期処理を担当しますが、主要なビジネスロジックはサービス層に委譲するのが一般的な設計原則です 22。この責務の分離は、コードの可読性と保守性を向上させる上で極めて重要です 1。 * **依存性注入 (@Autowired)**: コントローラーやサービスが他のコンポーネント(例えば、サービスがリポジトリを、コントローラーがサービスを)必要とする場合、@Autowiredアノテーションを使用することで、Spring Frameworkが自動的にそれらの依存関係を注入します 1。これにより、コードの結合度が低く保たれ、コンポーネントの再利用性が高まります。 * **RESTful APIのベストプラクティス**: * **適切なHTTPステータスコードの使用**: APIの応答では、200 OK(成功)、201 Created(リソース作成成功)、404 Not Found(リソース見つからず)、500 Internal Server Error(サーバー内部エラー)など、適切なHTTPステータスコードを返すことが重要です 27。これにより、クライアントはリクエストの結果を明確に理解し、適切なエラーハンドリングを行うことができます。 * **入力バリデーション**: @ValidアノテーションとBean Validationフレームワークを組み合わせることで、クライアントから送信される入力データの整合性とセキュリティを確保できます 22。これにより、不正なデータがアプリケーションの内部ロジックやデータベースに到達するのを防ぎます。 * **例外処理**: @ControllerAdviceアノテーションなどを用いてグローバルなエラーハンドリングを実装することで、アプリケーション全体で一貫したエラーレスポンスを提供し、堅牢性を高めることができます 27。 MVC(Model-View-Controller)パターンは、Spring BootのWebアプリケーション開発における「責務分離」の核となる設計思想です 22。Controller、Service、Repositoryといったレイヤーは、それぞれが特定の役割を担い、互いに連携しながらも独立性を保ちます。Controllerはプレゼンテーション層とリクエスト処理を担当し、Serviceはビジネスロジックを、Repositoryはデータアクセスを担います。このレイヤー化されたアーキテクチャに従うことは、スケーラブルで保守性の高いWebアプリケーションを構築するために不可欠であり、各コンポーネントが単一の責任を持つことを保証し、アプリケーションのテスト、デバッグ、進化を容易にします。初心者はこのパターンを早期に習得することが推奨されます。 ## **V. 重要な設定とデータ永続化の基本** Spring Bootアプリケーションの動作を制御するためには、設定管理が不可欠です。また、ほとんどのWebアプリケーションはデータを扱うため、データベースとの連携、特にSpring Data JPAを使用したデータ永続化の基本を理解することが重要です。 ### **application.properties / application.ymlによる設定管理** Spring Bootアプリケーションでは、application.propertiesまたはapplication.ymlファイルがアプリケーションの設定値を定義するための主要なメカニズムとして機能します 12。これらのファイルは、アプリケーションのカスタマイズ、環境依存の設定の外部化、そして動的な設定変更を可能にする上で中心的な役割を果たします 29。 * **プロパティの記述方法**: 設定は、key=valueの形式で記述されます 29。application.ymlを使用する場合、YAMLフォーマットの特性を活かして階層構造を視覚的に表現できるため、複雑な設定もより読みやすく記述できます 29。 * **プロファイルによる環境別設定**: Spring Bootのプロファイル機能は、異なる環境(開発、テスト、本番など)に応じてアプリケーションの設定を柔軟に切り替えるための強力な仕組みです 2。application-{profile}.properties(または.yml)のような命名規則に従ってファイルを作成することで、特定のプロファイルがアクティブになったときにのみ適用される設定を定義できます。アクティブなプロファイルは、spring.profiles.activeプロパティをファイル内、環境変数、またはコマンドライン引数で指定することで切り替えられます 29。 * **外部化設定の優先順位**: Spring Bootは、設定値を複数の場所から読み込み、特定の優先順位に従って適用します 29。一般的に、コマンドライン引数で指定された設定が最も優先され、次いでJavaシステムプロパティ、OS環境変数、外部のapplication.propertiesファイル、そして最後にパッケージ内のapplication.propertiesファイルが適用されます 29。この優先順位を理解することは、意図しない設定の上書きを防ぐ上で重要です。 * **独自プロパティの定義**: Spring Bootが提供するデフォルトの設定項目以外に、アプリケーション固有の独自のプロパティを定義することも可能です 31。これには、@ConfigurationPropertiesアノテーションを付与したJava Beanクラスを作成し、application.propertiesにそのプロパティを定義する方法が推奨されます 31。このアプローチにより、設定値が型安全にJavaオブジェクトにバインドされ、IDEでのコード補完(spring-boot-configuration-processorを導入した場合)も利用できるようになり、開発時の利便性が向上します 31。 application.properties/application.ymlは、Spring Bootアプリケーションの「外部化された構成」を実現し、環境適応性と運用性を高めるための中心的な要素です 2。これは、コードを再コンパイルしたり再パッケージ化したりすることなく、外部ファイルや環境変数を変更するだけでアプリケーションの動作を変更できることを意味します。この柔軟性は、異なる環境(開発、テスト、本番)で、データベースの認証情報、サーバーポート、ロギングレベルなどを変えながら同じアプリケーションをデプロイするために不可欠です。開発者は、異なるコンテキストでアプリケーションの動作を効果的に管理するために、設定ソースの優先順位(コマンドライン \> 環境変数 \> プロパティファイル)を理解する必要があります。YAMLの階層構造は、複雑な設定において特に有利です 29。 以下に、application.propertiesでよく使われる一般的な設定項目をまとめた表を示します。 | カテゴリ | プロパティ | 説明 | | :---- | :---- | :---- | | サーバー設定 | server.port | アプリケーションがリッスンするポート番号 | | | server.servlet.context-path | アプリケーションのコンテキストパス | | データソース設定 | spring.datasource.url | データベース接続URL | | | spring.datasource.username | データベース接続ユーザー名 | | JPA設定 | spring.jpa.hibernate.ddl-auto | HibernateのDDL(データ定義言語)生成モード(例: update, create) | | | spring.jpa.show-sql | 実行されるSQLクエリをログに出力するかどうか | | ログ設定 | logging.level.root | ルートロガーのログレベル(例: INFO, DEBUG) | | | logging.file.name | ログファイルのパスと名前 | | プロファイル設定 | spring.profiles.active | 現在アクティブにするプロファイル名 | ### **Spring Data JPAによるデータベース連携の概要** Spring Bootは、Java Persistence API (JPA) の実装(主にHibernate)を容易に統合し、データアクセス層の開発を大幅に簡素化します 33。 * **Spring Data JPAの役割**: Spring Data JPAは、データベースとのやり取り(CRUD操作:作成、読み取り、更新、削除)を担うインターフェースである「Repository」を提供します 34。 * **SQL不要のデータ操作**: Spring Data JPAを使用すると、SQLを直接記述することなく、データの取得・保存・更新・削除といった操作を実行できます 34。具体的には、JpaRepository\<T, ID\>インターフェース(Tはエンティティの型、IDは主キーの型)を継承するだけで、save(), findAll(), findById(), delete()などの基本的なCRUD操作が自動的に実装されます 33。さらに、特定の命名規約に従ったメソッド名(例: findByNameAndAge(String name, int age))を定義するだけで、Spring Data JPAが対応するSQLクエリを自動生成して実行します 35。 * **必要な依存関係**: プロジェクトでSpring Data JPAとデータベース連携を使用するには、Mavenのpom.xmlまたはGradleのbuild.gradleにspring-boot-starter-data-jpaと、使用するデータベースに対応するドライバ(例: H2データベースの場合はh2、MySQLの場合はmysql-connector-java)を追加する必要があります 33。 * **application.propertiesでのデータベース設定**: データベースへの接続情報(spring.datasource.url, username, passwordなど)や、JPA/Hibernateの動作設定(spring.jpa.hibernate.ddl-auto、spring.jpa.show-sqlなど)は、application.propertiesファイルに記述します 33。 * **エンティティの定義**: データベーステーブルにマッピングされるJavaクラスを「エンティティ」と呼びます 22。これらのクラスは、@Entity、@Id(主キー)、@GeneratedValue(主キーの自動生成)、@Column(カラムマッピング)などのJPAアノテーションを使用して定義されます 22。 * **テストデータ**: 開発やテストの段階では、アプリケーション起動時にテストデータを自動登録する設定を行うことも可能です 34。また、H2データベースのような組み込みデータベースを使用している場合、H2 Consoleを有効にすることで、ブラウザからデータベースの内容を簡単に確認でき、デバッグに役立ちます 34。 Spring Data JPAは、データベース操作の「抽象化」と「自動化」を極限まで進め、開発者がビジネスロジックに集中できるようにする強力なツールです 2。これにより、データアクセスに関連する定型的なコードが大幅に削減され、開発者はアプリケーションの核となるビジネスロジックに集中できるようになります。しかし、SQLとリレーショナルデータベースの概念の基本的な理解は、効果的なエンティティを設計し、パフォーマンスを最適化したり、自動化されたメソッドでは不十分な場合に複雑なカスタムクエリを記述したりするために依然として必要です。 ## **VI. テストとデプロイメントの概要** Spring Bootアプリケーションの品質を保証し、本番環境で確実に動作させるためには、適切なテスト戦略とデプロイメント方法の理解が不可欠です。 ### **単体テストと統合テストの考え方** Spring Bootアプリケーションの品質と信頼性を確保するためには、体系的なテスト戦略が不可欠です 33。テストは大きく「単体テスト」と「統合テスト」に分けられます。 * **単体テスト (Unit Test)**: * このテストは、アプリケーションの個々のコンポーネント(例えば、特定のクラスやメソッド)を、他の依存関係から完全に隔離してテストすることに焦点を当てます 37。 * 外部の依存関係(データベース、外部サービスなど)は、Mockitoのようなライブラリを使用して「モック」(偽のオブジェクト)に置き換えられます 38。これにより、テストの実行が非常に高速になり、開発サイクルを短縮できます 38。 * JavaではJUnitがテストフレームワークとして広く使われ、Mockitoがモックオブジェクトの作成に利用されます 33。 * Spring Bootは、@WebMvcTestアノテーションを提供しており、これはWeb層のコントローラーのテストに特化しています 37。このアノテーションを使用すると、Web層に必要な最小限のBeanのみがロードされるため、非常に高速なWeb層の単体テストが可能です 37。 * **統合テスト (Integration Test)**: * 統合テストは、アプリケーション内の複数のコンポーネントやシステムが連携して正しく動作するかどうかを検証することを目的とします 37。 * このテストでは、データベースや外部サービスなど、実際の依存関係を含めて実行されるため、単体テストよりも実行に時間がかかる傾向があります 38。しかし、これにより、コンポーネント間の連携が実環境に近い形で検証されるため、より信頼性の高いテスト結果が得られます。 * Spring Bootでは、@SpringBootTestアノテーションが統合テストの主要なツールとして提供されています 33。このアノテーションは、Spring Bootアプリケーションのフルコンテキストをロードし、実際のアプリケーション環境に近い形でテストを実行します 33。webEnvironment \= WebEnvironment.RANDOM\_PORTを指定することで、テスト実行時にランダムなポートで組み込みサーバーを起動し、実際のHTTPリクエストをシミュレートしてテストすることも可能です 37。 * **使い分け**: プロジェクトの方針にもよりますが、一般的には、実行時間が短く依存度が低い単体テストを開発の初期段階で集中的に行い、個々のコンポーネントの品質を確保することが推奨されます 38。その後、開発が進むにつれて統合テストの比重を高め、アプリケーション全体の品質とコンポーネント間の連携を保証します 38。継続的インテグレーション(CI)環境では、単体テストと統合テストの両方を自動的に実行することが望ましいとされています 38。 ### **JAR/WARパッケージングと実行** Spring Bootアプリケーションは、実行可能なファイルとしてパッケージ化され、デプロイされます 39。主なパッケージング形式はJARファイルとWARファイルの2種類です。 * **JARファイル**: * Spring Bootのデフォルトであり、推奨されるパッケージング形式です 39。 * アプリケーションのコード、依存ライブラリ、そして組み込みサーバー(Tomcatなど)の全てが、単一の「fat JAR」ファイルとしてパッケージ化されます 1。 * この形式の最大の利点は、外部のアプリケーションサーバーが不要であることです 1。Javaがインストールされた環境であれば、java \-jar your-application.jarというコマンド一つでアプリケーションを直接起動し、実行できます 12。これにより、デプロイメントプロセスが大幅に簡素化され、CI/CDパイプラインとの相性が非常に良くなります 2。 * デプロイメントは、ビルドされたJARファイルを本番環境の任意のディレクトリに配置し、java \-jarコマンドで実行するだけで完了します 39。 * **WARファイル**: * 従来のJava EEアプリケーションで一般的に使用されてきたパッケージング形式です 39。 * WARファイルは、TomcatやJettyなどの外部のサーブレットコンテナ(アプリケーションサーバー)にデプロイすることを前提としています 39。 * Spring BootアプリケーションをWARとしてパッケージ化するには、pom.xmlの\<packaging\>要素をwarに設定し、アプリケーションのメインクラスをSpringBootServletInitializerを継承するように変更する必要があります 39。また、組み込みTomcatなどの依存関係をprovidedスコープに設定し、WARファイルに含まれないようにすることが一般的です 39。 * デプロイメントは、ビルドされたWARファイルをTomcatのwebappsディレクトリのような指定された場所に配置することで行われます 39。Tomcatは、このディレクトリに配置されたWARファイルを自動的に検出し、デプロイします 39。 JARファイルは、その手軽さと自己完結性から、特にマイクロサービスやクラウドネイティブアプリケーションにおいて主流のデプロイメント形式となっています。一方、WARファイルは、既存のインフラストラクチャや特定の要件(例えば、複数のアプリケーションを単一のTomcatインスタンスで管理したい場合)がある場合に選択されることがあります。 ## **結論** Spring Bootは、JavaでのWebアプリケーション開発を劇的に簡素化し、迅速化するための革新的なフレームワークです。その根幹には、Spring Frameworkの強力なIoC/DIコンテナがあり、Spring Bootはこの基盤の上に「自動設定」「組み込みサーバー」「スターター依存関係」といった機能を追加することで、開発体験を大きく向上させています。 初心者にとって、Spring BootはJavaでのWeb開発への参入障壁を大幅に下げます。複雑なXML設定や手動での依存関係管理から解放され、Spring Initializrのようなツールを活用することで、数分でプロジェクトのひな形を作成し、すぐにビジネスロジックの記述に集中できます。これは、単にコードを速く書けるようになるだけでなく、Springが推奨するベストプラクティスに沿ったプロジェクト構造を自然と学ぶ機会を提供します。 Webアプリケーション開発においては、@RestControllerや@GetMappingなどの直感的なアノテーション群により、RESTfulエンドポイントの定義とHTTPリクエストの処理が非常に宣言的に行えます。これにより、コードの意図が明確になり、可読性と保守性が向上します。また、Controller、Service、Repositoryといった明確なレイヤー構造に従うことで、アプリケーションの責務が分離され、テストや将来的な拡張が容易になります。 設定管理の面では、application.propertiesやapplication.ymlファイルを通じて、アプリケーションの動作を柔軟に制御できます。特に、プロファイル機能や外部化設定の概念を理解することは、開発、テスト、本番といった異なる環境間でアプリケーションをスムーズにデプロイし、運用するために不可欠です。 データ永続化に関しては、Spring Data JPAが提供するRepositoryインターフェースを利用することで、SQLを直接記述することなくデータベースのCRUD操作を行えます。これは、データアクセス層の開発を大幅に簡素化し、開発者がビジネスロジックに集中できる時間を増やします。 最後に、テストとデプロイメントの理解は、高品質なアプリケーションを市場に投入するために重要です。単体テストと統合テストを適切に使い分け、CI/CDパイプラインに組み込むことで、開発プロセス全体の効率と信頼性を高めることができます。Spring Bootのデフォルトである実行可能なJARファイルは、デプロイメントを極めて簡素化し、現代のクラウドネイティブな開発パラダイムに完全に適合します。 総じて、Spring Bootは単なるフレームワークではなく、現代のJavaアプリケーション開発における生産性、保守性、そしてデプロイメントの効率を飛躍的に向上させるための包括的なエコシステムです。初心者がJavaでWebアプリケーション開発を始める際には、Spring Bootから学習を開始し、その利便性を享受しながら、徐々にSpring Frameworkのより深い概念へと理解を広げていくことが、最も効果的なアプローチであると結論付けられます。 #### **引用文献** 1. アプリケーション開発で使用した Spring Boot の紹介 – TechHarmony, 5月 31, 2025にアクセス、 [https://blog.usize-tech.com/java-springboot/](https://blog.usize-tech.com/java-springboot/) 2. SpringBootとは?メリットやデメリット、具体的な案件例も合わせ ..., 5月 31, 2025にアクセス、 [https://engineer-style.jp/articles/9716](https://engineer-style.jp/articles/9716) 3. Difference between Spring and Spring Boot | GeeksforGeeks, 5月 31, 2025にアクセス、 [https://www.geeksforgeeks.org/difference-between-spring-and-spring-boot/](https://www.geeksforgeeks.org/difference-between-spring-and-spring-boot/) 4. Java Spring Boot とは \- Spring Boot の概要 | Microsoft Azure, 5月 31, 2025にアクセス、 [https://azure.microsoft.com/ja-jp/resources/cloud-computing-dictionary/what-is-java-spring-boot](https://azure.microsoft.com/ja-jp/resources/cloud-computing-dictionary/what-is-java-spring-boot) 5. JAVA / Spring と Spring Boot の違いとは? \#Java \- Qiita, 5月 31, 2025にアクセス、 [https://qiita.com/e-tak/items/475e956103b1fdf05775](https://qiita.com/e-tak/items/475e956103b1fdf05775) 6. 【初学者向け】Spring Framework・Spring Bootの特徴と違い ..., 5月 31, 2025にアクセス、 [https://ramble.impl.co.jp/5388/](https://ramble.impl.co.jp/5388/) 7. Why Spring \- Spring, 5月 31, 2025にアクセス、 [https://spring.io/why-spring/](https://spring.io/why-spring/) 8. Spring – Understanding Inversion of Control with Example ..., 5月 31, 2025にアクセス、 [https://www.geeksforgeeks.org/spring-understanding-inversion-of-control-with-example/](https://www.geeksforgeeks.org/spring-understanding-inversion-of-control-with-example/) 9. Spring Tutorial | GeeksforGeeks, 5月 31, 2025にアクセス、 [https://www.geeksforgeeks.org/spring/](https://www.geeksforgeeks.org/spring/) 10. Spring Framework完全ガイド:基礎から実践まで学ぶ7つのステップ ..., 5月 31, 2025にアクセス、 [https://dexall.co.jp/articles/?p=310](https://dexall.co.jp/articles/?p=310) 11. EnableAutoConfigurationの使い方と引数を徹底解説!【初心者向け】 | @あの, 5月 31, 2025にアクセス、 [https://annotations-lab.com/enableautoconfiguration%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9%E3%81%A8%E5%BC%95%E6%95%B0%E3%82%92%E5%BE%B9%E5%BA%95%E8%A7%A3%E8%AA%AC%EF%BC%81%E3%80%90%E5%88%9D%E5%BF%83%E8%80%85%E5%90%91%E3%81%91/](https://annotations-lab.com/enableautoconfiguration%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9%E3%81%A8%E5%BC%95%E6%95%B0%E3%82%92%E5%BE%B9%E5%BA%95%E8%A7%A3%E8%AA%AC%EF%BC%81%E3%80%90%E5%88%9D%E5%BF%83%E8%80%85%E5%90%91%E3%81%91/) 12. Spring Boot入門:基礎から実践まで \#Java \- Qiita, 5月 31, 2025にアクセス、 [https://qiita.com/automation2025/items/5cd5bc47ec3e9fe21adf](https://qiita.com/automation2025/items/5cd5bc47ec3e9fe21adf) 13. ブートストラップの自動設定とは何か?(Spring BootのAuto ..., 5月 31, 2025にアクセス、 [https://saycon.co.jp/archives/neta/%E3%83%96%E3%83%BC%E3%83%88%E3%82%B9%E3%83%88%E3%83%A9%E3%83%83%E3%83%97%E3%81%AE%E8%87%AA%E5%8B%95%E8%A8%AD%E5%AE%9A%E3%81%A8%E3%81%AF%E4%BD%95%E3%81%8B%EF%BC%9F%EF%BC%88spring-boot%E3%81%AEauto-conf](https://saycon.co.jp/archives/neta/%E3%83%96%E3%83%BC%E3%83%88%E3%82%B9%E3%83%88%E3%83%A9%E3%83%83%E3%83%97%E3%81%AE%E8%87%AA%E5%8B%95%E8%A8%AD%E5%AE%9A%E3%81%A8%E3%81%AF%E4%BD%95%E3%81%8B%EF%BC%9F%EF%BC%88spring-boot%E3%81%AEauto-conf) 14. Spring Bootの基本的な使い方 \#Java \- Qiita, 5月 31, 2025にアクセス、 [https://qiita.com/y-t0910/items/b13ded433361a968165d](https://qiita.com/y-t0910/items/b13ded433361a968165d) 15. Spring入門ガイド実施 第1回 Restful WEBサービスの構築 ... \- Qiita, 5月 31, 2025にアクセス、 [https://qiita.com/4U5zo/items/d0ec592f617055aa918a](https://qiita.com/4U5zo/items/d0ec592f617055aa918a) 16. ビルドシステム :: Spring Boot \- リファレンスドキュメント, 5月 31, 2025にアクセス、 [https://spring.pleiades.io/spring-boot/reference/using/build-systems.html](https://spring.pleiades.io/spring-boot/reference/using/build-systems.html) 17. 【SpringBoot入門編】徹底攻略!基本的な使い方とステップバイ ..., 5月 31, 2025にアクセス、 [https://be-engineer.jp/programming/886/](https://be-engineer.jp/programming/886/) 18. 【2024年最新版】Spring Boot Initializrマスターガイド:初心者から ..., 5月 31, 2025にアクセス、 [https://dexall.co.jp/articles/?p=445](https://dexall.co.jp/articles/?p=445) 19. Spring bootの構築ツール(Spring Initializr) \#Java \- Qiita, 5月 31, 2025にアクセス、 [https://qiita.com/lz910201/items/ee5546a614ed3ccaaa23](https://qiita.com/lz910201/items/ee5546a614ed3ccaaa23) 20. 【初心者】Spring Boot で新規プロジェクトを作成する基本手順 ..., 5月 31, 2025にアクセス、 [https://qiita.com/t-yama-3/items/969825d5c1bc4a16866d](https://qiita.com/t-yama-3/items/969825d5c1bc4a16866d) 21. Java | Eclipse | Spring Bootプロジェクトのひな型作成方法 \- Zenn, 5月 31, 2025にアクセス、 [https://zenn.dev/v6qh2bxj/articles/5e2d7256fc2b5a](https://zenn.dev/v6qh2bxj/articles/5e2d7256fc2b5a) 22. Spring Boot を使用して REST API を作成する \#Java \- Qiita, 5月 31, 2025にアクセス、 [https://qiita.com/ryu0114h/items/b0c82af9d8a05fdbf1e0](https://qiita.com/ryu0114h/items/b0c82af9d8a05fdbf1e0) 23. 「Java Spring Boot+Gradle」のプロジェクトをSpring Initializrで ..., 5月 31, 2025にアクセス、 [https://jp-terrace.com/blog/2023/07/24/java-spring-boot-gradle-create/](https://jp-terrace.com/blog/2023/07/24/java-spring-boot-gradle-create/) 24. 【Spring Boot】ディレクトリ構成の実例を紹介します|北海道札幌 ..., 5月 31, 2025にアクセス、 [https://ma-vericks.com/blog/spring-boot-directory/](https://ma-vericks.com/blog/spring-boot-directory/) 25. Spring Bootのアーキテクチャと一般的なディレクトリ構成 \- ブログ ..., 5月 31, 2025にアクセス、 [https://smallit.co.jp/blog/a2517/](https://smallit.co.jp/blog/a2517/) 26. ガイド:Spring BootでGET・POST送信の実装 \- Apidog, 5月 31, 2025にアクセス、 [https://apidog.com/jp/blog/spring-boot-get-post/](https://apidog.com/jp/blog/spring-boot-get-post/) 27. 【2024年最新版】Spring BootでRESTful APIを作る方法:初心者 ..., 5月 31, 2025にアクセス、 [https://dexall.co.jp/articles/?p=393](https://dexall.co.jp/articles/?p=393) 28. Spring Bootのルーティング完全ガイド!初心者でもわかるHTTP ..., 5月 31, 2025にアクセス、 [https://saycon.co.jp/archives/neta/spring-boot%E3%81%AE%E3%83%AB%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E5%AE%8C%E5%85%A8%E3%82%AC%E3%82%A4%E3%83%89%EF%BC%81%E5%88%9D%E5%BF%83%E8%80%85%E3%81%A7%E3%82%82%E3%82%8F%E3%81%8B%E3%82%8B](https://saycon.co.jp/archives/neta/spring-boot%E3%81%AE%E3%83%AB%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E5%AE%8C%E5%85%A8%E3%82%AC%E3%82%A4%E3%83%89%EF%BC%81%E5%88%9D%E5%BF%83%E8%80%85%E3%81%A7%E3%82%82%E3%82%8F%E3%81%8B%E3%82%8B) 29. 【2024年最新】Spring Bootのapplication.propertiesマスターガイド ..., 5月 31, 2025にアクセス、 [https://dexall.co.jp/articles/?p=257](https://dexall.co.jp/articles/?p=257) 30. Spring Bootの外部設定値の扱い方を理解する \#Java \- Qiita, 5月 31, 2025にアクセス、 [https://qiita.com/kazuki43zoo/items/0ce92fce6d6f3b7bf8eb](https://qiita.com/kazuki43zoo/items/0ce92fce6d6f3b7bf8eb) 31. Spring Bootでapplication.properties(yml)に独自の設定値を定義する ..., 5月 31, 2025にアクセス、 [https://qiita.com/NagaokaKenichi/items/4579849157cbe793c3d0](https://qiita.com/NagaokaKenichi/items/4579849157cbe793c3d0) 32. Spring Bootで使われる基本的なアノーテーションと設定の仕組み (1 ..., 5月 31, 2025にアクセス、 [https://codezine.jp/article/detail/11509](https://codezine.jp/article/detail/11509) 33. 【2024年最新】Spring Boot with JPA完全ガイド:初心者から ..., 5月 31, 2025にアクセス、 [https://dexall.co.jp/articles/?p=355](https://dexall.co.jp/articles/?p=355) 34. Spring BootでのEntity \+ Repository実装&JPAによるDB操作まとめ, 5月 31, 2025にアクセス、 [https://zenn.dev/hiruma\_devlog/articles/d67afc31fd045c](https://zenn.dev/hiruma_devlog/articles/d67afc31fd045c) 35. SpringBoot/JPA \- KobeSpiral2021, 5月 31, 2025にアクセス、 [https://cs27.org/wiki/kobespiral2021/?SpringBoot/JPA](https://cs27.org/wiki/kobespiral2021/?SpringBoot/JPA) 36. Spring BootでH2DBを組み込みモード(永続化あり)で利用する ..., 5月 31, 2025にアクセス、 [https://www.tenohira.xyz/tech/spring-h2db-setting/](https://www.tenohira.xyz/tech/spring-h2db-setting/) 37. SpringBoot+Junit5でWebAPIの単体テストと結合テスト、4パターン ..., 5月 31, 2025にアクセス、 [https://qiita.com/tmtmra/items/a80f12c1f8b150ba4806](https://qiita.com/tmtmra/items/a80f12c1f8b150ba4806) 38. Spring Bootにおける単体テストと結合テストの違い \- Zenn, 5月 31, 2025にアクセス、 [https://zenn.dev/choimake/articles/4636859e643856](https://zenn.dev/choimake/articles/4636859e643856) 39. 【Maven編】Spring Bootのビルドとデプロイ方法 | こへいブログ, 5月 31, 2025にアクセス、 [https://kohei.life/spring-boot-build-deploy/](https://kohei.life/spring-boot-build-deploy/) 40. Changing Spring Boot packaging to WAR and deploying to Tomcat ..., 5月 31, 2025にアクセス、 [https://www.youtube.com/watch?v=A956c\_UlgDk\&pp=0gcJCdgAo7VqN5tD](https://www.youtube.com/watch?v=A956c_UlgDk&pp=0gcJCdgAo7VqN5tD)

今村博明

今村博明

改革推進室