カテゴリ: Spring 更新日: 2026/01/09

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における静的リソースの自動配信機能
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より優先されます。

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. キャッシュ制御の基本:キャッシュを無効化・制御する方法
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やバージョニングとの併用
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の画面まわりはかなり安定して扱えるようになりますよ。」

カテゴリの一覧へ
新着記事
New1
Spring
Spring MVCのフォワードとリダイレクトの違いと使い分け完全解説!初心者向け
更新記事
New2
Spring
Spring Bootの初期テスト導入を完全ガイド!JUnit 5とSpring Boot Testの基本を初心者向けに解説
更新記事
New3
Java
Javaのラムダ式とStreamのreduce完全ガイド!初心者でもわかる集計処理の基本と使い方
更新記事
New4
Spring
Spring Bootプロジェクトの作成ガイド!EclipseとGradleを使った初心者向け手順
更新記事
人気記事
No.1
Java&Spring記事人気No1
Spring
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Spring
Springの@Componentアノテーションの使い方を徹底解説!初心者でもわかるSpring Boot入門
No.3
Java&Spring記事人気No3
Java
Java開発環境「Eclipse(Pleiades)」のインストール方法とメリットを初心者向けに解説
No.4
Java&Spring記事人気No4
Spring
Spring BootのJakarta移行ガイド!初心者向けjavax→jakarta変更ポイント徹底解説
No.5
Java&Spring記事人気No5
JSP
JSPの基本タグ一覧と使い方まとめ!実務で使えるタグを紹介
No.6
Java&Spring記事人気No6
Spring
Springの@Serviceアノテーションの使い方を徹底解説!初心者でもわかるSpring フレームワーク入門
No.7
Java&Spring記事人気No7
Java
Javaの@SuppressWarningsアノテーションの使い方を完全ガイド!初心者でもわかる警告の抑制方法
No.8
Java&Spring記事人気No8
Spring
Spring BootのMultipartFile入門:ファイルアップロード・ダウンロードの実装方法と制限設定