携帯サイトで頭の痛いことと言えばまぁもういくつもあるわけですが、そのうちの1つが絵文字です。日本国内向け携帯サイトを作る上で絵文字は避けられないにもかかわらず、主要3キャリアがそれぞれ好き勝手に拡張して実装してきたという事情から、Googleはんがとりまとめるっていう話になった今でもなんだかいろいろとアレで。

絵文字ってなに?そう聞かれても多くの人は、ああ、それはと答えられるはず。そう言えばちょっと前に『メールのハートマークにだまされるな! 8割の女性は「恋人以外にも使う」』(RBB NAVI)なんていうニュースもありました。携帯電話の個人普及率が9割を上回る(平成20年内閣府消費動向調査)この国において、絵文字はごくありふれたものになっている現実があります。

 2008年の11月27日、Googleが携帯電話で使われる絵文字を国際的な文字コード規格、Unicodeに収録しようというプロジェクト進行中であることを発表しました。では、このニュースは何を意味するのでしょう。そして私たちに何をもたらすのでしょう。今回から3回に分けて考えてみようと思います。
 

実際にGoogleによるマッピングが完璧に行われてみんな幸せになれれば良いんですけど、まぁそれにはまだしばらくかかりそうだってことでやっぱりプログラムの方で対応させなくちゃいけないのよねっていう。
とはいえ、需要があれば供給があるってのがコードの世界なわけでして、各言語検索すればそれなりに有用そうなライブラリがいくつも引っかかります。PHPの場合だとこのあたりが主要と言えそう。

MobilePictogramConverter 絵文字変換ライブラリ
絵文字ライブラリをPEARパッケージ化&sfPictogramMobilePluginをバージョンアップしました。 : アシアルブログ
れぶろぐ - [PHP] 携帯絵文字ライブラリ HTML_Emoji 0.4 を公開しました
PHP携帯絵文字表示ライブラリ (PHP埋込型・au絵文字名対応版)



ただ、どうも僕個人が望むような実装をしているものが見あたらない。もしかすると変換速度に問題があるからなのかも知れないけれども、僕が望むのはこんなもの。

  1. 絵文字を含む文字列を変換するのではなく、特定の変数を端末ごとに適した絵文字に置き換えるライブラリ
  2. UserAgentでの判別は独自に実装するのではなく、PEAR::Net_UserAgent_Mobileを使う
  3. UTF-8で書かれたライブラリ
  4. PCで表示した場合には画像で代替表示

用途としてはあるページを丸ごと多キャリア対応にしようという志向が強いらしく、1でいう特定の文字列を変換するというライブラリが多い様子。例えば絵文字の入力UIも一緒に実装して、掲示板の書き込みに絵文字を使用できるようにしたり、既に書き込まれたテキストを変換したり。確かに手間という点で言うとそういう形で実装した方が楽な場合もあるけれども、例えばページ本文には絵文字は余り使わずアイコンや見出しなどで絵文字を使用したい場合にはそれだと結構不経済。

また、PCでテンプレートを組み立てて各キャリアで絵文字として表示させるという手順で開発させる場合、PCに絵文字の入力/表示環境を作らなくちゃ行けなくて、過去の経験からそれは結構面倒っていうか外字使っちゃうといろいろ融通きかないってことがわかってるので止めておきたい。


次にPEAR::Net_UserAgent_Mobileを使いたいというのはまぁ単なる希望ではあるんだけれども、経験上メンテナンスされなくなる可能性がある点を考慮しても、独自実装の方が数倍面倒くさいということがわかっているし、PEAR::Net_UserAgent_Mobileが実装しているメソッドは随分と使いやすい上既にプログラムの一部として稼働してもいるので、できればそれを使っていて欲しい。

まぁメジャーとはいえデフォルトと言うほどではないので、PEAR::Net_UserAgent_Mobileに依存したライブラリは皆無ですけれども、


次にプログラムの文字コード。携帯端末の多くがデフォルトでS-JISでUTF-8にきちんと対応していると言えるようになったのはここ数年のことなので、それに関するライブラリがS-JISで書かれているのもむべなるかなという感じではあるのだけど、どうせ表示するときにエンコード処理することになるんだから別にUTF-8で書いておいた方が面倒無くていいんじゃねーのっていうかeclipseで改変しようとするときに文字化けして面倒くさいっていう話。


PCでテストしたいのでPC(または3キャリア以外の場合)では画像で表示してくれるのがベター。これに関しては多くのライブラリが対応済みの様子。



というわけで以上を鑑みて、書くしかないなって言う結論に至ったので、公開するかどうかは別問題としてもとりあえず自分の意に沿うものを書いて使うことにしました。1点目を満たしているライブラリが余り多くなくて、かろうじてemjがそういう設計になっているかなという感じ。ただし、emjは各キャリアの変換設定を1ファイル1配列で持っていて、それをincludeしてグローバル変数として扱うという実装になっていてあまり好きな感じではないので、その辺はclass内に閉じこめる方向で。
あと、公開しないんであれば用途は限定的でも良いので変換設定にしてもキャリア、文字コードごとに16進数/10進数と持つ必要ないので思い切ってUnicodeオンリーにしちゃうとか、設定ファイルは配列止めてxmlとかyamlとかにしちゃうとか。

さらにその後の用途としてはSmartyのテンプレートファイル内で使用されることが想定されるので、Smartyプラグインも書いて、例えば以下のように記述すると絵文字に変更されるとか。

{emoji key="smallface"}


なんつって考えてて気づいたけど、ああ、この辺に書いてあることと同じだわ…

絵文字関数プラグインを作ろう

さて、ケータイコンテンツを作る上で一番重要で、かつ一番頭を悩ませる問題が絵文字対応です。
絵文字はケータイコンテンツを作る際に欠かせないものになっていますが、複数のキャリアに共通して対応させようとすると、とたんに大変になります。
そもそもキャリアによって文字コードが全然違いますし、キャリアによって絵文字があるものとないものがあったりします。

そこでキャリアの違いを吸収し、テンプレートを作成するデザイナーが極力負担を感じず絵文字を扱えるようにするためのテンプレート関数を作ってみたいと思います。
 

やっぱりみんな自分で書いてるんだなぁ。そうかそうか。

明日あたりサクッと書いてしまうことにしよう。うん。