iOS開発でも未使用コードを検知したい
概要
どのプロジェクトでもどこからも参照されていないコードが1つや2つあるのではないかと思います。
そしてこの数が増えるにつれノイズが多くなるので、見たいコードが見づらくなるので開発の効率が落ちてしまいます。
そこで本記事ではPeripheryというCLIパッケージを用いて未使用コードを検知する方法と、CIビルドにおいて未使用コードがあればPull Requestに未使用コード箇所をコメントする方法を述べていきます。
使用するCLIツール
- mint (Swift製パッケージ管理ツール. 今回は説明を省略します.)
- Periphery
- Danger
Periphery
Peripheryとは、未使用コードを分析するSwift製のツールです。
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を実行し、その結果を解析するようにしました。
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
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は以下のようにします。
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に以下のような感じでコメントしてくれます。
まとめ
簡単に未使用コードを検知することができるので、是非導入してみてください!
Discussion