Chapter 01無料公開

課題

FromAtom
FromAtom
2020.09.26に更新

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ツールの管理を試しました。

脚注
  1. HomebrewでもFormula提供者が対応していればバージョン指定してインストールが可能ですが、全ての過去バージョンがインストールできるかはFormula提供者が対応するかどうかに依存します。 ↩︎

  2. アプリ開発のみの場合はSystemのRubyを使えば良いのですが、個人的にRubyでのOSS開発を行っている背景があります。 ↩︎

  3. 『問題Aを解決するにはBが必要で、Bを使うためにはCが必要で……』といった状況を表す言葉です。 ↩︎