オブジェクト変換におけるAutoMapperの使い方

はじめに

はじめまして!2025年に新卒入社し、テクノロジー本部に所属している原です。
今回は私がC#でASP.NET Coreを学習している中で知った「AutoMapper」というライブラリについて紹介したいと思います。
※この記事は「エムティーアイ Blog Summer 2025」の 8/28 分の記事です。

目次

  1. AutoMapperとは
  2. 使用例
  3. マッピング設定
  4. ASP.NET Coreでの登録方法
  5. まとめ
  6. 感想

1. AutoMapperとは

AutoMapper公式ドキュメントによると、AutoMapperは「似た構造を持つオブジェクト間のマッピングを自動化するライブラリ」とされています。 このライブラリはEntityからDTOへの変換処理などを簡単に行えるため、コードの可読性や保守性を高めることができます。

特にAPI開発において、EntityからDTOへの変換処理で頻繁に利用されます。 次の章では、手動での変換とAutoMapperを使った変換の違いを、具体的なコード例を通して紹介します。

docs.automapper.io

2. 使用例:Entity→DTOへの変換

今回は簡単なサンプルコードを使って使用イメージを紹介します。 APIを作成する際、Entityからクライアントにレスポンスを返すために、DTOへ変換して送信するケースが多いと思います。
まずは、その変換処理を手動で実装した場合のコードから見ていきましょう。

public class Product
{
    public string Id { get; set; }
    public string Name { get; set; }
    public int Price { get; set; }
}

上記のようなEntityに対して

public record ProductDto(string Id, string Name, int Price);

DTOを用意し...

public class ProductController
{
    public ProductDto[] ConvertToDto(Product[] products)
    {
        var response = products.Select(p => new ProductDto(
            p.Id,
            p.Name,
            p.Price
        )).ToArray();

        return response;
    }
}

コントローラーでDTOに情報を変換してクライアントに返します。
このような手動の変換処理では、DTOのコンストラクタにすべてのプロパティを明示的に渡す必要があるため、コード量が増えがちです。また、EntityやDTOの構造が変更されるたびに変換処理を修正する必要があり、型変換ミスなどのリスクも高まります。
こちらに対してAutoMapperを適切に使用すると

private readonly IMapper _mapper;

public ProductController(IMapper mapper)
{
    _mapper = mapper;
}

public ProductDto[] ConvertToDto(Product[] products)
{
    var response = _mapper.Map<ProductDto[]>(products);
    
    return response;
}

上記のようにシンプルな記述で変換処理を行うことができます!また構造が変わっても、プロパティ名と型が一致していれば変換処理の修正は不要になるため、保守性も高まります。

次の章から具体的な設定方法を紹介していきます。

3. マッピング設定

AutoMapperを使った変換処理を行うにはProfileクラス(AutoMapperが提供しているベースクラス)を継承して、マッピングルールを定義する必要があります。

using AutoMapper;

public class ProductProfile : Profile
{
    public ProductProfile()
    {
        CreateMap<Product, ProductDto>();
    }
}

今回はCreateMap内でProductからProductDtoへの変換を定義しています。 これによりプロパティ名と型が一致しているものを自動でコピーします。

public record ProductDto(string Id, string ProductName, int Price);

またこのProductNameのように一致していないものがある場合は

CreateMap<Product, ProductDto>()
    .ForMember(dest => dest.ProductName, opt => opt.MapFrom(src => src.Name));

明示的にマッピングすることでコピーされます。

4. ASP.NET Coreでの登録方法

Profileを使用するためにProgram.csなどに以下のように記述します。

builder.Services.AddAutoMapper(typeof(ProductProfile));

上記の記述によりIMapperを使ってオブジェクトの変換を行うことができます!

5. まとめ

今回はAutoMapperというライブラリについて紹介しました。
今回はシンプルなサンプルコードだったためコードもそこまで冗長ではありませんでしたがEntityの要素などが多くなるにつれて増える変換の処理などがこのライブラリを使用することにより楽になると思います!

6. 感想

私自身オブジェクトの変換部分で型変換などのエラーで躓くことが非常に多かったので今回のようなライブラリを知れたこと自体がまず学びになりました。今後も、コーディングの負担を軽減できるような技術やツールを積極的に学んでいきたいと思います!
最後まで閲覧いただきありがとうございました!