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

SpringのModelクラスの使い方を完全ガイド!初心者でも安心

SpringのModelクラス
SpringのModelクラス

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

生徒

「Springでコントローラーからビューにデータを渡す方法を教えてください!」

先生

「Springでは、org.springframework.uiパッケージにあるModelクラスを使ってデータをビューに渡します。」

生徒

「具体的にはどのように使えば良いですか?」

先生

「それでは、Modelクラスの基本的な使い方を詳しく見ていきましょう!」

1. SpringのModelクラスとは?

1. SpringのModelクラスとは?
1. SpringのModelクラスとは?

SpringのModelは、コントローラーで用意した値をビュー(画面)へ受け渡すための“連絡ノート”のような入れ物です。キー(名前)と値のペアで情報を持ち、MVCの流れ(Controller → Model → View)で、テンプレートエンジン(例:Thymeleaf)がその値を取り出して表示します。

例えばログイン名や商品一覧のタイトルなど、画面に出したい情報をModelに入れて返すだけで、ビュー側は${...}で読み取れます。難しい仕組みを覚えるより、「名前をつけて箱に入れる」と考えると理解しやすいでしょう。

超シンプルなサンプル(プログラミング未経験者向け)


import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HelloController {

    @GetMapping("/hello")
    public String hello(Model model) {
        // 1) "message" という名前で値を入れる(キーと値のペア)
        model.addAttribute("message", "はじめてのModel!");
        // 2) "hello" というビュー名(テンプレートファイル名)を返す
        return "hello";
    }
}

ここではmessageという名前で文字列をModelに入れています。ビュー(hello.htmlなど)では${message}と書けば中身を表示できます。まずは「コントローラーでaddAttribute、ビューで取り出す」という流れを押さえましょう。

このようにModelは「画面に渡したいデータを名前付きで持たせる仕組み」です。以降のセクションでは、用途や記述パターンを順に見ていきますが、まずは“箱に入れて渡す”というイメージが掴めれば十分です。

2. Modelクラスの主な用途

2. Modelクラスの主な用途
2. Modelクラスの主な用途

Modelクラスは、以下のような場面で使用されます。

  • ユーザー情報をビューに渡す
  • フォーム入力の結果を表示する
  • 動的に生成されたデータをレンダリングする

データはaddAttributeメソッドを使って簡単に追加できます。また、ビュー名の指定はコントローラーの戻り値で行います。

PR

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

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

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

3. 基本的な使い方

3. 基本的な使い方
3. 基本的な使い方

以下は、Modelクラスを使ってデータをビューに渡す基本的な例です。


import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class ModelExampleController {

    @GetMapping("/model-example")
    public String modelExample(Model model) {
        model.addAttribute("title", "SpringのModelクラス");
        model.addAttribute("message", "このデータはModelを使って渡されました。");
        return "exampleView";
    }
}

この例では、addAttributeメソッドを使ってキーと値のペアを追加し、それをビューで使用できるようにしています。

4. ビューでのデータの表示方法

4. ビューでのデータの表示方法
4. ビューでのデータの表示方法

上記のコードで渡したデータは、以下のようにビューで表示することができます(Thymeleafを例にします)。


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title th:text="${title}"></title>
</head>
<body>
    <h1 th:text="${title}"></h1>
    <p th:text="${message}"></p>
</body>
</html>

これにより、コントローラーから渡されたtitlemessageが表示されます。

5. 動的なデータの追加

5. 動的なデータの追加
5. 動的なデータの追加

以下は、条件に応じてデータを動的に追加する例です。


@GetMapping("/dynamic-model")
public String dynamicModelExample(Model model, boolean isLoggedIn) {
    if (isLoggedIn) {
        model.addAttribute("user", "ログイン済みユーザー");
        model.addAttribute("status", "ようこそ!");
    } else {
        model.addAttribute("user", "ゲスト");
        model.addAttribute("status", "ログインしてください。");
    }
    return "dynamicView";
}

この例では、ログイン状態に応じて表示するメッセージを動的に変更しています。

6. よくある疑問

6. よくある疑問
6. よくある疑問

Q: Modelクラスはどのようにデータを管理しますか?

A: データは内部的にキーと値の形式で保存され、ビューで使用するために提供されます。

Q: ModelModelMapの違いは何ですか?

A: 両者はほぼ同じ機能を提供しますが、ModelMapjava.util.Mapを拡張したもので、より柔軟な操作が可能です。

Q: 複数のデータを追加する場合の注意点はありますか?

A: キー名が重複しないようにすることが重要です。重複すると、後から追加したデータで上書きされます。

7. Model・ModelMap・ModelAndViewの違いと選び方

7. Model・ModelMap・ModelAndViewの違いと選び方
7. Model・ModelMap・ModelAndViewの違いと選び方

Modelは最もシンプルで、属性を追加してビュー名を文字列で返すパターンです。ModelMapMapの操作に慣れている場合に便利で、put系の操作感で扱えます。ModelAndViewは「ビュー名」と「データ」をひとまとめにでき、処理の途中でビュー名を切り替えるようなケースに向いています。

  • Model:よく使う基本形。迷ったらこれ。
  • ModelMap:Map操作をそのまま使いたいとき。
  • ModelAndView:1つの戻り値でビューとデータをまとめたいとき。

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class ChoiceController {

    // Model の例
    @GetMapping("/with-model")
    public String withModel(Model model) {
        model.addAttribute("title", "Modelの例");
        model.addAttribute("message", "最小限でシンプル");
        return "sampleView";
    }

    // ModelMap の例
    @GetMapping("/with-modelmap")
    public String withModelMap(ModelMap modelMap) {
        modelMap.put("title", "ModelMapの例");
        modelMap.put("message", "Mapライクに操作できる");
        return "sampleView";
    }

    // ModelAndView の例
    @GetMapping("/with-mav")
    public ModelAndView withModelAndView() {
        ModelAndView mav = new ModelAndView("sampleView");
        mav.addObject("title", "ModelAndViewの例");
        mav.addObject("message", "ビュー名とデータを一括管理");
        return mav;
    }
}

8. @ModelAttributeでフォーム入力と連携する

8. @ModelAttributeでフォーム入力と連携する
8. @ModelAttributeでフォーム入力と連携する

フォーム入力を受け取るときは、@ModelAttributeでフォーム用オブジェクトにバインドします。初期表示では空のオブジェクトをモデルに入れ、送信時は同じ名前で受け取るのがポイントです。


// フォーム用のDTO
public class UserForm {
    private String name;
    private Integer age;
    // getter / setter を省略
}

@Controller
public class FormController {

    // 初期表示:空のフォームをModelへ
    @GetMapping("/user/new")
    public String showForm(Model model) {
        model.addAttribute("userForm", new UserForm());
        return "userForm";
    }

    // 送信処理:フォーム入力を受け取り、再度Modelに詰める
    @PostMapping("/user/new")
    public String submit(
            @ModelAttribute("userForm") UserForm form,
            Model model) {
        // バリデーションや保存処理をここで実行
        model.addAttribute("result", "登録が完了しました");
        return "userResult";
    }
}

Thymeleafのフォーム側では、オブジェクトをth:objectで指定し、各入力にth:fieldを使います。


<form th:action="@{/user/new}" th:object="${userForm}" method="post">
    <label>名前</label>
    <input type="text" th:field="*{name}">
    <label>年齢</label>
    <input type="number" th:field="*{age}">
    <button type="submit">送信</button>
</form>

9. リダイレクト時のデータ受け渡し(RedirectAttributesとフラッシュ属性)

9. リダイレクト時のデータ受け渡し(RedirectAttributesとフラッシュ属性)
9. リダイレクト時のデータ受け渡し(RedirectAttributesとフラッシュ属性)

リダイレクト後に1回だけ表示したいメッセージは、RedirectAttributesaddFlashAttributeを使います。URLに露出させたくない一時的な値に最適です。

  • addAttribute:クエリパラメータとしてURLに付与される
  • addFlashAttribute:セッション経由で1回だけ取り出せる(URLには出ない)

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

@Controller
public class RedirectController {

    @PostMapping("/save")
    public String save(RedirectAttributes ra) {
        // 保存処理...
        ra.addFlashAttribute("notice", "保存が完了しました");
        return "redirect:/list";
    }
}

リダイレクト先のビューでは、通常のモデル属性と同様に参照できます。


<!-- list.html -->
<div th:if="${notice}">
    <p th:text="${notice}"></p>
</div>

まとめ

まとめ
まとめ

SpringのModelクラスは、ビューにデータを渡すための非常に重要な役割を果たします。このクラスを使用することで、コントローラーの可読性が向上し、ビューでのデータ管理が容易になります。また、addAttributeメソッドを使って動的にデータを追加できるため、さまざまな場面で利用できます。今回の記事では、Modelクラスの基本的な使い方から、動的データの管理方法までを詳しく解説しました。

データの管理において、キー名の一貫性を保つことや、適切なビュー名を設定することが重要です。また、ModelMapModelAndViewとの違いを理解することで、Springのデータ管理をさらに効率的に行えるようになります。

以下は、記事で紹介したコードを応用した例です。


@GetMapping("/summary-example")
public String summaryExample(Model model) {
    model.addAttribute("pageTitle", "まとめページ");
    model.addAttribute("summary", "SpringのModelクラスは、データをビューに渡すための強力なツールです。");
    model.addAttribute("nextStep", "次は、ModelMapを学んでみましょう!");
    return "summaryView";
}

以上の例では、複数のデータをModelクラスに追加し、ビューでそれらを使用できるようにしています。このように、Modelクラスを活用することで、ビューとコントローラー間のデータ連携がスムーズになります。

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

生徒

「今日のまとめをお願いします!」

先生

「SpringのModelクラスは、コントローラーからビューにデータを渡すための基本的なツールです。addAttributeメソッドを使えば、簡単にデータを追加できます。」

生徒

「動的なデータ管理も可能なんですね!」

先生

「その通りです。ログイン状態や条件に応じてデータを変更する場合にも活躍します。ModelMapModelAndViewとの違いを理解すると、さらに応用範囲が広がりますよ。」

生徒

「次回は、ModelMapについて学びたいです!」

先生

「いいですね。次回も一緒にSpringを深く理解していきましょう!」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

SpringのModelクラスとは何ですか?

SpringのModelクラスは、コントローラーからビューにデータを渡すためのツールです。データをキーと値のペア形式で管理し、ビューで簡単に使用できるようになります。

Modelクラスを使うとどのようなメリットがありますか?

Modelクラスを使用することで、コントローラーのコードを簡潔にし、ビューへのデータ渡しを効率化できます。また、動的なデータ管理も簡単になります。

addAttributeメソッドとは何ですか?

addAttributeメソッドは、Modelクラスにデータを追加するためのメソッドです。キーと値を指定するだけでデータを簡単に追加でき、ビューで利用可能になります。

ビューでModelクラスのデータをどのように表示しますか?

Thymeleafなどのテンプレートエンジンを使用し、ビューでデータを表示します。例えば、タイトルやメッセージを表示する際は、${title}や${message}のように記述します。

動的にデータをModelクラスに追加する方法を教えてください。

条件分岐を使用してデータを動的に追加できます。例えば、ログイン状態に応じて異なるメッセージを表示する場合、if文を使ってaddAttributeメソッドでデータを追加します。

ModelクラスとModelMapクラスの違いは何ですか?

Modelクラスは基本的なデータ渡しを行うためのインターフェースで、ModelMapはMapを拡張したクラスです。より柔軟なデータ管理が必要な場合にはModelMapが役立ちます。

Modelクラスで複数のデータを追加するときの注意点はありますか?

複数のデータを追加する際は、キー名が重複しないように注意してください。同じキー名を使用すると、後から追加したデータが上書きされます。

Modelクラスを使用する際に推奨されるベストプラクティスは何ですか?

データを追加する際は、明確で一貫性のあるキー名を使用し、適切なビュー名を指定することが重要です。また、コードの可読性を保つために、データの追加は一箇所にまとめると良いでしょう。

Thymeleaf以外のテンプレートエンジンでもModelクラスは使えますか?

はい、Thymeleaf以外のテンプレートエンジン(例: JSPやFreeMarker)でもModelクラスを使ってデータをビューに渡すことができます。

SpringのModelクラスはREST APIでも使えますか?

REST APIではModelクラスを使用することは一般的ではありません。代わりに、@ResponseBodyやResponseEntityを使ってJSON形式でデータを返すのが一般的です。

ビュー名を処理途中で切り替えたいときは何を使うべきですか?

処理の条件によってビュー名を後から変更したい場合は、ModelAndViewを使うとsetViewName()で柔軟に切り替えられます。

ユニットテストでModelの中身を検証する最も簡単な方法は?

MockMvcを使い、andExpect(model().attribute("key", value))のようにアサートします。軽量テストならModelMapを受けるハンドラを直接呼び出して中身を確認してもOKです。

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

Spring Framework超入門をAmazonで見る

※ Amazonアソシエイト・プログラムを利用しています

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

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

Spring Bootの@RequestParamの使い方を解説!初心者でもわかるGETリクエストのパラメータ取得
Springの監査設定を完全解説!作成者・更新者・日時を自動記録するAuditingの使い方
JavaのLocalDateとequalsメソッドを完全解説!初心者でもわかる日付の比較方法
JavaのEnumとcompareToメソッドを完全ガイド!初心者でもわかるjava.langパッケージの基礎
PR 未経験からITエンジニアを目指す方へ

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

Tamesy |無料で面談予約
人気記事
No.1
Java&Spring記事人気No1
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Springの@Serviceアノテーションの使い方を徹底解説!初心者でもわかるSpring フレームワーク入門
No.3
Java&Spring記事人気No3
JavaのArrayListクラスとgetメソッドを完全解説!初心者でもわかるリストの要素取得
No.4
Java&Spring記事人気No4
Spring BootのMultipartFile入門:ファイルアップロード・ダウンロードの実装方法と制限設定
No.5
Java&Spring記事人気No5
JavaのEnumクラスのordinalメソッドを徹底解説!初心者でもわかる列挙型の順序番号
No.6
Java&Spring記事人気No6
JavaのHttpSessionを徹底解説!初心者でもわかるセッション管理の基本
No.7
Java&Spring記事人気No7
Spring Data JPA入門!findAll()やfindBy**()の使い方などデータベース操作の基礎を学ぶ
No.8
Java&Spring記事人気No8
Thymeleafのth:classappend属性の使い方を完全ガイド!初心者でもわかる動的クラス追加
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・ゲーム業界専門