DTOの使い分けってどうするの?新人エンジニアのための「全部入りDTO」運用ガイド
こんにちは。ゆうせいです。
今回は、新人エンジニアの方からよく聞かれる疑問にお答えします。
「すべてのフィールドを持ったDTOを作って、あとは表示側で取捨選択するってアリですか?」
実はこれ、現場でもかなりよくある運用方法なんです。ただ、メリットもあれば注意点もあります。
それでは一緒に、じっくり見ていきましょう!
DTOって何だっけ?
まずは前提の確認から始めましょう。
DTO(Data Transfer Object)とは、名前の通り「データを運ぶための入れ物」です。
たとえばWebアプリケーションでは、DBやサービス層から取得したデータを画面表示やAPIレスポンス用に整形するために使います。
例えるなら、DTOは「お弁当箱」です。
ご飯(顧客名)も、唐揚げ(車名)も、ブロッコリー(購入日)も、詰めて渡す感じですね。
すべてのフィールドを持ったDTOとは?
こんな形のDTOをイメージしてください
public class CarSaleFullDto {
    private int customerId;
    private String customerName;
    private String email;
    private String phone;
    private int carId;
    private String carName;
    private double price;
    private String color;
    private int saleId;
    private Date saleDate;
    private String paymentMethod;
    private boolean delivered;
}
これは「顧客・車・販売情報」すべてを一つに詰め込んだDTOです。
まさに全部入りですね。
表示側で必要な項目だけ使うスタイル
使い方としてはこんな感じです:
System.out.println("顧客名: " + dto.getCustomerName());
System.out.println("車名: " + dto.getCarName());
System.out.println("購入日: " + dto.getSaleDate());
// email や 支払い方法は表示しない
使う側が選ぶという運用ですね。
この方法のメリットとデメリット
メリット(いいところ)
| メリット | 説明 | 
|---|---|
| DTOが増えすぎない | 画面やAPIごとにDTOを作らなくて済むので、クラス数が抑えられる | 
| ロジック共通化がしやすい | Excel出力やログ出力など、共通処理に使いやすい | 
| 開発が早い | ひとまず全項目が揃っているので、個別にDTOを作る手間が省ける | 
たとえば、「とりあえず全部まとめて返しておいて、必要なものだけ使おう」というスタートアップ開発では、とても重宝されます。
デメリット(気をつけたいところ)
| デメリット | 説明 | 
|---|---|
| DTOが肥大化する | 本来関係ない項目まで含まれていて読みづらい | 
| 意図がわからない | 画面やAPIに「なんでこの項目あるの?」という疑問が出やすい | 
| セキュリティリスク | 表示してはいけない項目(例:メールアドレスなど)も含まれてしまう可能性 | 
| 関心の分離(SoC)が崩れる | 特定の処理のためだけの情報が混ざることで、役割が曖昧になる | 
これは「何でも入ってる便利なバッグ」みたいなもので、使い方次第でカオスになります。
解決策:使い分けよう!フルDTOと用途別DTO
では、どうすればバランスよく運用できるでしょうか?
内部処理用と表示用を分けて使うのがベストです!
推奨パターン
| 用途 | DTOの種類 | 備考 | 
|---|---|---|
| DBアクセス・共通処理 | フルDTO(全部入り) | CSV出力、ログ用など内部用途に最適 | 
| 画面表示・APIレスポンス | 軽量DTO(必要項目だけ) | 関心の分離を守り、安全性も向上 | 
マッピングの自動化でラクしよう!
「DTO分けるの面倒じゃないの?」と思うかもしれません。
そんなときは、マッピングライブラリを使いましょう!
代表例:MapStruct(Spring Bootで人気)
@Mapping(target = "carName", source = "carName")
CarSaleListItemDto toListItemDto(CarSaleFullDto fullDto);
フルDTOから必要な項目だけ詰め替えるのを、自動でやってくれます。
IDE補完も効くので、ミスも防げて安心です。
まとめ:DTOの使い分けはプロの第一歩!
「全部入りDTOを作って、表示側で取捨選択する」方法は、十分アリです。
ただし、本番運用にはリスクもあるので、次のように使い分けるのがおすすめです。
- フルDTOは内部処理・共通処理で使う
 - 表示やAPIレスポンスには用途別DTOを使う
 - MapStructなどのマッピングツールで手間を減らす
 
今後の学習の指針
DTO設計は、次のステップでより深く学べます。
- 関心の分離(SoC)の原則について学ぶ
 - MapStructやModelMapperの使い方を習得する
 - セキュリティ設計とDTOの関係を意識する
 - REST APIの設計原則に沿ってDTOを分けてみる
 
ぜひ、DTOの設計力を武器に「読みやすく、安全で拡張しやすいコード」を目指していきましょう!
何かあれば、また気軽に聞いてくださいね。
セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク
投稿者プロフィール
- 代表取締役
 - 
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。 
最新の投稿
山崎講師2025年11月2日Pythonの「なるほど!」と思えるユニークな機能④
山崎講師2025年11月2日Pythonの「なるほど!」と思えるユニークな機能③
山崎講師2025年11月2日Pythonの「なるほど!」と思えるユニークな機能②
山崎講師2025年11月2日Pythonの「なるほど!」と思えるユニークな機能①