🔍

iOS開発でも未使用コードを検知したい

2021/01/06に公開

概要

どのプロジェクトでもどこからも参照されていないコードが1つや2つあるのではないかと思います。
そしてこの数が増えるにつれノイズが多くなるので、見たいコードが見づらくなるので開発の効率が落ちてしまいます。

そこで本記事ではPeripheryというCLIパッケージを用いて未使用コードを検知する方法と、CIビルドにおいて未使用コードがあればPull Requestに未使用コード箇所をコメントする方法を述べていきます。

使用するCLIツール

  • mint (Swift製パッケージ管理ツール. 今回は説明を省略します.)
  • Periphery
  • Danger

Periphery

Peripheryとは、未使用コードを分析するSwift製のツールです。

https://github.com/peripheryapp/periphery

Peripheryのセットアップ

1. Mintfileを生成し、以下を追記します。

peripheryapp/periphery@2.3.1

2. mint bootstrapでインストールします。

Danger

Dangerは、Pull Requestに対して事前に決めたルールに則ってAuto Reviewしてくれるツールです。
事前に決めたルールとは、「Pull Requestの差分は500まで」や「Lintのルールに則っているか」などです。

Dangerのセットアップ

1. bundlerをインストールする(必須ではないが、bundlerを使ったほうが管理しやすい。)

gem install bundler

2. Gemfileを生成する

bundle init

3. Gemfileに以下を追記する

gem "danger"

4. Dangerをインストールする

bundle install --path .bundle/

5. GemfileとGemfile.lockをコミットする

6. Danger公式ページを参考にPull RequestにBotユーザーがコメントできるようにします。

未使用コードを分析する

私は以下2つのスクリプトを作成してPeripheryを実行し、その結果を解析するようにしました。

run_unused_code.sh
DIR="report"
if [ ! -d $DIR ]; then
  mkdir $DIR
fi

mint run periphery scan --project xxx.xcodeproj --targets ターゲット名 --schemes スキーム名 --format "xcode" > report/unused_code_report.txt
parse_unused_code_report.rb
Dir.mkdir('report') unless Dir.exist?('report')

system('bash Scripts/Bitrise/run_unused_code.sh')

warnings = []

File.open('report/unused_code_report.txt', mode = 'rt') do |f|
  f.each_line(rs='') do |line|
    warnings.push(line.chomp(rs='')) 
  end
end

File.open('report/parsed_unused_code_report.txt', mode = 'w') do |f|
  f.write(warnings[1])
end

Dangerfileは以下のようにします。

Dangerfile
File.open("report/parsed_unused_code_report.txt").each do |warnings|
  warnings.split("\n").each do |warning|
    warn(warning)
  end
end

あとはCIビルドで上記スクリプトを実行します。今回はBitriseでの実行を想定しているので、bitrise.ymlに以下を追記します。

steps:
- script@1:
    inputs:
    - content: |-
        gem install bundler
        bundle config set path '.bundle/'
        bundle install
    title: Bundle install
- script@1:
    inputs:
    - content: 'ruby parse_unused_code_report.rb '
    title: Output unused code
- script@1:
    inputs:
    - content: bundle exec danger --verbose
    title: Run danger

すると以下のように未使用コードがあるとPull Requestに以下のような感じでコメントしてくれます。

まとめ

簡単に未使用コードを検知することができるので、是非導入してみてください!

GitHubで編集を提案

Discussion