【Spring】MVCモデルの使い方!初心者でも簡単に理解できる実践ガイド

そもそもMVCモデルって?

Springフレームワークを使ってWebアプリケーションを開発するとき、多くの場面で使われるのが「MVCモデル」です。
一言でいうと、MVC(Model-View-Controller)を使うことで、プログラムを3つの役割に分け、それぞれを分かりやすく管理できる考え方のことです。

1. Model(モデル)とは?

モデルは、アプリケーションのデータやビジネスロジックを管理します。
たとえば、データベースからユーザー情報を取り出したり、アプリケーション内で計算を行ったりするのがモデルの役割です。
Springでは、これらを簡単に実装できる機能がたくさん用意されています。

2. View(ビュー)とは?

ビューは、ユーザーに見せる部分です。
HTMLファイルやテンプレートを使って、モデルから取り出したデータを画面に表示します。
Springでは「Thymeleaf」などのテンプレートエンジンを使用することが多く、簡単に動的なページを作成できます!

3. Controller(コントローラー)とは?

コントローラーは、リクエストを受け取り、必要な処理を行い、適切なビューを返す役割を持っています。
Springでは、@Controller@RequestMappingアノテーションを使うことで、コントローラーを設定できます。

より詳しいMVCモデルの説明が欲しい場合はこちらをどうぞ↓↓↓

SpringでMVCモデルを実装してみよう!

「SpringでMVCモデルを使ってみたいけど、何から始めればいいの?」そんな初心者さんに向けて、Spring MVCの基本的な使い方を具体的に説明します。

ここでは具体的な例として、商品のデータを管理するページを作ることにします。

商品情報を管理する場合、データベースやリストを使って商品データを管理し、ユーザーからのリクエストに応じて商品一覧を表示したり、新しい商品を追加したりする機能が必要になります。

1. まずはプロジェクトを作ろう!

最初に、Spring Bootを使ってプロジェクトを作成するのがおすすめです。
Spring Bootを使うと、複雑な設定をしなくても、すぐにMVCモデルを使ったアプリケーションを作り始められます。

以下の手順で進めてみましょう:

  1. Spring Initializr にアクセスする
  2. Projectを「Maven」、Languageを「Java」、Spring Bootのバージョンを「最新」に設定
  3. Dependencies(必要な機能)で「Spring Web」を追加
  4. 「Generate」ボタンをクリックしてプロジェクトをダウンロード
  5. ダウンロードしたプロジェクトを自分のIDE(例えば、IntelliJ IDEAやEclipse)で開く

これだけで、MVCモデルを使ったWebアプリを作る準備は完了です!

1. 商品モデルの作成

まずは、商品のデータをどう扱うか。
ここでは商品に「ID」「名前」「価格」といった情報を持たせます。
これが商品のモデルです。

public class Product {
    private int id;
    private String name;
    private double price;

    // コンストラクタ
    public Product(int id, String name, double price) {
        this.id = id;
        this.name = name;
        this.price = price;
    }

    // ゲッターとセッター
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }
}

このProductクラスが商品のデータを保持します。

2. 商品データを保持するサービス

次に、商品をどうやって管理するかです。
複数の商品を扱うためにサービスクラスを作り、商品のリストを保持します。
新しい商品を追加したり、商品リストを取得するメソッドも作りましょう。

import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Service;

@Service
public class ProductService {
    private List<Product> products = new ArrayList<>();

    // サンプルデータを追加
    public ProductService() {
        products.add(new Product(1, "Laptop", 1500.0));
        products.add(new Product(2, "Smartphone", 700.0));
        products.add(new Product(3, "Tablet", 300.0));
    }

    // 商品のリストを取得
    public List<Product> getAllProducts() {
        return products;
    }

    // 新しい商品を追加
    public void addProduct(Product product) {
        products.add(product);
    }
}

このProductServiceが、商品データの心臓部です。
ここで商品リストを管理し、新しい商品をどんどん追加できます。
実際にアプリケーションが動くとき、このサービスクラスがデータを提供してくれます。

3. コントローラーの作成

さて、いよいよコントローラーの出番です!
コントローラーは、ブラウザからのリクエストに応じて動き、商品の一覧を表示したり、商品を追加したりする役割を持っています。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class ProductController {

    @Autowired
    private ProductService productService;

    // 商品一覧を表示
    @GetMapping("/products")
    public String listProducts(Model model) {
        model.addAttribute("products", productService.getAllProducts());
        return "productList";  // productList.htmlにデータを渡す
    }

    // 新しい商品を追加
    @PostMapping("/products/add")
    public String addProduct(@RequestParam("name") String name, @RequestParam("price") double price) {
        int newId = productService.getAllProducts().size() + 1;  // 新しいIDを生成
        productService.addProduct(new Product(newId, name, price));
        return "redirect:/products";  // 商品一覧にリダイレクト
    }
}

ここで大事なのは、コントローラーがユーザーからのリクエストに応じて処理を分岐していることです。

  • @GetMapping("/products"): これは商品一覧を表示するための処理です。ユーザーがこのURLにアクセスしたとき、商品リストがModelに追加されて、productList.htmlビューにデータが送られます。
  • @PostMapping("/products/add"): 新しい商品を追加するための処理です。フォームで入力された商品情報を使って、新しい商品を追加し、商品一覧にリダイレクトします。

4. ビュー(HTMLファイル)

最後に、商品リストを表示するためのビューを作成します。

src/main/resources/templatesフォルダにproductList.htmlというファイルを作成します。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Product List</title>
</head>
<body>
    <h1>Product List</h1>
    <ul>
        <!-- 商品一覧を表示 -->
        <th:block th:each="product : ${products}">
            <li>ID: <span th:text="${product.id}"></span> | Name: <span th:text="${product.name}"></span> | Price: $<span th:text="${product.price}"></span></li>
        </th:block>
    </ul>

    <!-- 新しい商品を追加するフォーム -->
    <h2>Add a new product</h2>
    <form action="/products/add" method="post">
        Name: <input type="text" name="name">
        Price: <input type="number" step="0.01" name="price">
        <button type="submit">Add Product</button>
    </form>
</body>
</html>

これで商品一覧がきれいに表示され、商品を追加するフォームも作成できました。アクセスすると、商品データがリストで表示され、フォームに入力すると新しい商品が追加されます。

5.完成!

これで、Spring MVCを使った商品のデータ管理の基礎を学びました。具体的には:

  • モデルで商品データを表現し、
  • サービスでデータを管理し、
  • コントローラーでリクエストに応じて処理し、
  • ビューでデータを表示する

という流れです。
Spring MVCを使うことで、こうしたデータ管理の仕組みが効率的に、そして簡単に実現できることがわかりました。

Spring MVCの強み

Spring MVCの最大の強みは、アプリケーション開発の効率を大幅に向上させる点にあります。
具体的なメリットをいくつか挙げてみましょう。

  1. 依存性注入による柔軟な設計
    Springは依存性注入(DI)を使うことで、クラス間の結合度を下げ、コードの保守性を高めます。
    例えば、コントローラーとサービスクラスを分けて管理できるため、大規模なプロジェクトでもスムーズに開発が進みます。
  2. 豊富な機能
    Springには、データベースとの連携、セキュリティ機能、外部サービスとの連携など、多くの機能が組み込まれています。
    これらを活用することで、Webアプリケーションの開発が非常に効率的になります。
  3. 巨大なコミュニティとサポート
    Springは世界中で多くの開発者に利用されており、豊富なドキュメントやコミュニティサポートが存在します。
    困ったときに参考になる情報が簡単に見つかるのも大きな強みです。
    Springの公式ドキュメントも参考になります。


まとめ

SpringフレームワークでMVCモデルを使うことで、データの管理から表示まで、効率よく分かりやすく開発が進められます。
Spring Bootを使えば、複雑な設定なしに簡単にプロジェクトを作成し、コントローラー、モデル、ビューの連携をスムーズに実現できます。

最初はMVCモデルの基本的な構造を理解し、少しずつ自分でコードを書いてみることから始めましょう。
Spring MVCはその柔軟性と機能の豊富さで、初心者でも無理なく始められる開発の強力な味方となってくれます。

Springの使い方に慣れてきたら、ぜひ他の便利な機能も試してみてください!

タイトルとURLをコピーしました