iOSアプリ開発では、次のリストに示すように様々なSwift製のCLIツールを利用します。
- realm/SwiftLint
- nicklockwood/SwiftFormat
- Carthage/Carthage
- mono0926/LicensePlist
- mac-cain13/R.swift
- SwiftGen/SwiftGen
- yonaskolb/XcodeGen
これらのツールはHomebrewもしくはCocoaPodsで導入している人が多いでしょう。しかし、Homebrewはバージョン管理[1]とプロジェクトローカル単位でのバージョン固定に対応していません。そのため、チーム開発ではチームメンバーそれぞれの環境とCI環境で、バージョンを統一できない問題が起きます。開発初期段階ではBrewfile
を利用することで一見揃ったように見えますが、複数のアプリを開発したり、チームメンバーが増えた際にこの問題が顕在化してきます。
一方で、CocoaPodsでツールを管理した場合はバージョン固定の問題は解決されます。しかし、クリーンビルドをする度にこれらのツールのビルドも走ってしまいます。アプリの規模が大きくなってくると、自然とビルド時間も長くなります。Swift1系や2系の時とは異なり、今では差分ビルドも効くようになっているため、ビルド時間は比較的短くなってきました。しかし、クリーンビルドをするたびにアプリには含めないツールのビルドも走るのは、気持ちの良いものではありません。個人的には、CocoaPodsを利用する際にGemfile
の準備や、rbenv
やruby-build
によるRubyのバージョン管理も必要[2]となるため、Yak Shaving[3]感が強いのも苦手です。
これらの課題を解決するため、Mintを利用したCLIツールの管理を試しました。