ロコガイド テックブログ

「地域のくらしを、かしこく、たのしく」する、株式会社ロコガイドの技術部ブログです。主にトクバイ・ロコナビのサービス開発について発信しています。

「地域のくらしを、かしこく、たのしく」する、株式会社ロコガイドの技術部ブログです。
主にトクバイ・ロコナビのサービス開発について発信しています。

jpmobile Overview 2020 〜令和時代の jpmobile〜

こんにちは、5.3でようやく第一世界から帰ってこれた暁を祝福しているVPoEの小川@conceal_rsです。 表題の jpmobile は2009年ぐらいからずっとメンテナンスと開発を継続しているOSSですが、弊社のサービス「トクバイ」でも利用されています。 もうすでにガラケーはなくなりかけていますが、そんななかで2020年現在 jpmobile がどのように使われているのかとか、あんまり知られていない機能として何があるのかなどざっとまとめてみたいと思います。

jpmobile Overview 2020

jpmobile には大きく以下の機能があります。

  • ガラケー用絵文字の相互変換
  • Rails でのユーザエージェントごとの view の切り替え
  • 日本語(ISO-2022-JP)でのメール送受信

ガラケー用絵文字の相互変換

もう歴史的遺物になりつつあるガラケーですが、当時は3キャリアで別々の絵文字体系を持っていました。 その出し分けを自動的にやるための機能が備わっています。

ただ、いまではスマホがメインですし、UTF-8絵文字で十分なのであまり利用価値はありません。 ちなみに変換テーブルを内部で持っているので、頑張ればユーザエージェントごとに絵文字を微妙に変えるという誰得機能を実装することも可能です。 奇特な方は試してみてください。

ユーザエージェントごとの view の切り替え

「トクバイ」ではこちらを主に利用しています。ユーザエージェントごとにたとえば

  • デフォルトは index.html.slim
  • スマホだと index_smart_phone.html.slim
  • タブレットだと index_tablet.html.slim

みたいな切り替えができます。Railsで使う view であれば layout や partial でも対応しています。 いまでも jpmobile が利用される大きな要因はこの機能じゃないかなと思っています。

disable_mobile_view!

大きな声でアピールしたわけではないので、あまり知られていないかもしれない機能が disable_mobile_view! です。 これを使うと view 切り替えが無効になります。例えばスマホで「PC版を見る」などの場合、このメソッドを before_action などで呼び出す感じです。

Jpmobile.config.fallback_view_selector

もう一つあまり知られていない機能がこの Jpmobile.config.fallback_view_selector です。 jpmobile を使っていてたまに問題になるのが、スマホ / PC に両対応したサイトで、

  • 本来 PC しかアクセスしないはずの URL なので PC 用の view しかないが
  • スマホでのアクセスなので jpmobile は _smart_phone だと判定するため
  • layout は application_smart_phone.html.slim なのに
  • action の view は show.html.slim

となってしまい、 view の不整合が発生してしまいます。 まあちゃんと設計すれば大丈夫なはずなんですが、そうは言っても考慮漏れなど発生するので、その場合にもうまく動くようにするための機能です。 Rails で config/initializers/jpmobile.rb などに、

Jpmobile.config.fallback_view_selector = true

とすると、スマホ用の view が見つからなかったとき、すべての view で PC view を使って表示しようとします。

ただあまり実運用できているわけではないので、エッジケースで問題になるかもしれません。 なにか問題があったらフィードバックしていただけると助かります🙏

日本語(ISO-2022-JP)でのメール送受信

これも実はあまりアナウンスしてないような気がするんですが、日本語、特にISO-2022-JPでのメールの送受信をする Jpmobile::Mailer::Base というのがあります。 いまとなっては UTF-8 でなんとかなるので、そこまで使いみちはないはずなんですが、世の中には ISO-2022-JP でないとうまく動かないメーラーがたまに存在するので、 そういうときには利用すると良いと思います。ちなみにガラケー向けに絵文字を変換したりもするのですが、これもいまとなってはという機能ですね。

こちらは受信も対応していて、いちおう ActionMailbox でも動くようになってます。とは言え ActionMailbox 自体が柔軟なので何もせずに動いているという感じではあります。

レガシーな環境をターゲットとしたシステム開発をする場合に、選択肢の一つとして考えてもらうといいかもしれません。

まとめ

2009年からなのでもう11年も経つのかと感慨深いですが、いまだに利用されていて開発者としては嬉しい限りです。 今後も Rails のバージョンアップに応じて jpmobile も追従していくつもりなので、新しい Rails を使いたい方もご安心ください。