【Spring Boot】DTO の考え方をやさしく解説

Java入門・実践
スポンサーリンク
スポンサーリンク

はじめに

Spring Boot で Web API を作っていると、
DTO(Data Transfer Object)
という言葉をよく目にします。

「エンティティをそのまま返しちゃダメなの?」
「DTO を使うと何が嬉しいの?」
「結局どんなときに使えばいいの?」

そんな疑問を持つ方も多いと思います。

この記事では、DTO の考え方を
やさしく・実務で役立つ形 で整理していきます。

まずはコードを見て、そこから少しずつ理解していきましょう。

まずはコードを確認

Java
public class UserDto {
    private String name;
    private int age;

    // getter / setter
}
Java
@GetMapping("/user")
public UserDto getUser() {
    UserDto dto = new UserDto();
    dto.setName("taro");
    dto.setAge(20);
    return dto;
}

このように、API の入出力専用のクラスとして DTO を使います。

コードのしくみを解説

DTO とは

一言でいうと、

「データの受け渡し専用のシンプルな入れ物」

です。

  • API のリクエスト
  • API のレスポンス
  • 画面とのデータ受け渡し

など、外部とのやり取りに使うためのクラスです。

なぜ DTO が必要なのか

理由は大きく 3 つあります。

エンティティを外に出さないため

エンティティ(DB と対応するクラス)をそのまま返すと、
内部構造が外部に漏れてしまいます。

DTO を使うことで、
「外に見せたい情報だけを返す」
という安全な設計ができます。

API の仕様を安定させるため

エンティティは DB の変更に影響されますが、
DTO は API のために独立して設計できます。

表示用の加工がしやすい

DTO なら、

  • 表示用の名前
  • 計算済みの値
  • 結合したデータ
    などを自由に入れられます。

あわせて知っておきたいポイント

DTO と Entity の違い

種類役割
EntityDB と対応するクラス
DTOAPI の入出力専用クラス

役割が違うので、
混ぜないことが大切 です。

MapStruct や ModelMapper で変換を自動化できる

DTO と Entity の変換は手書きでもできますが、
ライブラリを使うと楽になります。

Request と Response で DTO を分けることも多い

  • UserRequest
  • UserResponse

のように分けると、API の意図がより明確になります。

使うときに気をつけたいこと

DTO にロジックを書かない

DTO はあくまで「入れ物」。
ビジネスロジックは Service 層に置きます。

Entity をそのまま返さない

内部構造が外部に漏れたり、
意図しないフィールドが返ってしまうことがあります。

フィールド名は API 仕様に合わせる

DTO は API の顔なので、
読みやすい名前にするのが大切です。

まとめ

DTO は、
「データの受け渡し専用のシンプルな入れ物」
です。

  • エンティティを外に出さない
  • API の仕様を安定させる
  • 表示用の加工がしやすい

難しく聞こえますが、
「外に見せるためのデータだけをまとめたクラス」
と理解できれば十分です。


decopon
decopon

DTO を使い始めると、API の設計がぐっと整い、
保守性も高まります。
あなたの開発が、今日より少しだけ楽になりますように。

moco
moco

外に渡すデータだけをきれいにまとめるなんて…プレゼントのラッピングみたいでかわいいね。

コメント

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