Ruby の正規表現・鬼雲で判別できた

re_hira = /\p{hiragana}{1}/ # 平仮名
re_kata = /\p{katakana}{1}/ # カタカナ

str = '愛あいカキうクx'

str.each_char do |ch|
ch.match( re_hira ){ |md| puts "平仮名 : #{ md[ 0 ] }" }
ch.match( re_kata ){ |md| puts "カタカナ : #{ md[ 0 ] }" }
end

出力
平仮名 : あ
平仮名 : い
カタカナ : カ
カタカナ : キ
平仮名 : う
カタカナ : ク