🔄

AutoMapper から Mapster に移行してみる

に公開

はじめに

AutoMapper が v15.0 より商用利用の場合は有償ライセンスになることについては前回の記事で紹介しました。

https://zenn.dev/karamem0/articles/2025_07_10_090000

とはいえ、諸事情で有償ライセンスにできない場合もあります。そこで今回は AutoMapper を代替ライブラリである Mapster に移行してみます。

実行手順

Mapster の標準的な利用方法は Adapt 拡張メソッドによるマッピングですが、AutoMapper のような IMapper も利用できます。AutoMapper からの移行であれば、こちらを利用すると修正が少なくて済みます。

- using AutoMapper;
+ using MapsterMapper;

  public class SomeController(IMapper mapper)
  {

      private readoly IMapper mapper = mappper;

      public IActionResult Get([FromBody] ViewModel viewModel)
      {
          var domainModel = this.mapper.Map<DomainModel>();
          ...
      }

  }

AutoMapper の Profile は Mapster の IRegister に置き換えられます。

- public class AutoMapperProfile : Profile
- {
-
-     public AutoMapperProfile()
-     {
-         this.CreateMap<ViewModel, DomainModel>()
-             .ForMember(d => d.CreateTime, o => o.MapFrom(s => DateTime.Parse(s.CreateTime)));
-     }
-
- }
+ public class MapperConfiguration : IRegister
+ {
+
+     public void Register(TypeAdapterConfig config)
+     {
+         config.NewConfig<ViewModel, DomainModel>()
+             .Map(d => d.CreateTime, s => DateTime.Parse(s.CreateTime));
+     }
+ 
+ }

依存関係注入 (DI) を行うには Mapster.DependencyInjection パッケージの追加が必要です。

  var builder = WebApplication.CreateBuilder(args);
- builder.Services.AddAutoMapper(typeof(Program).Assembly);
+ TypeAdapterConfig.GlobalSettings.Scan(typeof(Program).Assembly);
+ services.AddSingleton(TypeAdapterConfig.GlobalSettings);
+ services.AddSingleton<IMapper, ServiceMapper>();

おわりに

高度なマッピングについては今後検証が必要ですが、単純なマッピングであれば移行は容易でした。公式情報によると、パフォーマンス面でも AutoMapper より優れているため、今後は積極的に活用していきたいです。

Discussion