半角カナが入力されているファイルを抽出

お客様から、半角カナを全角カナにしておくれと依頼がきていたので、railsのrootから半角カナを含むファイルを抜き出したくてスクリプト書きました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/usr/bin/env ruby

require 'find'

except_ext = %w(.log .yml .jpg .JPG .jpeg .png .pid .ttf .woff .md .json .ico .eot .gif)                                                    # 除外するファイル拡張子を設定
except_pattern = %w(.git test .DS_Store migrate hankaku_kana_checker RackMultipart sprockets letter_opener underscore cache)                # 除外するパスに含まれる文字列を指定

# チェックする半角カナの配列
han_kana =  %w{ア イ ウ エ オ カ キ ク ケ コ サ シ ス セ ソ タ チ ツ テ ト ナ ニ ヌ ネ ノ ハ ヒ フ ヘ ホ マ ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ワ ヲ ン ァ ィ ゥ ェ ォ ャ ュ ョ ッ ゙ ゚ 、 。 ー 「 」}

Find.find(File.expand_path('./')) do |path|
  next if File.directory?(path)
  next if except_ext.include?(File.extname(path)) # 調査しない拡張子
  next if path.match(Regexp.new(except_pattern.join("|")))

  begin
    File.readlines(path).each.with_index(1) do |line, idx|
      @idx, @line = idx, line
      # CP932のファイルが混在してたのでダメならCP932で変換
      include_han_kana = begin
                           line.match(Regexp.new(han_kana.join("|")))
                         rescue
                           line.encode("UTF-8", "CP932").match(Regexp.new(han_kana.join("|")))
                         end

      if include_han_kana
        p [idx, path, line].join(": ")
      end
    end
  rescue => ex
    p "####################################################################################################"
    p [@idx, @line].join(": ")
    p [ path, ex.message ].join(":")
    p ex.backtrace.first
    p "####################################################################################################"
  end
end

再帰的にディレクトリをくだって、探します。
含めたくないファイル名やディレクトリ名。拡張子を指定できます。

良かったら使ってみてください。

Comments