概要
mojimojiというgemを作った。RubyのStringクラスを拡張するgemである。
https://github.com/mikaji/mojimoji
https://rubygems.org/gems/mojimoji
背景
よく日本のWebサービスの入力フォーム内で、全角入力のみを強いられることがある。例えば住所の入力などに多い。
しかしユーザにそのような強制をさせるのはサービス開発者としてダサいし、サービス側の都合なんだからサービス側で対応すべきである。
目的
ユーザがストレスなく入力できるようにしたい。そして入力の不備があることでコンバージョンが下がることを防ぐ。
というわけで、半角→全角に自動的にコンバートするメソッド拡張を提供するmojimojiというgemを作った。
mojimojiの特徴
https://github.com/mikaji/mojimoji のREADMEを読んでくれ。
簡単にいうと、
using Mojimoji
> string = 'HOGE'
=> "HOGE"
> string.to_em
=> "HOGE"
のように半角を全角に変換する。このようなgemはほかにもあって、
https://github.com/gimite/moji
が有名だ。このgemは素晴らしく、私の作ったmojimojiも裏側はほとんどmojiを呼んでいる。つまりString用に使いやすくしたラッパーみたいなものだ。つまり、例えば半角→全角をmojiのまま使う場合、
> Moji.han_to_zen("Ruby")
のように独自のMojiクラスのメソッドを使う必要がある。そこでStringクラスを拡張することで
> string.to_em
=> "HOGE"
のように呼び出すことができる。
あと地味に空白を除いてくれる String#strip_all_spaces
というメソッドも用意した。ぜひ使ってみてほしい。
仕様
またmojiからの拡張として、バッククオートの変換規則を変更した。
mojiの場合、
> Moji.han_to_zen("`")
=> "‘"
となる。規則上は正確だが、mojimojiではイメージしやすいように
> "`".to_em
=> "`"
にしている。ただこれは規則とは異なる変更なので、オプション引数で切り替えても良いかなと思っている。
また大きいポイントとして、refinementsを使用している。
理由としては、RubyのコアクラスであるStringクラスを拡張するのは危険だと思っていて、たとえ便利なメソッドだとしてもその影響範囲が使うところだけに限定したいからだ。したがって、利用する場合は毎回
using Mojimoji
を呼ぶ必要がある。気をつけてくれ。
最後に
全角→半角の変換機能がなかったりまだまだメソッドが足りなかったり、mojiに依存しているので、mojimoji単独で動くようにしていきたい。issue, PRも待っているので、その気がある人はぜひ送ってくれ。
最後に、mojimojiによって日本中の全角必須入力フォームを駆逐していくことが、このgemの達成する未来である。
私はその未来に向けて、開発を続けていく。