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

Spring MVCのModel/ModelMap/ModelAndViewの違いと使い分けを徹底解説!ビューへの値の渡し方ベストプラクティス

Spring MVCのModel / ModelMap / ModelAndView:ビューへ値を渡すベストプラクティス
Spring MVCのModel / ModelMap / ModelAndView:ビューへ値を渡すベストプラクティス

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

生徒

「Spring MVCでコントローラーからビューに値を渡したいんですが、ModelとかModelMapとかModelAndViewとか、どれを使えばいいんですか?」

先生

「それぞれに特徴があるので、シチュエーションによって使い分けると便利ですよ。実際に見ていきましょう。」

生徒

「違いがよくわからないので、初心者にもわかるように教えてください!」

先生

「もちろんです!それぞれの特徴とベストプラクティスを丁寧に解説していきますね。」

1. Spring MVCで値をビューに渡す基本的な方法とは

1. Spring MVCで値をビューに渡す基本的な方法とは
1. Spring MVCで値をビューに渡す基本的な方法とは

Spring MVCでは、コントローラーからビューにデータを渡すためにModelModelMapModelAndViewの3つの仕組みがあります。これらはすべて、HTMLのビュー(たとえばThymeleafなど)で動的にデータを表示するために使われる重要な機能です。

この3つは目的は同じですが、使い方や拡張性に少しずつ違いがあります。初心者が混乱しやすいポイントですが、実際のコードと共に学べば理解が深まります。

2. Modelを使った値の渡し方

2. <code>Model</code>を使った値の渡し方
2. Modelを使った値の渡し方

Modelはインターフェースで、Springが内部で用意している仕組みを通じて、簡潔にビューに値を渡せます。非常によく使われる方法です。

例えば以下のように使います。


@Controller
public class SampleController {

    @GetMapping("/greeting")
    public String greeting(Model model) {
        model.addAttribute("message", "こんにちは、Spring MVC!");
        return "greeting";
    }
}

このコードでは、"message"というキーで"こんにちは、Spring MVC!"という値をビューに渡しています。

3. ModelMapの特徴と使い方

3. <code>ModelMap</code>の特徴と使い方
3. ModelMapの特徴と使い方

ModelMapは、Modelと似ていますが、Mapのような操作性を持っています。キーと値のペアでデータを管理するため、Mapに慣れている人には使いやすいでしょう。


@Controller
public class SampleController {

    @GetMapping("/welcome")
    public String welcome(ModelMap modelMap) {
        modelMap.addAttribute("user", "山田太郎");
        return "welcome";
    }
}

ModelMapを使うと、内部的にはLinkedHashMapで値が保持されます。

4. ModelAndViewの基本と使い方

4. <code>ModelAndView</code>の基本と使い方
4. ModelAndViewの基本と使い方

ModelAndViewは、ビュー名と値の両方を同時に設定できる便利なクラスです。やや冗長にはなりますが、ひとつのオブジェクトで完結できる点が特徴です。


@Controller
public class SampleController {

    @GetMapping("/info")
    public ModelAndView info() {
        ModelAndView mav = new ModelAndView("info");
        mav.addObject("email", "user@example.com");
        return mav;
    }
}

このようにModelAndViewは柔軟にビューとデータをセットできます。

5. どれを使うべき?Model・ModelMap・ModelAndViewの違いとベストプラクティス

5. どれを使うべき?Model・ModelMap・ModelAndViewの違いとベストプラクティス
5. どれを使うべき?Model・ModelMap・ModelAndViewの違いとベストプラクティス

それぞれの違いをまとめると以下のようになります。

  • Model:最もシンプルで推奨される方法。迷ったらこれ!
  • ModelMap:Map的な操作を使いたい場合に便利。
  • ModelAndView:条件分岐などでビュー名を動的にしたいときに向いている。

一般的にはModelの使用が推奨されています。Springの公式ドキュメントでも、柔軟性とコードの可読性からModelの利用が中心です。

6. Spring Boot + Thymeleafでの具体的なビュー表示例

6. Spring Boot + Thymeleafでの具体的なビュー表示例
6. Spring Boot + Thymeleafでの具体的なビュー表示例

例えば、Modelを使ってコントローラーから"message"というキーで文字列を渡したとします。Thymeleafテンプレートでは次のように表示できます。


<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Greeting</title>
</head>
<body>
    <h1 th:text="${message}">デフォルトメッセージ</h1>
</body>
</html>

th:textModelに設定した"message"の値を表示しています。Spring MVCとThymeleafは非常に親和性が高く、動的なページが簡単に作成できます。

7. 複数の値を渡したいときのテクニック

7. 複数の値を渡したいときのテクニック
7. 複数の値を渡したいときのテクニック

複数の情報を渡したい場合は、以下のようにaddAttributeを何度も使えばOKです。


@GetMapping("/profile")
public String profile(Model model) {
    model.addAttribute("name", "佐藤花子");
    model.addAttribute("age", 28);
    model.addAttribute("location", "東京");
    return "profile";
}

ビュー側ではそれぞれ${name}${age}${location}のように参照できます。

8. フォーム送信後のリダイレクトでも活用できる

8. フォーム送信後のリダイレクトでも活用できる
8. フォーム送信後のリダイレクトでも活用できる

ModelModelMapは、リダイレクト時にはRedirectAttributesを使うことがベストプラクティスです。リダイレクトではModelの内容は引き継がれないため、RedirectAttributes#addFlashAttributeを使います。


@PostMapping("/submit")
public String handleForm(RedirectAttributes redirectAttributes) {
    redirectAttributes.addFlashAttribute("successMessage", "送信が完了しました!");
    return "redirect:/result";
}

このようにして、画面遷移後のメッセージ表示などにも活用できます。

まとめ

まとめ
まとめ

Spring MVCでビューに値を渡す3つの方法の違いと使い分け

今回は、Spring MVCでコントローラーからビューへ値を渡す方法として、ModelModelMapModelAndViewの3つについて学びました。それぞれの使い方や特徴を整理することで、開発現場でどの方法を使えば良いか判断できるようになります。

Modelはシンプルでコードも読みやすく、Spring公式でも推奨されている方法です。初心者が最初に選ぶには最適です。ModelMapMapのような使い方ができ、複数のデータを一括で管理するケースに便利です。一方、ModelAndViewは、ビュー名とデータをまとめて扱えるので、条件によって動的にビューを切り替えるような処理に向いています。

実際に複数の値を渡すケースを再確認

複数のデータをビューに渡したいときは、以下のようにModelを使って何度もaddAttributeを呼び出すのが基本です。


@GetMapping("/details")
public String details(Model model) {
    model.addAttribute("username", "田中一郎");
    model.addAttribute("email", "tanaka@example.com");
    model.addAttribute("registered", true);
    return "user-details";
}

ビュー側では${username}${email}といった変数を使って動的に情報を表示できます。これにより、ユーザーごとに異なる情報をテンプレートに反映できるようになります。

リダイレクト時の注意点とRedirectAttributesの活用

リダイレクトを伴うフォーム処理などでは、通常のModelModelMapで渡した値は次の画面に引き継がれません。そこで、RedirectAttributesaddFlashAttributeを使うことで、セッションを通じて一時的に値を渡すことができます。


@PostMapping("/contact")
public String submitContact(RedirectAttributes attrs) {
    attrs.addFlashAttribute("msg", "お問い合わせを受け付けました。");
    return "redirect:/contact/confirm";
}

この方法は、成功メッセージや通知メッセージを表示する際に非常に役立ちます。Spring MVCで実用的な開発を行うには、こういった細かな使い分けが重要になってきます。

Thymeleafとの組み合わせでさらに便利に

Spring BootとThymeleafを組み合わせると、渡された値をth:textでそのままHTMLテンプレートに表示できます。変数の展開も簡単で、デザイナーと協業しやすい構造になります。

Spring MVCのModelModelMapModelAndViewの違いを理解し、使い分けのベストプラクティスを身につけておくことで、実践的なWebアプリケーション開発がよりスムーズになります。

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

生徒

「今回でModelModelMapModelAndViewの違いがだいぶはっきりしてきました!」

先生

「それはよかったです。実際のプロジェクトでは、ほとんどがModelで事足りますが、場面によって使い分けると効率的になりますよ。」

生徒

「リダイレクト後に値が消えるのは知らなかったので、RedirectAttributesの使い方はとても参考になりました。」

先生

「ビューに一時的なメッセージを渡したいときには定番の方法ですから、ぜひ覚えておきましょう。今回の知識は今後の開発でもきっと役立ちますよ。」

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

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

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

Spring MVCでModelとModelMapの違いは何ですか?どちらを使うべきですか?

Modelはインターフェースで、シンプルかつ推奨されている方法です。ModelMapはMap的な使い方ができる点が特徴です。通常はModelの方が可読性も高くおすすめです。

ModelAndViewを使うメリットは何ですか?

ModelAndViewはビュー名とデータを1つのオブジェクトで管理できるため、ビューを条件によって動的に切り替えたい場合などに便利です。

Springの学習を効率化したい方へ

この記事の内容をもっと深く知るには、以下の入門書が最適です。

Spring Framework超入門をAmazonで見る
カテゴリの一覧へ
新着記事
New1
Spring
SpringDataJPAのJPAクエリメソッド「NotLike」の使い方を完全ガイド!初心者向け解説
更新記事
New2
Spring
SpringDataJPAのJPAクエリメソッド「Like」の使い方を完全ガイド!初心者向け解説
更新記事
New3
Java
JavaのLocalDateTimeクラスとplusMinutesメソッドを完全ガイド!初心者でもわかる分単位の時間操作
新規投稿
New4
Spring
SpringDataJPAのJPAクエリメソッド「IsNotNull」と「NotNull」の使い方を完全ガイド!初心者向け解説
更新記事
人気記事
No.1
Java&Spring記事人気No1
Spring
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Java
JavaのBooleanクラスの使い方を完全ガイド!初心者でもわかる真偽値の操作
No.3
Java&Spring記事人気No3
JSP
JSPの基本タグ一覧と使い方まとめ!実務で使えるタグを紹介
No.4
Java&Spring記事人気No4
Java
JavaのIOExceptionクラス徹底解説!初心者向けファイル入出力エラー対策ガイド
No.5
Java&Spring記事人気No5
JSP
JSPでif文・for文を使う方法!初心者でもわかるJavaとの違いと使い方
No.6
Java&Spring記事人気No6
Spring
SpringのBindingResultを完全ガイド!初心者でもわかる入力チェックとエラー処理
No.7
Java&Spring記事人気No7
Spring
SpringのModelクラスとaddAttributeメソッドの使い方を完全ガイド!初心者でも安心
No.8
Java&Spring記事人気No8
Spring
SpringDataJPAのJPAクエリメソッド「EndingWith」の使い方を完全ガイド!初心者向け解説