Rails で絵文字を扱いやすくする gem rumojinize をリリースした.
Published a gem "rumojinize" for #rails #emoji 🎉 https://t.co/W7eVCvH2gz
— tanaka.world ™ (@_tanakaworld) June 9, 2018
Featuring "rumoji" made by @markwunsch .
絵文字のエンコード/デコードの自動化
ActiveRecord でモデルのフィールドを指定するコードを1行記述すると,DB保存前に ‘🐶’ → ‘:dog:’ のように絵文字を変換してくれる. そして,モデルのインスタンスにロードしたときに,逆の変換が自動でなされるので,変換のことを意識せずに開発が可能になる.
変換自体は rumoji に任せている.
命名
この gem の名前は rumoji
からとって rumojinize
としている.
Rails の ActiveRecord 系の gem では, “acts_as_xxxxx” という命名をするのが流行っている(?要出展)ようなのだが, acts_as_emoji
や acts_as_rumoji
はしっくりこず, rumojinize
に落ち着いた.
MySQLの文字コード
MySQLは文字セットによって,絵文字が保存できるできないが変わってくる.絵文字は4バイト文字として扱われる.一般的なデフォルトの utf-8
だと扱えず,絵文字を保存しようとするとエラーになる.MySQL5.5 以上では,文字セットを utf8mb4
と変更することで,4バイト文字も扱えるようになるらしいのだが,正直どこに影響がでるか完全に理解できておらず断念した.絵文字を扱いたかったサービスが既に運用中のサービスで,迅速な対応が求められていたのもある.このあたりちゃんと理解してから導入してみたい.
参考
- rails + mysqlでの穏便な絵文字保存方法 実装参考にさせていただきました 🙏