この記事では、SpringとSpring Bootの違いを「何が楽になるのか」「何を自分で設定するのか」の観点で整理し、初学者が迷わず選べるように分かりやすく解説します。

Springとは

Springは、Javaでアプリケーションを作るときの「土台(フレームワーク)」です。特に有名なのが、DI(依存性注入)IoC(制御の反転) を中心にした設計で、クラス同士の結びつきをゆるくして、テストしやすく・変更に強いコードを書きやすくしてくれます。

Springという言葉は少し広くて、実際には「Spring Framework」を指すことが多いです。Spring Frameworkの中には、Web開発向けのSpring MVC、データアクセス向けのSpring JDBC、トランザクション管理など、たくさんの機能が入っています。

Spring Bootとは

Spring Bootは、Springを使った開発を「すぐ始められるようにする仕組み(拡張)」です。

Spring Frameworkは自由度が高い反面、最初にやること(設定や依存関係の調整)が多くなりがちです。そこでSpring Bootは、よくある構成をあらかじめ用意して、面倒な初期設定を大幅に減らします。

Spring Bootでよく出てくるキーワードは次の3つです。

  • Auto Configuration(自動設定): 依存関係を見て「たぶんこうしたいよね?」を自動で設定する
  • Starter(スターター): 必要なライブラリ一式をまとめて入れられる
  • Embedded Server(組み込みサーバ): Tomcatなどを内蔵でき、アプリ単体で起動できる

ざっくり結論

一言でいうと、こう捉えるのが一番スッキリします。

  • Spring:高機能で自由度が高い「フレームワーク本体」
  • Spring Boot:Spring開発を簡単にする「便利パッケージ(起動・設定・依存関係を整える)」

「Spring BootはSpringの別物」ではなく、「Springの上に乗って開発体験を良くしたもの」と考えるのが正解です。

何がどう違うのかを具体例で理解する

まずは違いを一覧で押さえましょう。細かい説明はあとで読むとして、この表だけ眺めても全体像がつかめるようにしています。

観点Spring(Spring Framework)Spring Boot
位置づけDIやMVCなどを提供するフレームワーク本体Spring Frameworkの上に乗る開発支援の仕組み
設定Java ConfigやXMLで自分で組み立てるAuto Configurationが依存関係を見て自動で設定する
依存関係ライブラリを個別に選び、バージョンも自分で合わせるStarterでまとめて追加し、バージョンはBootが管理する
起動方法外部のTomcatなどにWARをデプロイする構成が多い組み込みサーバで java -jar から単体起動できる
設定の外部化仕組みを自分で用意するapplication.properties や環境変数で最初から差し替えられる
向いている場面既存構成の保守、内部の仕組みを深く学びたいとき新規開発、短期間の立ち上げ、学習の入口

なお、この記事の前提はSpring Boot 3.x以降(Spring Framework 6.x以降)とJava 17以上です。Spring Boot 3.0からJava 17が必須になり、2025年11月に公開されたSpring Boot 4.0でもこの要件は変わりません。これより古い組み合わせで動かしている場合は、あとで紹介する移行の話も合わせて読んでみてください。

この表を踏まえて、ひとつずつ具体例で確認していきましょう。

違いが分かりやすいポイントを、初心者がつまずきやすい順に並べます。

設定の量が違う

Bootなしの構成でSpring MVCを動かすには、たとえば次のように DispatcherServlet を登録する初期化クラスを自分で書きます。

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
  @Override
  protected Class<?>[] getRootConfigClasses() {
    return null;
  }

  @Override
  protected Class<?>[] getServletConfigClasses() {
    return new Class<?>[] { WebConfig.class };
  }

  @Override
  protected String[] getServletMappings() {
    return new String[] { "/" };
  }
}

これに加えて、@Configuration@EnableWebMvc を付けた WebConfig クラス、JSON変換やビューの設定、デプロイ先となる外部Tomcatの準備も必要になります。動くまでに触るファイルが多いので、初学者はここで手が止まりがちですよね。

Spring FrameworkだけでWebアプリを作る場合、環境によっては設定が増えます(XMLやJava Config、サーバ設定など)。

Spring Bootでは、依存関係(Starter)を追加して、最低限の設定だけ書けば動くことが多いです。たとえばWebアプリなら、基本はこれだけで開始できます。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {
  public static void main(String[] args) {
    SpringApplication.run(DemoApplication.class, args);
  }
}

@SpringBootApplication は実は便利な詰め合わせで、ざっくり言うと「コンポーネントスキャンして、Spring Bootの自動設定も有効にしてね」という合図です。

依存関係の入れ方が違う

Spring Bootは「スターター」を使うのが基本です。たとえばWeb APIを作りたいなら、Mavenだとこうです。

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>

この1つで、Spring MVCや組み込みTomcat、JSON変換など、Web APIにありがちな構成がまとまって入ります。 Spring(Bootなし)だと、必要なライブラリを個別に選んでバージョンを合わせる場面が増えがちです。

起動方法が違う

Spring Bootは組み込みサーバのおかげで「Javaアプリとして起動」できます。

  • ./mvnw spring-boot:run
  • あるいは java -jar xxx.jar

一方で、Spring MVCを従来の形で使う場合は、外部のアプリケーションサーバ(Tomcatなど)にWARをデプロイする構成も多く、環境準備が少し増えます。

なお、Spring Bootにしてから「起動が遅い」と感じたときの原因の見つけ方と短縮手順は、Spring Bootアプリの起動を高速化する方法 - CDS・AOT・遅延初期化で短縮 で解説しています。

よくある誤解

Spring Bootを使うとSpringを学ばなくていい?

いいえ。Spring Bootは「Springを隠してくれる」面もありますが、実務では結局Springの基本(DI、トランザクション、Bean、設定の考え方)を理解しているほど強いです。

Spring Bootは“楽”にしてくれますが、“不要”にするわけではありません。

Spring Bootは魔法で全部やってくれる?

自動設定は便利ですが、完全にブラックボックスにするとハマりやすいです。 たとえば「どの設定がどこから効いているか」を追えるように、application.properties / application.yml の役割を少しずつ覚えるのがおすすめです。

server.port=8081
spring.application.name=demo-app

このように「アプリの外から設定できる」設計になっているのもSpring Bootの使いやすさの理由です。

初心者はどっちから始めるべき?

基本は Spring Bootから が学びやすいです。

  • すぐ動くので成功体験を作りやすい
  • Web APIやDB接続など、現場でよく使う形に早く触れられる
  • 依存関係や起動が簡単で、学習の障害が少ない

そのうえで、慣れてきたら「自動設定が何をしているのか」を少しずつ理解していくと、Spring全体の理解が深まります。

実務での選び方(案件別)

現場では「どちらを学ぶか」ではなく「どの構成で開発を始めるか」を決めることが多いです。
迷ったときは、次の基準で判断するとブレにくくなります。

ケース推奨理由
新規で業務APIを短期間で立ち上げるSpring Boot初期構築と運用基盤を最短で作れる
小さな検証・PoCを素早く回すSpring Boot起動までの手数が少なく検証速度が高い
既存のレガシーSpring構成を保守するSpring(既存構成)既存設計との整合を優先した方が安全
フレームワーク内部を深く理解したい学習目的Spring + Spring Boot使いながら基礎概念も追える

実際には「Spring Bootを選びつつ、Springの基礎理解を深める」が最も再現性の高い進め方です。

移行時に先に決めるべきポイント

Spring(Bootなし)からSpring Bootへ移行する場合、次を先に決めると失敗が減ります。

  • JavaバージョンとSpring Bootバージョンを固定する
  • 設定ファイルの管理方針(application.yml、環境変数、Secret)を統一する
  • ログ・監視(Actuator、メトリクス)を初期段階で入れる
  • テスト戦略(単体、結合、起動テスト)を先に決める
  • セキュリティ初期設定(認証、CORS、CSRF)をテンプレート化する

「起動できた後」に決めるのではなく、プロジェクト開始時に決める方が運用コストを抑えられます。

バージョン固定で特に注意したいのが、Spring Boot 3.x以降でJava 17が必須になる点と javax から jakarta へのパッケージ置き換えです。具体的な手順は Spring Boot 2.x から 3.x への移行ガイド - Java 17必須・チェックリスト付き にまとめています。また、監視の最初の一歩になるActuatorの導入と公開設定は はじめてのSpring Boot Actuator入門 で解説しています。

よくある判断ミス

Spring Bootを使えば設計を考えなくていいと思う

Spring Bootは初期設定を減らしますが、設計判断そのものは減りません。
依存関係、例外設計、トランザクション境界、ログ方針は別途設計が必要です。

自動設定を無効化しすぎる

「理解のため」に自動設定を全部オフにすると、逆に保守性が落ちる場合があります。
まずはデフォルトを活用し、必要な部分だけ明示的に調整する方が安全です。

まとめ

  • SpringはJava開発のための土台となるフレームワーク
  • Spring BootはSpringを使った開発を素早く始められるようにする仕組み
  • 違いは「設定」「依存関係」「起動」の手軽さに出る
  • 初心者はSpring Bootから入ると学びやすい

次に学ぶなら、Spring Bootで簡単なREST APIを作って、DIや@RestController@Serviceの役割に慣れるのがおすすめです。

DIの理解をもう一歩進めたいときは、Beanの名前がどう決まり、同じ型のBeanが複数あるときにどれが選ばれるのかを整理した Springの@Bean「名前」入門 - いつ付けるべき?どう効く?優先度は? も参考にしてください。