Spring Bootのディレクトリ構成を完全ガイド!初心者向けにjava・resources・static・templatesの役割を解説
生徒
「Spring Bootを始めたばかりなのですが、プロジェクトのディレクトリ構成がたくさんあってよくわかりません…」
先生
「最初は混乱しやすいですね。でも、java・resources・static・templatesの役割を理解すれば、Spring Bootアプリの構造がスッキリ見えてきますよ。」
生徒
「それぞれどんな使い分けをするんですか?」
先生
「それでは、Spring Bootのディレクトリ構成について詳しく見ていきましょう!」
1. Spring Bootプロジェクトの基本ディレクトリ構成
Spring Bootのプロジェクトを作成すると、自動的に特定のディレクトリ構成が生成されます。主に以下のような構造になります:
src/
├── main/
│ ├── java/
│ ├── resources/
│ │ ├── static/
│ │ └── templates/
└── test/
この中でも、java、resources、static、templatesの4つがSpring Bootにとって重要な役割を果たしています。それぞれの意味と使い方を順番に解説していきます。
2. javaディレクトリの役割とは?
src/main/javaディレクトリには、Spring Bootアプリケーションのメインロジックを書くJavaコードを配置します。たとえば、@Controllerや@Service、@Repositoryなどのアノテーションを付けたクラスはすべてこの中に作成されます。
package com.example.demo.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HomeController {
@GetMapping("/")
public String index() {
return "index";
}
}
この例では、ルートパスにアクセスがあるとindexという名前のHTMLファイルを返すようになっています。HTMLファイルは後述するtemplatesに置かれます。
3. resourcesディレクトリとは?
src/main/resourcesは、アプリケーションが使用する設定ファイルや静的ファイル、テンプレートファイルを配置する場所です。Spring Bootではこのディレクトリがクラスパスに自動で追加されるため、アプリケーション起動時に読み込まれやすい仕組みになっています。
この中に、さらに以下のようなサブディレクトリがあります:
static:CSS・JavaScript・画像などの静的リソースを配置templates:HTMLなどテンプレートエンジンで使われるファイルを配置application.propertiesやapplication.yml:設定ファイル
4. staticディレクトリの使い方
src/main/resources/staticにあるファイルは、Spring Bootが自動でWeb公開してくれます。たとえば、static/css/style.cssというファイルを置けば、ブラウザで以下のようにアクセスできます:
http://localhost:8080/css/style.css
静的ファイルとは、ユーザーがアクセスしても中身が変わらないもののことです。CSS・画像・JavaScriptファイルなどはここに配置するのが一般的です。
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="/css/style.css">
</head>
<body>
<h1>Hello Spring Boot!</h1>
</body>
</html>
このように、HTMLから/css/style.cssを読み込むと、staticフォルダ内のファイルが正しく読み込まれます。
5. templatesディレクトリの使い方
src/main/resources/templatesは、HTMLテンプレートを置く場所です。Spring Bootでは、ThymeleafやFreemarkerなどのテンプレートエンジンと連携することで、HTML内に動的なデータを埋め込むことができます。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>ホーム画面</title>
</head>
<body>
<h1 th:text="'こんにちは、' + ${name} + 'さん!'"></h1>
</body>
</html>
このテンプレートを使うと、JavaコードからModelに渡したnameの値がHTMLに反映されます。たとえば、コントローラーで次のように設定すれば:
@GetMapping("/hello")
public String hello(Model model) {
model.addAttribute("name", "太郎");
return "hello";
}
hello.htmlというテンプレート内に「こんにちは、太郎さん!」と表示される仕組みになります。
6. staticとtemplatesの違いとは?
初心者が混乱しやすいのがstaticとtemplatesの違いです。以下に用途の違いをまとめます。
| ディレクトリ名 | 用途 | アクセス方法 |
|---|---|---|
| static | CSS・画像・JSなどの静的リソース | ブラウザが直接アクセス(例:/css/style.css) |
| templates | HTMLテンプレート(Thymeleafなど) | コントローラー経由で描画(例:return "index";) |
まとめると、ユーザーが直接見るのがstatic、プログラムが加工してから見せるのがtemplatesです。
7. Spring Boot初心者がよくやるミスと注意点
Spring Bootを始めたばかりの方がよくやってしまうミスとして、次のようなものがあります:
- HTMLファイルを
staticに置いてしまい、th:textが効かない - CSSファイルを
templatesに置いてしまい、読み込めない return "index";としてもファイルが見つからない(templates内にindex.htmlがない)
これらを防ぐには、テンプレートファイルは必ずtemplates、静的ファイルはstaticと覚えるのが一番です。
まとめ
今回はSpring Bootにおけるディレクトリ構成について、初心者の方にも理解しやすいようにjava、resources、static、templatesそれぞれの役割を解説しました。Spring Bootアプリケーション開発では、これらのフォルダの使い方を正しく理解することが、正しいファイル配置やトラブルの予防に直結します。
javaディレクトリにはJavaコードを配置し、resourcesにはアプリの設定や静的・テンプレートリソースを配置します。staticはCSSやJavaScript、画像などを格納し、直接ブラウザからアクセスできるリソースとして提供されます。一方templatesは、Thymeleafなどのテンプレートエンジンで動的にHTMLを生成するためのファイルを配置する場所です。
実際の開発では、コントローラーからtemplates内のテンプレートを呼び出し、Modelに値を詰めて画面に表示させます。そしてCSSなどのスタイルはstaticから読み込まれるという形になります。このような役割分担を理解しておくことで、アプリケーションの構造がぐっと明確になり、開発の効率も上がります。
例えば、次のようにコントローラーとテンプレートを組み合わせると、動的なHTMLが表示されます:
@GetMapping("/greeting")
public String greeting(Model model) {
model.addAttribute("name", "ユーザー");
return "greeting";
}
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>あいさつページ</title>
</head>
<body>
<h1 th:text="'こんにちは、' + ${name} + 'さん!'"></h1>
</body>
</html>
このように、templatesとjavaの連携、そしてstaticからスタイルを読み込む流れを身につけておけば、Webアプリ開発の土台がしっかり築けます。Spring Bootのディレクトリ構成は最初こそ複雑に見えるかもしれませんが、意味を知れば納得の構造です。プロジェクトを作るたびに意識しておくと、どんどん自然に使いこなせるようになります。
生徒
「今日の話で、staticとtemplatesの違いがようやくわかりました!Javaコードはjavaに置いて、HTMLテンプレートはtemplates、CSSはstaticに置けばいいんですよね?」
先生
「その通りです。特にtemplatesにth:textなどを書いてもstaticに置いてしまうと動かないので、場所を間違えないように気をつけましょう。」
生徒
「最初は混乱してましたけど、役割がはっきりしているってわかればすごくスッキリしますね。これで今後のプロジェクトも安心です!」
先生
「理解が深まりましたね。Spring BootでWebアプリケーションを作るなら、このディレクトリ構成の理解が第一歩です。これからどんどん応用していきましょう!」