SwiftSyntaxに依存したSwiftのモジュールをビルドしようとすると、ビルド時間がやたらかかります。
なぜかというと、SwiftSyntaxのソースコードの量が巨大で、コンパイル時間に時間がかかっているからです。
SwiftSyntaxに依存したプロジェクトのビルドタイムラインを見てみると、ざっと40秒ほどSwiftSyntaxのコンパイル時時間がかかっています。
OSSや自作のSwift macrosを使っている場合は、SwiftSyntaxに依存しているのでビルド時間のボトルネックになってしまっているケースが多いと思います。
そんなSwiftSyntaxですが、Xcode16.4からはプリビルドされたSwiftSyntaxが利用できる様になったことで、ビルド速度が爆速にできる様になりました。
現状、SwiftSyntaxの以下バージョンでプリビルド版が使える様です。
- 600.0.1
- 601.0.1
さっそく試してみた
以下コマンドをコンソールで実行して UserDefaultsの設定を行うことで、SwiftSyntaxのプリビルドされたものが利用できる様になる様です。
defaults write com.apple.dt.Xcode IDEPackageEnablePrebuilts YES
ちゃんと設定できているか確認したい場合は以下コマンドで確認できます。
defaults read com.apple.dt.Xcode IDEPackageEnablePrebuilts
上記設定が終わった後、Reset Package Cache
などでパッケージ管理のリロードを行ったら準備完了です。(私は、最初UserDefaultsの設定ができればOKだと思っていたら、全然ビルド時間変わらずハマってしまいました。)
ビルドの結果は以下の通りで、51s 264ms → 5s 417msと劇的にビルド速度が向上しました。
感想
ビルド速度の改善のメリットはめちゃくちゃ大きいと思いましたが、現状はまだ既知のエラーもあるようなので、何も考えず取り入れても良いような代物ではないなと思いました。
その一つとして、テスト用のビルドが通らなくなるというものです。
自分の環境では再現しなかったので、100%再現するわけではなさそうですが、業務に取り入れる時には、この問題が再現しないかは確認したほうが良さそうです。