[Xcode/Swift] 今更だけど、ObjectMapperを学び直す①

1. はじめに

学び直そうと思ったきっかけ

SwiftでJSONを扱う = Codable がほぼ標準の今の時代だけど、最近入ったプロジェクトでバリバリObjectMapperベースで実装されてたので、学び直そうと思ったというのがきっかけ。
割とObjectMapperを学び直す必要がある場面は意外とあると感じた今日この頃。

  • 長年運用されている レガシーiOSプロジェクトにアサインされた時
  • Codable では表現しづらい 柔軟なJSON構造のとき
  • キー変換や型変換が多く、Decodable が煩雑になっているケース
  • すでにObjectMapper前提で書かれたAPI層の保守・改修

ObjectMapper =「新規では使わないけど、読めないと困るライブラリ」という認識かなという感じです、おそらく。

この記事の対象読者

  • SwiftでのJSONパース経験がある人
  • Codable は使ったことがあるが、ObjectMapperは曖昧な人
  • 既存プロジェクトのObjectMapperコードを理解したい人
  • 「なぜ昔はObjectMapperが使われていたのか」を知りたい人

※ Swift初心者でも読み進められますが、struct / class / Optional の基礎は前提とします。


2. ObjectMapperとは?

ObjectMapperの概要

ObjectMapper = JSONとSwiftのModelを相互変換するためのライブラリ

最大の特徴は、
👉 JSONの構造とModelのマッピングをコードで明示的に書けること

その中心となるのが Mappable プロトコルです。

protocol Mappable {
    init?(map: Map)
    mutating func mapping(map: Map)
}

この2つを実装することで、JSON ⇄ Model の変換が可能になります。


どんな場面で使われてきたか

ObjectMapperが広く使われていたのは、Swift 2〜4時代だそう (その時はまだエンジニアですらなかったのでググって知っただけ)

当時の状況:

  • Codable が存在しない or 実用的でなかった
  • JSONの構造が複雑(ネスト・キー不一致・型揺れ)
  • API仕様が頻繁に変わる (これは今もな気がするけど)

といった背景があり、
柔軟に対応できるObjectMapperは非常に重宝されていたらしいです。

強みを発揮するケース:

  • ネストしたJSONをフラットなModelにしたい
  • JSONキーとプロパティ名が一致しない
  • 日付やEnumのカスタム変換が多い

現在の立ち位置(Codable登場後)

Swift 4以降、Codable が登場し状況は一変:

観点ObjectMapperCodable
記述量多い少ない
柔軟性高いやや低い
標準対応
新規開発

現在のObjectMapperは、

  • 新規開発で積極採用するライブラリではない
  • 既存コードを理解・保守するために知っておくべき存在

というポジションに落ち着いているという感じ。


3. ObjectMapperの導入方法

CocoaPodsでの導入

レガシープロジェクトでは、今でもCocoaPodsが使われていることが多いです。

pod 'ObjectMapper'

Swift Package Managerでの導入

最近のXcodeでは、SPMが主流です。

  1. Xcode → File > Add Packages
  2. リポジトリURLを入力 https://github.com/tristanhimmelman/ObjectMapper
  3. バージョンを指定して追加

導入時の注意点

  • メンテナンスは最低限(活発ではない)
  • Swiftの最新機能(Macros / Observation等)には非対応?
  • struct を使う場合、mutating が必要

次から、基本的な使い方やよく使うマッピング手法を学んでいきましょう。

[Xcode/Swift] 今更だけど、ObjectMapperを学び直す②