Sourceryの使い方を調べた
Sourceryの使い方を調べたので記録を残しておく
Sourceryとは
Sourcery は Swift のボイラープレートを自動生成するためのツール try! Swift Tokyo 2018における作者のトーク によると Sourcery は 5000 以上の実プロジェクトで使われていて、 Apple 社員のなかにもユーザがいるとのこと。
モチベーション
Swift は厳格な静的型付言語であるがゆえ、大量のボイラープレートが必要になる。例えばオブジェクト同士を比較するためのEquatableも開発者が実装する必要がある。1つのクラスであれば大した作業ではないが、クラス数が増えることで大変な手間となり、バグが混入する原因にもなる。それらを自動化するためのツールが Sourcery である。
利点として導入にリスクがなく、不要になったらテンプレートを削除すればOKであること、タイプセーフであることが挙げられる。
導入方法
Sourcery のリポジトリにあるサンプルプロジェクト を参考にするとよい。
1. ディレクトリ作成
以下のディレクトリをあらかじめ作成しておく
2. Cocoapods
iOSアプリで使用する場合、 Cocoapodsを使ってインストールが可能。
Podfileの内容は以下のとおり
target 'YoutTargetName' do use_frameworks! pod 'Sourcery' end
3. Run Script の設定
TARGETS -> プロジェクト名 -> Build Phrases -> New Run Script Phrase を追加して、ビルドの度に以下のスクリプトを実行するように設定する
各引数に
を指定する
"${PODS_ROOT}/Sourcery/bin/sourcery" --sources "${SRCROOT}/YourProjectName" --templates "${SRCROOT}/Templates" --output "${SRCROOT}/CodeGenerated"
もちろんBuild Phrasesにこのスクリプトを追加せず、手動で実行する運用でも問題ない。
4. プロトコルの実装
AutoEquatable, AutoHashableなど自動生成するプロトコルを予めどこかに実装する。これをやっておかないとツールがエラーになり、生成に失敗する。
protocol AutoEquatable {}
5. ビルド
1 ~ 4 までの手順が完了すれば、ビルドする度にSourceryによるコード生成が行われる。
Templatesの書き方
テンプレートは Stencil という Django template, Mustache に似た記法を使って書く。
リポジトリ にサンプルがあるのでこの辺りから出発するのが良さそう。