Rubyの標準モジュール「NKF」で全角英数字を半角に変換する

こんにちは!kossyです!




さて、今回はRubyの標準モジュールである「NKF」を用いて、
全角英数字や全角スペースを半角に変換する方法をブログに残してみたいと思います。





環境
Rails 6.0.2.1
Ruby 2.5.1
MacOS Mojave




方法

こんな感じのCSVファイルがあったとします。
f:id:kossy-web-engineer:20200221205618p:plain

で、このファイルの中身を全て半角でDBに取り込んで欲しいという要件があったとします。


そういう時に使えるのが、NKFモジュールです。

$ rails c

$ require 'csv'

$ require 'nkf'

$ csv = CSV.parse(NKF.nkf('-w -Z1',File.read('./tmp/members.csv')), headers:true)

$ csv.headers
=> ["ID", "NAME"]

$ csv.map do |row|
>    {'1': row[0], '2': row[1] }
>  end

=> [{:"1"=>"001", :"2"=>"TANAKA TARO"},
 {:"1"=>"002", :"2"=>"YAMADA ZIRO"},
 {:"1"=>"003", :"2"=>"SATO SABURO"},
 {:"1"=>"004", :"2"=>"ITO SIRO"},
 {:"1"=>"005", :"2"=>"MOURI KOGORO"},
 {:"1"=>"006", :"2"=>"TAKAHASHI ROKURO"},
 {:"1"=>"007", :"2"=>"SUZUKI SHICHIRO"},
 {:"1"=>"008", :"2"=>"YAMAMOTO HATIROU"},
 {:"1"=>"009", :"2"=>"NAKAGAWA KURO"}]

tmpディレクトリ以下のmembers.csvnkfメソッドにオプション-w と -Z1を付与して読み込みを行なっています。

  • wオプションは文字コードUTF-8で出力することを指定します。
  • Z1オプションは全角英数字や記号、全角スペースを半角に変換するオプションです。

上記のオプションを指定してCSVの読み込みを行なった結果、
["ID", "NAME"] のように半角に変換されました。

NKFには他にもたくさん使い方や便利なオプションがあるので、興味のある方は
公式ドキュメントを参考にしてみてください。

docs.ruby-lang.org