Spring Bootの「templates」や「static」ディレクトリはルートなのか?
こんにちは。ゆうせいです。
Spring BootでWebアプリケーションを作るとき、「templates
」や「static
」というフォルダをresources
の下に配置しますよね。では、これらのディレクトリはプロジェクトのルートと見なしてよいのでしょうか?
結論からいうと、アプリケーションのルートではないが、 Spring BootのWebリソース解決において特別な扱いを受ける「ルート的な場所」である、というのが正確な理解になります。
順を追って詳しく説明していきますね!
Spring Bootにおける「ルート」の意味とは?
ここでまず「ルート」という言葉の意味をはっきりさせましょう。
プロジェクトのルート(root)には少なくとも2つの観点があります:
1. ファイルシステム上のルート
これは通常、pom.xml
(Maven)やbuild.gradle
(Gradle)がある最上位ディレクトリのこと。開発者が見る「プロジェクトのトップ」です。
2. アプリケーションのルート(リソース解決ルート)
Spring BootがHTMLファイルや画像、JS、CSSなどの静的ファイルを探しに行く起点ディレクトリを指します。
templates
とstatic
の位置づけ
Spring Bootでは、以下のような特別な意味を持つディレクトリがあります:
ディレクトリ | 説明 |
---|---|
src/main/resources/templates | ThymeleafやFreemarkerなど、テンプレートエンジンがHTMLテンプレートを探す場所 |
src/main/resources/static | CSS、JS、画像などの静的ファイルを配置する場所(/css/** , /js/** などでアクセス可能) |
つまりどういうこと?
たとえばstatic
配下にimg/logo.png
がある場合、
ブラウザからは /img/logo.png
でアクセスできます。
このときSpring Bootは「static」フォルダをアプリケーションルートのように扱うので、見た目には「staticがルート」に見えるのです。
例え話:お店と倉庫の関係で考える
Spring Bootアプリを「お店」と考えてみましょう。
- 「static」ディレクトリは、お客さんが自由に手に取れるショーケース。
- 「templates」ディレクトリは、注文を受けて裏でこっそり用意する厨房。
どちらも「お店の入り口」からアクセスされるわけですが、倉庫(resources
)全体から見ると一部分にすぎません。
メリット・デメリット
メリット
- Spring Bootが自動でマッピングしてくれるため、特別な設定が不要。
- ディレクトリ構成が標準化されており、他人が見ても分かりやすい。
デメリット
static
やtemplates
以外に置くと基本的には自動で読み込まれない。- 柔軟性に欠けることもあり、独自構成にしたい場合は設定が必要。
補足:Spring Bootのリソース探索順序
Spring Bootは以下の順でリソースを探します:
/META-INF/resources/
/resources/
/static/
/public/
これらはすべて src/main/resources
以下に配置するのが一般的です。
これらのどこにファイルを置いてもOKですが、static
が推奨です。
今後の学習の指針
Spring Bootの「自動構成」(AutoConfiguration)や「WebMvcConfigurer」を学ぶことで、
この仕組みがどう動いているかより深く理解できるようになります。
以下のトピックを次に学ぶとよいでしょう:
- Spring Bootの
WebMvcAutoConfiguration
の仕組み addResourceHandlers()
メソッドの使い方- テンプレートエンジン(Thymeleafなど)のカスタマイズ方法
application.properties
によるパスの変更方法(例:spring.web.resources.static-locations
)
ほかにも疑問があれば、何でも聞いてくださいね!
セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク
投稿者プロフィール
