概要
iOSのコード内で使用しているAPIのリストを作成したいという要望があり、何か適当なコードを書いて一発で引っこ抜いたろと安易な気持ちでRuby書いてみました(Rubyは全く書いたことないのに)。
その備忘録です。
きっと雑なコードなのでしょうけれども目的は達成できたのでヨシ!
実装内容
プロジェクトディレクトリ配下の .swift ファイルからAPIのパスを抽出するコードをrubyで書きました。
なぜrubyだったかというと、bashで抽出しようとしたところコード上のスペースやタブでsplitされコード1行を1行として扱えなかったためです(あと単純に勉強したかったという意図も)。
コード上のAPIのパスはおおかた下記のような書き方で記されていることを想定しています。
"/abcdef/xxx"
"/abcdef/yyy/\(id)"
return "/abcdef/xxx"
.get("/abcdef/yyy/\(id)") {
下記の内容の.rbファイルをプロジェクトディレクトリ直下に置き、rubyコマンドで実行することで結果をCSVファイルに出力します。
get_api_list.rb
results = []
## プロジェクトディレクトリ以下のディレクトリを抽出
Dir.glob("*") do |dirname|
## 特定のディレクトリ(下記の場合テストコードのディレクトリ)は除外
if dirname != 'XXXTests'
## 上記で抽出したディレクトリの中からswiftファイルを再帰的に抽出
Dir.glob("#{dirname}/**/*.swift") do |filename|
## /abcdefを含むコードを抽出
grep_results = File.readlines("#{filename}").grep(/.*\"\/abcdef.*\".*/)
## ファイル名と/abcdefの文字列のみに加工
grep_results.each { |line| results << filename + ',' + line.slice(/\"\/abcdef.*\"/).gsub(/\"/, '') }
end
end
end
## csvファイルに書き出し
File.write("result.csv", results.join("\n"), mode: "w")
## 実行
$ ruby get_api_list.rb