LoginSignup
3
4

More than 3 years have passed since last update.

コード量を減らさずSwiftファイル数を減らしてビルド速度改善

Posted at

概要

私の担当するアプリはSwiftファイル数がかなり多い(1モジュール内のSwiftファイル数も結構多い)のですが、
必要なコード量はそのままにSwiftファイル数を減らすことでビルド速度改善ができないかと言う話になりました。

環境

  • Xcode 11.x
  • iMac (Quad-Core Intel Core i7 4.2 GHz, メモリ32 GB)

先に結論

ビルドするマシンの環境依存の影響もあると思いますが、以下のような結果になりました。
可読性もあるのでそこまでファイル数を減らせていないですが、Swiftファイル数減少に応じて多少ビルド速度改善されました。
(一応複数回計測して平均と取っています)

[削減したSwiftファイル数]
 対応前
  4325
 対応後
  3943 (-382)

[ビルド時間計測結果(フルビルド)]
 対応前
  282秒
 対応後
  276秒 (-6秒程)

やった施策

関連性の強いコードを一つのファイルにする

例えば下記のように特定のファイルに強く依存しているenumを定義しているファイルを

〜Type.swift

enum 〜Type {
  ...
}

〜Processor.swift

class 〜Processor {
  ...
}

強く依存している方のファイル内で定義する

〜Processor.swift

enum 〜Type {
  ...
}

class 〜Processor {
  ...
}

短く冗長的なコードを一つにまとめる

短く冗長的なSwiftファイルが複数ある場合

〜Executable.swift

public protocol 〜Executable {
  ...
}

〜HogeExecuter.swift

struct 〜HogeExecuter: 〜Executable {
 (短いコード量)
}

〜FugaExecuter.swift

struct 〜FugaExecuter: 〜Executable {
 (短いコード量)
}

1つのファイルにまとめて定義する

〜Executable.swift

public protocol 〜Executable {
  ...
}

struct 〜HogeExecuter: 〜Executable {
 (短いコード量)
}

struct 〜FugaExecuter: 〜Executable {
 (短いコード量)
}

サイズなどが異なるだけの定義を1つのファイルにまとめる

サイズ毎に定義があるがSwiftファイルが分かれているのを

Small〜Entity.swift

public class Small〜Entity {
  ...
}

Medium〜Entity.swift

public class Medium〜Entity: Small〜Entity {
  ...
}

Large〜Entity.swift

public class Large〜Entity: Medium〜Entity {
  ...
}

1つのファイルにまとめました。

〜Entity.swift

public class Small〜Entity {
  ...
}

public class Medium〜Entity: Small〜Entity {
  ...
}

public class Large〜Entity: Medium〜Entity {
  ...
}
3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4