カテゴリ: 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における静的リソースの自動配信機能

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. キャッシュ制御の基本:キャッシュを無効化・制御する方法

静的リソースは通常ブラウザによってキャッシュされますが、開発中などでキャッシュを無効にしたい場合もあります。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の画面まわりはかなり安定して扱えるようになりますよ。」

Spring FrameworkやThymeleafを使った Webアプリ開発の全体像をやさしく理解したい人には、 この入門書が定番です。

Spring Framework超入門をAmazonで見る

※ Amazon広告リンク

カテゴリの一覧へ
新着記事
New1
Spring
Spring Bootの@Profileとspring.profiles.activeの使い方を完全ガイド!初心者向けプロファイル活用術
新規投稿
New2
Spring
Javaの@EnableWebSecurityアノテーションを完全ガイド!初心者でもわかるSpringセキュリティ設定
更新記事
New3
Spring
Springの@PostAuthorizeアノテーションを完全ガイド!初心者でもわかる方法
更新記事
New4
Java
JavaのIOExceptionクラス徹底解説!初心者向けファイル入出力エラー対策ガイド
更新記事
人気記事
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
Spring
Springの@Serviceアノテーションの使い方を徹底解説!初心者でもわかるSpring フレームワーク入門
No.4
Java&Spring記事人気No4
Spring
SpringのBindingResultを完全ガイド!初心者でもわかる入力チェックとエラー処理
No.5
Java&Spring記事人気No5
Java
JavaのIOExceptionクラス徹底解説!初心者向けファイル入出力エラー対策ガイド
No.6
Java&Spring記事人気No6
JSP
JSPの基本タグ一覧と使い方まとめ!実務で使えるタグを紹介
No.7
Java&Spring記事人気No7
Servlet
JavaのHttpSessionを徹底解説!初心者でもわかるセッション管理の基本
No.8
Java&Spring記事人気No8
Java
Javaの@SuppressWarningsアノテーションの使い方を完全ガイド!初心者でもわかる警告の抑制方法

💻 作業効率アップに

長時間のコーディングでも疲れにくい♪ 静音ワイヤレスマウス

Logicool Signature M750 を見る

※ Amazon広告リンク