0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Rubyでソースコードから特定の文字列を抽出する

Last updated at Posted at 2023-03-01

概要

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?