365 文字
2 分

Rubyで半角カナへ変換

2014-05-21
2026-07-13

Rubyで全角カナを半角カナに変換するには、nkfを使うのが手軽です。

> require 'nkf'
> NKF.nkf('-w -Z4 -Z1 -x', 'ゼンカク')
> ゼンカク

オプションの説明#

nkfコマンドと同じオプションが使えます。

オプション説明
-wUTF-8で出力する
-Z4全角カナを半角カナに変換する
-Z1全角スペースを半角スペースに変換する
-x半角カナを全角カナに変換する既定の挙動を抑止する

-xを指定しないと、半角カナが全角カナに変換されてしまいます。-Z4だけだと相互変換が勝手にかかってしまうので、-xを指定して全角→半角の一方向にします。

Ruby 3.4以降の注意点#

nkfはRuby 3.4でdefault gemからbundled gemに変更されました。Bundlerを使うプロジェクトでは、Gemfileに明示的に追加する必要があります。

# Gemfile
gem "nkf"

Ruby 3.3では「nkf will no longer be part of the default gems since Ruby 3.4.0」という警告が出るだけで動きますが、Ruby 3.4以降のbundle実行環境ではGemfileに書かないとrequire 'nkf'が失敗します。

なお、逆方向の変換(半角カナ→全角カナ)だけであれば、gemを追加しなくても標準のString#unicode_normalizeで可能です。

> 'ゼンカク'.unicode_normalize(:nfkc)
=> "ゼンカク"

全角→半角カナ方向はUnicode正規化では表現できないため、nkfのようなライブラリの出番になります。

この記事が役に立ったら
GitHub Sponsorsで応援できます

コメント