Generative Programming in Swift // Speaker Deck
Generative Programming とは?
生成的プログラミング(英: Generative programming)とは、ジェネリックなクラス、プロトタイプベース、テンプレート、アスペクト、コード生成などの技法を使ってソースコード作成を自動化し、プログラマの生産性を向上させるプログラミングのスタイルである。ソフトウェアコンポーネントなどのコード再利用の技法とも連携して使用される。
会場には Generative Programming を実施した方がほとんどいないようでしたが、 Generics も Compile 時のことを考えれば C++ のテンプレートと似ていて生成的プログラミングの一種となります。なので、知らず知らずのうちに Generative Programming は大体の Swift 経験者なら経験しています!
今回の LT ではコード生成 (Code Generation) の方をお話したかったので、自分が Swift でクライアントアプリを作るときに使用している ishkawa/APIKit を元にコード生成をするデモコードを前日の夜にちゃちゃっと作ってみました。
kaneshin/genkit
まだ、デモ程度の実装しかしていないです。
まず、JSON Schema を用意しておき、それを元に genkit を使用します。使用方法は generate.go に書いてありますが
go run /path/to/genkit/cmd/genkit/main.go /path/to/genkit/cmd/genkit/gen.go -path=./Sources -output=apikit_gen.swift ./api.json
の様に使用します。コマンドとしてインストールしててもOKです。
go get github.com/kaneshin/genkit/cmd/genkit genkit -path=./Sources -output=apikit_gen.swift ./api.json
これを実行すると、 apikit_gen.swift が生成されます。ただ、 Swift には gofmt に相当するものが無いのでコードのインデントが崩れています。
(swiftformat で探してみると案外あるんですね。LT 前に知りたかった…)
Swift Code Generators
ちなみに、他にも Generator は存在しています。
おわりに
別の LT で BaseViewController の話がありましたが、コード生成前提でコードを設計すると、神クラスのような煩雑なコードをつくり上げるようなことがなくなる気がしているので、コード生成はかなりおすすめです。 社内プロジェクトでもコード生成は結構使っているので、実装者はビジネスロジックを考えることに集中することができます。本当におすすめです。
buildersconではGo Python PerlのコードをJSON Schemaから作ってる。便利 #iosdc
— Daisuke Maki (@lestrrat) August 20, 2016
lestrrat さんも builderscon を作っているので、是非参考にすると良いかもです!