圧倒的捗り!!JSONデータからモデルを自動生成してくれるquicktypeが便利すぎるので紹介してみる

2017.11.30

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

quicktypeとは

JSONデータから様々なプログラミング言語のモデルを自動生成してくれるサービスです。
リポジトリはこちら

記事執筆時点で対応している言語は以下です。

  • C#
  • Go
  • C++
  • Java
  • TypeScript
  • Simple Types
  • Swift
  • Elm
  • Schema

Web上で自動生成できるよ

quicktypeはコマンドラインからモデルを自動生成することもできますが、Webも用意されているのでとても簡単に使えます。 ページを開いて、左側でTop-level typeを指定し、JSONデータを貼り付ければ選択されている言語のモデルに変換されます。

以下はSwift 4で自動生成してみた例です。

こちらが自動生成されたコード。Swift 4なのでCodableプロトコルに対応してますね!素敵すぎる!! デコード・エンコードの処理やCodingKeysも生成してくれるので本当に便利ですね。

// To parse the JSON, add this file to your project and do:
//
//   let gettingStarted = GettingStarted.from(json: jsonString)!

import Foundation

struct GettingStarted: Codable {
    let greeting: String
    let instructions: [String]
}

// MARK: Top-level extensions -

extension GettingStarted {
    static func from(json: String, using encoding: String.Encoding = .utf8) -> GettingStarted? {
        guard let data = json.data(using: encoding) else { return nil }
        return from(data: data)
    }

    static func from(data: Data) -> GettingStarted? {
        let decoder = JSONDecoder()
        return try? decoder.decode(GettingStarted.self, from: data)
    }

    static func from(url urlString: String) -> GettingStarted? {
        guard let url = URL(string: urlString) else { return nil }
        guard let data = try? Data(contentsOf: url) else { return nil }
        return from(data: data)
    }

    var jsonData: Data? {
        let encoder = JSONEncoder()
        return try? encoder.encode(self)
    }

    var jsonString: String? {
        guard let data = self.jsonData else { return nil }
        return String(data: data, encoding: .utf8)
    }
}

// MARK: Codable extensions -

extension GettingStarted {
    enum CodingKeys: String, CodingKey {
        case greeting = "greeting"
        case instructions = "instructions"
    }
}

ローカルにインストールして使うには

以下のコマンドでローカルにインストールできます。
npm i -g quicktype

URLを指定しての自動生成もできます。以下はBitcoin APIからC#のコードを自動生成する例。
quicktype -o LatestBlock.cs https://blockchain.info/latestblock

オプションが多数あるので詳細はREADME.mdを見てみてください。

おわりに

今回はJSONデータからモデルを自動生成してくれるquicktypeをご紹介しました。
自動生成できるところはこういうサービスをどんどん使って楽したいですね。