json-schemaからSwiftのAPIクライアントを自動生成するツールを作った
はい、最近なにかと流行っている?json-schema界隈、いかがお過ごしでしょうか。
json-schemaからSwift, Java(未実装)のAPIクライアントを自動生成するツールAriesを作りました。
機能についてはもう言うこと無いですね。JSONSchemaからSwiftのAPIClientを生成するジェネレータです。Promiseライクに操作したかったので ReactKit/SwiftTask · GitHubを採用。Networking libraryとしてAlamofireを使っています。
なぜ作った
アプリの開発を行うとなったら、今はiOS, Andriodどっちも作るのが当たり前ですよね! どうしたら楽して手っ取り早くクロスフォームでアプリを開発できるのかと、調査を重ねてました。
Xamarin => かなり良さげだけど高い、、お高い+c#知らん。あとロックインコワい。RubyMotion => 好きだったしAndroidも対応きたけど最近下火。 C++でコード共通化 => Dropboxがやってたけど正直かなり鬼門。知識もWebにほとんど落ちてないので1歩歩くごとに地雷を踏みそう。試すしてみたが心折れた。 Rubotoはちょい気になったけどAndroid,Javaの知識薄いので回避。その他大勢のクロスプラットフォームツールたち検討する余地ほぼなし。HTML5も現状検討の余地なし。などなど...クロスプラットフォーム開発についてあとで別記事でまとめておきたい。
頭を悩ませた結果行き着いた先がここでした。
- iOS,Androidともに知見のおおいネイティブで実装は行う。
- データベースにRealm, APIクライアントにAriesを使うことでアプリのバックエンド周りの設計と実装をiOS,Androidで共通化させて楽する。アプリのバックエンドの通信周りとデータベース周りを共通化できれば、その分UI層に力を注げるしなかなか良さげ。
なのでどんな感じになるだろうかととりあえず実装してみた。
使い方
コード生成は下記のコマンドにて
$ bin/aries generate json-schema.json --name MyApi \ --url http://api.myapp.com \ --output /path/to/dir
生成されるAPIクライアントはこんな感じ。テンプレートからの生成のためインデントずれてるのはご愛嬌。json-schemaはr7kamura/rack-json_schema · GitHubから拝借しました。
これから
まだエクスペリメンタルな実装なのでいろいろと問題を抱えています。
実運用できるまでブラッシュアップさせたい。