Money Forward Developers Blog

株式会社マネーフォワード公式開発者向けブログです。技術や開発手法、イベント登壇などを発信します。サービスに関するご質問は、各サービス窓口までご連絡ください。

20230215130734

iOS Appの開発効率を上げるライブラリ&ツール [Object・JSON変換]

こんにちは。iOSエンジニアの都築です。 今回は、iOS Appの開発効率を上げるライブラリ、ツールに関して紹介します。

皆さんは、JSONからObject、また、ObjectからJSONへの変換をどのように実装されていますでしょうか? Objective-CだとMantleが有名だと思いますが、弊社のiOS Appでは、以前はこの辺りの実装を自前で行っていました。。。

  • NSDictionaryからObjectへの変換
- (id) initWithDictionary:(NSDictionary *)inDictionary
{
    self = [super init];
    if (self) {
        ...
        self.categoryName        = inDictionary[@"category_name"];
        self.categoryType        = inDictionary[@"category_type"];
        ...
    }
    return self;
}
  • ObjectからNSDictionaryへの変換
- (NSDictionary *)createPostData:(MfCategory *)mfCategory
{
    ...
    postDataDictionary[@"category_name"] = mfCategory.categoryName;
    postDataDictionary[@"category_type"] = mfCategory.categoryType;
    ...
}

ただ、この変換作業、単純なJSONならまだしも、階層構造を持つJSONを扱う場合などは結構大変な作業になりますよね。

そこで弊社では、swiftで新規に実装する部分に関してはObjectMapperというライブラリを導入して開発しています。 このObjectMapperはその名の通り、JSONとObjectのマッピングを行うライブラリになり、Mappableプロトコルを実装することでJSONからObject, ObjectからJSONへの変換がかなり楽にできるようになります。

下記のようにMappableプロトコルをModel Classに実装しておけば。。。

class MfCategory: Mappable {
    var categoryName: String?
    var categoryType: String?

    class func newInstance(map: Map) -> Mappable? {
        return MfCategory()
    }

    // Mappable
    func mapping(map: Map) {
        categoryName    <- map["category_name"]
        categoryType    <- map["category_type"]
    }
}
  • JSON StringからObjectへの変換
var mfCategory = Mapper<MfCategory>().map(jsonString)
  • NSDictionaryからObjectへの変換
var mfCategory = Mapper<MfCategory>().map(mfCategoryDictionary)
  • ObjectからNSDictionaryへの変換
var mfCategoryDictionary = Mapper().toJSON(mfCategory)
  • Object -> JSON Stringへの変換
var mfCategoryJSONString = Mapper().toJSONString(mfCategory)

さらに! このMappableに対応したモデルをJSONから自動で生成してくれるJSONExportというツールがあります。 使い方は簡単で、サーバーからのレスポンスとして得られるJSON Stringを、以下のように左側のビューに貼り付けるだけで、JSON Stringを解析してMappableに対応したswiftのコードを自動で生成してくれます。 変数の型等を修正する必要がありますが、必要なコードのほとんどを生成してくれるので、かなりの開発効率アップにつながります。

スクリーンショット 2015-08-17 14.39.57

また、このJSONExportというツール、swift以外にも、様々な形式で出力してくれますので、かなり便利に使えそうです。

スクリーンショット 2015-08-17 14.40.17

ObjectMapperJSONExportの組み合わせ、是非皆さんも試してみてはいかがでしょうか?

ということで、今回はiOS Appの開発効率を上げるライブラリ&ツールの紹介でした。

最後に

マネーフォワードでは、新しい技術も積極的に取り入れていくエンジニアを募集しています。 ご応募お待ちしております!

【採用サイト】 ■『マネーフォワード採用サイト』 https://recruit.moneyforward.com/『Wantedly』 https://www.wantedly.com/companies/moneyforward

【公開カレンダー】 ■マネーフォワード公開カレンダー

【プロダクト一覧】 ■家計簿アプリ・クラウド家計簿ソフト『マネーフォワード』 https://moneyforward.com/家計簿アプリ・クラウド家計簿ソフト『マネーフォワード』 iPhone,iPad家計簿アプリ・クラウド家計簿ソフト『マネーフォワード』 Androidクラウド型会計ソフト『MFクラウド会計』 https://biz.moneyforward.com/クラウド型請求書管理ソフト『MFクラウド請求書』 https://invoice.moneyforward.com/クラウド型給与計算ソフト『MFクラウド給与』 https://payroll.moneyforward.com/消込ソフト・システム『MFクラウド消込』 https://biz.moneyforward.com/reconciliation/マイナンバー管理『MFクラウドマイナンバー』 https://biz.moneyforward.com/mynumber