カテゴリ: Spring 更新日: 2026/01/09
PR
独学でJavaを学んでいる方向け
「実務レベルに到達できるか不安」「1人だと詰まることが多い」場合は、 実践重視で学べる環境を一度確認しておくのも一つの手です。
EBAエデュケーション |学習内容・サポートを見る

Spring MVCの静的リソース配信を完全理解!/staticや/publicの使い方とキャッシュ設定の基本

Spring MVCの静的リソース配信:/static,/public の配置とキャッシュ
Spring MVCの静的リソース配信:/static,/public の配置とキャッシュ

先生と生徒の会話形式で理解しよう

生徒

「Spring Bootで画像ファイルやCSSファイルを表示させたいときって、どこに置けばいいんですか?」

先生

「それなら、/static/publicといったディレクトリに配置するのが基本です。Spring MVCは静的リソースの配信にも対応しているんですよ。」

生徒

「そうなんですね!でも、どうして/staticとかに置くだけで表示されるんですか?設定しないとだめだと思ってました。」

先生

「それにはSpring MVCの静的リソース解決の仕組みが関係しています。順を追って説明しましょう。」

1. Spring Bootにおける静的リソースの自動配信機能

1. Spring Bootにおける静的リソースの自動配信機能
1. Spring Bootにおける静的リソースの自動配信機能

Spring Bootでは、src/main/resourcesディレクトリ内にある特定のパスに配置されたファイルは、自動的にWebブラウザからアクセスできるようになります。たとえば次のようなディレクトリが対象です。

  • /static
  • /public
  • /resources
  • /META-INF/resources

たとえば、次のような構成でlogo.pngという画像ファイルを配置したとします。


src/
└── main/
    └── resources/
        └── static/
            └── images/
                └── logo.png

この場合、ブラウザからは次のようなURLでアクセスできます。


http://localhost:8080/images/logo.png

2. /staticと/publicの違いとは?

2. /staticと/publicの違いとは?
2. /staticと/publicの違いとは?

/static/publicも静的リソースを配置するためのディレクトリですが、優先順位が異なります。Spring Bootはリクエストに対して以下の順でリソースを探します。

  1. /META-INF/resources
  2. /resources
  3. /static
  4. /public

つまり、同じファイル名のリソースが複数の場所に存在する場合、/staticのものが/publicより優先されます。

PR

将来を見据えて、+αのスキルを身につけたい方へ

JavaやLinuxを学んでいても、「このままで市場価値は上がるのか」 「キャリアの選択肢を広げたい」と感じる方は少なくありません。

AIを学ぶならアイデミープレミアム

3. HTMLやCSS、JavaScriptの配置例

3. HTMLやCSS、JavaScriptの配置例
3. HTMLやCSS、JavaScriptの配置例

Spring MVCの静的リソース処理は、HTMLテンプレートで使うCSSやJavaScriptファイルとも相性が良く、th:hrefなどを使ってテンプレートと連携できます。


<link th:href="@{/css/style.css}" rel="stylesheet" />
<script th:src="@{/js/app.js}"></script>

ファイルの物理的な配置は以下のようになります。


src/
└── main/
    └── resources/
        └── static/
            ├── css/
            │   └── style.css
            └── js/
                └── app.js

4. キャッシュ制御の基本:キャッシュを無効化・制御する方法

4. キャッシュ制御の基本:キャッシュを無効化・制御する方法
4. キャッシュ制御の基本:キャッシュを無効化・制御する方法

静的リソースは通常ブラウザによってキャッシュされますが、開発中などでキャッシュを無効にしたい場合もあります。Spring BootではWebMvcConfigurerを使ってキャッシュ設定をカスタマイズできます。


@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**")
            .addResourceLocations("classpath:/static/")
            .setCachePeriod(0);
    }
}

setCachePeriod(0)とすることで、ブラウザ側のキャッシュが無効になり、毎回ファイルが読み込まれるようになります。

5. 実際の動作確認とHTTPヘッダーの確認

5. 実際の動作確認とHTTPヘッダーの確認
5. 実際の動作確認とHTTPヘッダーの確認

ブラウザの開発者ツール(F12)を開き、ネットワークタブを確認すると、静的リソースに対するレスポンスにキャッシュ関連のHTTPヘッダーが含まれていることがわかります。

キャッシュ無効設定が正しく行われていれば、以下のようなHTTPヘッダーが確認できます。


Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0

6. アクセスできないときの原因と対処法

6. アクセスできないときの原因と対処法
6. アクセスできないときの原因と対処法

静的リソースにアクセスできないときの主な原因は以下の通りです。

  • ファイルの配置場所が誤っている
  • URLパスの指定ミス(例:/static/imagesと書くのは誤り)
  • セキュリティ設定(Spring Security)でブロックされている

特にSpring Securityを導入している場合、静的リソースにも認証が必要になってしまうことがあります。その場合は、SecurityFilterChainの設定で静的ファイルを除外する必要があります。


@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    http
        .authorizeHttpRequests(auth -> auth
            .requestMatchers("/css/**", "/js/**", "/images/**").permitAll()
            .anyRequest().authenticated()
        );
    return http.build();
}

7. CDNやバージョニングとの併用

7. CDNやバージョニングとの併用
7. CDNやバージョニングとの併用

本番環境では、静的リソースのキャッシュを活かすために、ファイル名にバージョン番号を付ける手法がよく使われます。たとえば、次のように記述します。


<link href="/css/style-v1.2.3.css" rel="stylesheet" />

これにより、ブラウザはファイル名が変わったときだけキャッシュを無効にし、新しいファイルを取得します。また、CDNを使えばグローバルな配信速度向上にもつながります。

8. Spring MVCにおける静的リソースの使いどころ

8. Spring MVCにおける静的リソースの使いどころ
8. Spring MVCにおける静的リソースの使いどころ

Spring BootやSpring MVCでは、静的リソースの取り扱いも非常にシンプルです。開発初期は/staticにファイルを置くだけでよく、細かいキャッシュ制御が必要になればWebMvcConfigurerを使って対応できます。

さらに、Spring SecurityやCDNとも連携させることで、安全かつ効率的なWebアプリケーションの配信が実現できます。

まとめ

まとめ
まとめ

Spring MVCの静的リソース配信を全体から振り返る

ここまでの記事では、Spring MVCおよびSpring Bootにおける静的リソース配信の仕組みについて、基礎から実務で役立つポイントまで段階的に学んできました。 画像ファイルやCSS、JavaScriptといった静的リソースは、Webアプリケーションにおいて欠かせない存在です。 画面デザインや操作性を支える重要な要素でありながら、仕組みを正しく理解していないと「表示されない」「キャッシュが効きすぎる」「本番と開発で挙動が違う」といったトラブルの原因にもなります。

Spring Bootでは、src/main/resources配下の/static/publicなどの決められたディレクトリにファイルを配置するだけで、 特別な設定を行わなくてもブラウザから直接アクセスできるようになります。 この自動配信機能は、初心者にとって非常に扱いやすく、HTMLやテンプレートと静的ファイルをスムーズに連携させる大きな助けになります。

ディレクトリ構成と優先順位の理解が安定動作の鍵

記事の中で解説したように、Spring MVCは静的リソースを探す際に決められた優先順位でディレクトリを確認します。 /static/publicは似た役割を持ちますが、同名ファイルが存在した場合の優先度が異なります。 この仕組みを知らずにファイルを配置すると、意図しないリソースが表示されてしまうこともあります。

そのため、実務では「どの種類のファイルをどのディレクトリに置くのか」をあらかじめ決めておくことが重要です。 CSSやJavaScript、画像といったリソースを用途ごとに整理して配置することで、保守性の高いプロジェクト構成を維持できます。

キャッシュ制御と開発・本番環境の使い分け

静的リソース配信で特に重要なのがキャッシュの扱いです。 ブラウザは一度取得したCSSや画像をキャッシュとして保存するため、ページの表示速度は向上しますが、 開発中には「修正したはずなのに反映されない」という状況が起こりがちです。

Spring MVCではWebMvcConfigurerを使うことで、キャッシュ期間を柔軟に制御できます。 開発環境ではキャッシュを無効にし、本番環境ではキャッシュを活用する、といった切り替えを行うことで、 作業効率とユーザー体験の両立が可能になります。

まとめとしての簡単な設定サンプル

記事全体の内容を踏まえた、静的リソース配信とキャッシュ制御の基本形を改めて確認してみましょう。


@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**")
            .addResourceLocations("classpath:/static/")
            .setCachePeriod(0);
    }
}

この設定により、/static配下の静的ファイルが確実に配信され、キャッシュの影響を受けずに変更を確認できます。 状況に応じてキャッシュ期間を調整することで、より実践的な運用が可能になります。

先生と生徒の振り返り会話

生徒

「Spring Bootでは、静的リソースってこんなに簡単に扱えるんですね。 ただ置くだけで表示される理由が分かって、仕組みもスッと理解できました。」

先生

「そうですね。自動配信の仕組みを知っておくと、無駄な設定をしなくて済みます。 その分、ディレクトリ構成や命名ルールを意識することが大切になります。」

生徒

「キャッシュの話も印象に残りました。 開発中に反映されない理由が、ブラウザのキャッシュだったんですね。」

先生

「多くの人が一度はつまずくポイントです。 キャッシュ制御と静的リソースの配置を理解しておけば、 Spring MVCの画面まわりはかなり安定して扱えるようになりますよ。」

カテゴリの一覧へ
新着記事
PR

JavaやLinuxの検証環境に
低コストで使えるVPS

JavaのArrayListクラスとgetメソッドの使い方を徹底解説!初心者でもわかるデータ操作
SpringのModelクラスとaddAttributeメソッドの使い方を完全ガイド!初心者でも安心
JavaのSecureRandomクラスの使い方を完全ガイド!初心者でもわかるセキュアな乱数生成
Springの@Componentアノテーションの使い方を徹底解説!初心者でもわかるSpring Boot入門
PR 未経験からITエンジニアを目指す方へ

Javaを学んでいるけど、「このまま未経験で就職できるか不安」という20代向け。 学歴不問・無料サポートの就職支援という選択肢があります。

Tamesy |無料で面談予約
人気記事
No.1
Java&Spring記事人気No1
JavaのIntegerクラスの使い方を完全ガイド!初心者でもわかる整数操作
No.2
Java&Spring記事人気No2
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.3
Java&Spring記事人気No3
Javaのラムダ式で配列を扱う!Arrays.streamの基本と注意点を初心者向けに解説
No.4
Java&Spring記事人気No4
Spring BootのJakarta移行ガイド!初心者向けjavax→jakarta変更ポイント徹底解説
No.5
Java&Spring記事人気No5
JavaのRuntimeExceptionを完全解説!初心者でもわかるjava.langパッケージの基礎
No.6
Java&Spring記事人気No6
JavaのHttpSessionを徹底解説!初心者でもわかるセッション管理の基本
No.7
Java&Spring記事人気No7
Springの@Serviceアノテーションの使い方を徹底解説!初心者でもわかるSpring フレームワーク入門
No.8
Java&Spring記事人気No8
Spring Data JPA入門!findAll()やfindBy**()の使い方などデータベース操作の基礎を学ぶ
PR

ローカルPCに依存しない開発環境という選択肢

Java・Linuxの検証や学習環境を、クラウド上ですぐに用意できます。

Java入門

Javaの基礎を体系的に学びたい場合は、文法だけでなく 「なぜそう書くのか」まで丁寧に解説されているため、 初心者でも理解しやすい定番の1冊です。

スッキリわかるJava入門 第4版

※ 紙の書籍・電子書籍どちらでも購入できます

Java実践

ジェネリクス、enum、シールクラスなどの型設計から、 関数型プログラミング(ラムダ式・Stream API)、 JVM制御やリフレクション、外部ライブラリの活用までを扱っており、 「Javaを使えるレベル」へ進むための内容が網羅されています。

スッキリわかるJava入門 実践編 第4版

※ 紙の書籍・電子書籍どちらでも購入できます

Spring入門

Spring Frameworkの全体像から、 Webアプリ開発で必要となる主要機能までを 体系的に解説している定番の入門書です。

Spring徹底入門 第2版 Spring FrameworkによるJavaアプリケーション開発

※ 紙の書籍・電子書籍どちらでも購入できます

PR 実務経験のあるエンジニア向け

Javaなどの実務経験があり、次のキャリアを検討している方向け。 IT・ゲーム業界に特化した転職支援サービスという選択肢もあります。

転職ボックス |IT・ゲーム業界専門