LoginSignup
2
2

More than 1 year has passed since last update.

長年運用しているプロジェクトがPeripheryを導入してスリムアップした話

Last updated at Posted at 2022-12-22

これは

この記事は、Yamapエンジニア Advent Calendar 2022の12月23日の記事です。

こんにちは、YamapでiOSエンジニアをやっている竹ノ内です。

普段はiOSアプリの開発に従事しています。

Yamapアプリは、歴史のあるアプリで元々はObjective-Cで書かれていましたが、それをSwift化したり、度々のリファクタリングと並行しながら、機能追加を重ねて成長してきました。

ただ、長年運用されている影響で全体を通して、
使われていないコードががそのままになっているところもあり、見通しが悪い箇所がありました。

なので、Peripheryを導入して、シェイプアップを図ることにしました。

そもそもPeripheryとは

Peripheryとは使われていないコードに対して、警告を出してくれるライブラリです。

The goal of Periphery is to report instances of unused declarations. A declaration is a class, struct, protocol, function, property, constructor, enum, typealias, associatedtype, etc. As you'd expect, Periphery is able to identify simple unreferenced declarations, e.g a class that is no longer used anywhere in your codebase.
(Peripheryの目的は、使用されていない宣言のインスタンスを報告することです。宣言とは、クラス、構造体、プロトコル、関数、プロパティ、コンストラクタ、enum、typealias、associatedtypeなどのことです。予想通り、Peripheryは参照されない単純な宣言を特定することができます。例えば、コードベースのどこでも使用されなくなったクラスなどです。)

とのことで、
宣言して使われてない変数だけでなく、メソッドの不要な引数に対しても警告を表示してくれます。

Homebrew, SPM, CocoaPodsからインストールすることができます。

日本語だとこちらがわかりやすいかと思います。

実際に導入してみた

元々どんな状態だったのか

プロジェクト内で、Peripheryを実行すると、約1000件の警告が出ました。
Periphery実行前.png

導入後はどうなったのか

リファクタリングも同時に並行しながら進めていたので、全てを消したわけでないですが、
最終的に、数千行のコードの削減をすることができました🤝

Periphery導入後.png
(最終的なPRです)

ビルド時間は影響あった?

Periphery導入後で、約6秒くらいビルド時間が短くなりました。

正直微妙な差ではありますが、各メンバーやCIでのビルド時間が短くなることを考えると、
もっと大きな差になりそうです。

導入してみての感想

  • 意外と機械的に消すことはできなかった
    • 誤検知されているパターンもあった
    • 想定より時間がかかった
  • 実装ミスに気が付くこともできてよかった
    • Protocolではなくて、Classを参照してるところなども修正できた
  • リファクタリングを並行することができたので、コード削減以上のものができた

今後は?

毎回のビルドでPeripheryを走らせると、CIが厳しいので、1日一回実行して、Slack等に通知できれば、継続的に改善することができそうです。

以上

終わり

2
2
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
2
2