Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

use Encode::JP::Mobile;

9,577 views

Published on

Perl標準の機能を使った絵文字の相互変換

Published in: Technology

use Encode::JP::Mobile;

  1. 1. use Encode::JP::Mobile; Perl 標準の機能を使った絵文字の相互変換 株式会社モードツー 冨田 尚樹 <tomita@cpan.org> http://e8y.net/ YAPC::Asia 2008 2008/5/16
  2. 2. アジェンダ <ul><li>Perl とモバイル </li></ul><ul><li>Encode::JP::Mobile とは </li></ul><ul><li>使い方 ~基本編~ </li></ul><ul><li>使い方 ~発展編~ </li></ul><ul><li>ステータス / インストール </li></ul><ul><li>さいごに </li></ul>
  3. 3. <ul><li>最新版( svn HEAD )の Encode::JP::Mobile を知らない人もいると思うので、基本的な内容を扱います </li></ul><ul><li>Encode::JP::Mobile can help foreign web developers certainly! </li></ul>
  4. 4. アジェンダ <ul><li>Perl とモバイル ← </li></ul><ul><li>Encode::JP::Mobile とは </li></ul><ul><li>使い方 ~基本編~ </li></ul><ul><li>使い方 ~発展編~ </li></ul><ul><li>ステータス / インストール </li></ul><ul><li>さいごに </li></ul>
  5. 5. 昨年 2007 年末 出典: 電気通信事業者協会 http://www.tca.or.jp/japan/database/daisu/
  6. 6. <ul><li>携帯契約者数、1億を超える </li></ul><ul><li>日本の人口は 1億 2 千万くらい </li></ul>日本、どんだけ携帯好き もちろん複数台所有している個人・会社があるでしょうが
  7. 7. とりわけ <ul><li>中学生・高校生 </li></ul><ul><li>携帯によるインターネット利用 </li></ul>2007 年 09 月 バンダイ・朝日新聞 http://www.bandai-net.com/corporation/release/release.php?id=946 勉強しろよ
  8. 8. そんなわけで <ul><li>携帯向けウェブサービス </li></ul><ul><li>楽しい </li></ul><ul><li>ビジネスにも </li></ul>
  9. 9. ちなみに <ul><li>SNS </li></ul>YAPC::Asia Gold Sponsors! ケータイ白書 2008
  10. 10. <ul><li>Perl は日本のモバイル業界を支えている! と言っても過言ではない </li></ul>この機会に言いたいこと
  11. 11. モバイル系の課題 <ul><li>キャリアのブラウザ仕様の違い </li></ul><ul><li>絵文字 </li></ul><ul><li>ページあたりの表示メモリ制限 </li></ul><ul><li>Flash Lite </li></ul><ul><li>端末 ID での認証 </li></ul><ul><li>IP 帯域チェック </li></ul><ul><li>QR コード </li></ul><ul><li>mailto: の仕様 </li></ul><ul><li>迷惑メール拒否機能対策 </li></ul><ul><li>迷惑メール業者認定回避 </li></ul><ul><li>デコメ </li></ul>
  12. 12. モバイル系の課題 <ul><li>キャリアのブラウザ仕様の違い </li></ul><ul><li>絵文字 </li></ul><ul><li>ページあたりの表示メモリ制限 </li></ul><ul><li>Flash Lite </li></ul><ul><li>端末 ID での認証 </li></ul><ul><li>IP 帯域チェック </li></ul><ul><li>QR コード </li></ul><ul><li>mailto: の仕様 </li></ul><ul><li>迷惑メール拒否機能対策 </li></ul><ul><li>迷惑メール業者認定回避 </li></ul><ul><li>デコメ </li></ul><ul><li>本文なし写真添付メール </li></ul><ul><li>Cookie </li></ul><ul><li>簡易位置情報 </li></ul><ul><li>リダイレクト回数制限 </li></ul><ul><li>GPS </li></ul><ul><li>Java アプリ </li></ul><ul><li>SSL は高いのしかだめだったり </li></ul><ul><li>フルブラウザ </li></ul><ul><li>着メロ </li></ul><ul><li>待ち受け </li></ul>
  13. 13. モバイル系の課題 <ul><li>キャリアのブラウザ仕様の違い </li></ul><ul><li>絵文字 </li></ul><ul><li>ページあたりの表示メモリ制限 </li></ul><ul><li>Flash Lite </li></ul><ul><li>端末 ID での認証 </li></ul><ul><li>IP 帯域チェック </li></ul><ul><li>QR コード </li></ul><ul><li>mailto: の仕様 </li></ul><ul><li>迷惑メール拒否機能対策 </li></ul><ul><li>迷惑メール業者認定回避 </li></ul><ul><li>デコメ </li></ul><ul><li>本文なし写真添付メール </li></ul><ul><li>Cookie </li></ul><ul><li>簡易位置情報 </li></ul><ul><li>リダイレクト回数制限 </li></ul><ul><li>GPS </li></ul><ul><li>Java アプリ </li></ul><ul><li>SSL は高いのしかだめだったり </li></ul><ul><li>フルブラウザ </li></ul><ul><li>着メロ </li></ul><ul><li>待ち受け </li></ul><ul><li>モバイル検索エンジンのクローラー対策 </li></ul><ul><li>いろんな NDA 縛り </li></ul><ul><li>総務省による鶴の一声 </li></ul><ul><li>たまに現れる超特殊端末 </li></ul><ul><li>ARPU ARPU 言うお客様 </li></ul><ul><li>古い端末を捨てたがらないお客様 </li></ul><ul><li>サービスが終了してしまったキャリア </li></ul><ul><li>度重なる運営者変更に見舞われるキャリア </li></ul><ul><li>キャリアごとに見にくい技術情報 </li></ul><ul><li>なぜか対応表は画像とか PDF で提供されたり </li></ul><ul><li>たびだび変えられる URL </li></ul>
  14. 14. Perl ハッカーなら <ul><li>モジュールで解決しよう </li></ul>
  15. 15. アジェンダ <ul><li>Perl とモバイル </li></ul><ul><li>Encode::JP::Mobile とは ← </li></ul><ul><li>使い方 ~基本編~ </li></ul><ul><li>使い方 ~発展編~ </li></ul><ul><li>ステータス / インストール </li></ul><ul><li>さいごに </li></ul>
  16. 16. ちなみに <ul><li>今回の YAPC はモバイルネタ多いですね </li></ul>← 今ココ
  17. 17. TMTOWTDI <ul><li>Encode::JP::Mobile は、 絵文字周りの課題を扱うモジュールです </li></ul><ul><li>miyagawa さん作 </li></ul><ul><li>#mobilejp で発展 </li></ul><ul><li>Typecast でも使われているらしい </li></ul>
  18. 18. Encode::JP::Mobile でやりたいこと
  19. 19. 絵文字を使うと <ul><li>1.画像を使わないで (サイズを抑えつつ) キラキラにできる </li></ul>株式会社ビジュアルワークス http://t-gate.tv/ お世話になっております m(_ _)m
  20. 20. <ul><li>2.携帯ユーザーの大事な表現方法 </li></ul>株式会社モバイルファクトリー http://wassr.jp/
  21. 21. が、各社独自仕様 <ul><li>詳しくは </li></ul><ul><ul><li>http://coderepos.org/share/wiki/Mobile/Encoding とか。少し触らないと忘れる </li></ul></ul>Willcom カバーしきれてません
  22. 22. 絵文字対応 <ul><li>1 キャリアだけであれば </li></ul>アプリ DB ケータイ
  23. 23. アプリ DB ・ 3 キャリアで共通データを使いたい ・テンプレートや DB は一つの文字コードにしたい (utf-8 とか ) ・ アプリ内では、文字はフラグつけて扱いたい ドコモ au などなど
  24. 24. <ul><li>キャリアが行ない始めた絵文字の相互変換 </li></ul>あと、どうせならこれもやりたい
  25. 25. 期待する形 共通なもの ドコモの絵文字交じりの sjis au の絵文字交じりの sjis softbank の絵文字交じりの utf-8 ドコモの絵文字交じりの sjis au の絵文字交じりの sjis softbank の絵文字交じりの utf-8
  26. 26. Encode::JP::Mobile の解決法 <ul><li>Encode を使う </li></ul>softbank の絵文字交じりの utf-8 unicode decode ドコモの絵文字交じりの sjis au の絵文字交じりの sjis softbank の絵文字交じりの utf-8 ドコモの絵文字交じりの sjis au の絵文字交じりの sjis encode
  27. 27. Encode::JP::Mobile が気持ちいい理由 <ul><li>1. Encode を利用 </li></ul><ul><ul><li>Perl 標準のエンコーディング操作モジュール </li></ul></ul><ul><ul><li>Encode まわりの資産がそのまま使える </li></ul></ul>
  28. 28. Encode::JP::Mobile が気持ちいい理由 <ul><li>2.独特なことをしていない </li></ul><ul><ul><li>Encode:: の範囲のみ </li></ul></ul><ul><ul><li>shift_jis ← -> unicode マッピングでどこにマッピングするか </li></ul></ul><ul><ul><li>できるだけ公式情報(キャリアのページ)から構築しようとする涙ぐましい努力 </li></ul></ul>
  29. 29. マッピングについて補足 <ul><ul><li>shift_jis ← -> unicode のマッピング </li></ul></ul>
  30. 30. decode ドコモの絵文字交じりの sjis au の絵文字交じりの sjis softbank の絵文字交じりの utf-8 ドコモの絵文字交じりの sjis au の絵文字交じりの sjis softbank の絵文字交じりの utf-8 encode 絵文字以外 ドコモ絵文字 au 絵文字 softbank 絵文字 unicode PRIVATE USE AREA
  31. 31. 絵文字以外 ドコモ絵文字 au 絵文字 softbank 絵文字 unicode PRIVATE USE AREA 詳細 http://subtech.g.hatena.ne.jp/miyagawa/20071112/1194865208 絵文字以外 ドコモ絵文字 au 絵文字 softbank 絵文字 unicode PRIVATE USE AREA x-sjis-kddi-cp932 x-sjis-kddi-auto
  32. 32. というわけで、 Encode::JP::Mobile <ul><li>メイン機能 </li></ul><ul><ul><li>1.エンコーディングの提供 (当初) </li></ul></ul><ul><ul><li>2.絵文字のキャリア間変換 (最近追加) </li></ul></ul>
  33. 33. アジェンダ <ul><li>Perl とモバイル </li></ul><ul><li>Encode::JP::Mobile とは </li></ul><ul><li>使い方 ~基本編~ ← </li></ul><ul><li>使い方 ~発展編~ </li></ul><ul><li>ステータス / インストール </li></ul><ul><li>さいごに </li></ul>
  34. 34. 簡単です use Encode; # shift_jis の「あああ」 my $input = &quot;x82xa0x82xa0x82xa0&quot;; # 該当エンコーディングで decode する… my $text = decode('shift_jis', $input); # 後は文字として好きな処理をする… warn length($text); # 3 # 好きなエンコーディングで encode して出す print encode('utf-8', $text);
  35. 35. use Encode; use Encode::JP::Mobile; # エンコーディングが追加される
  36. 36. Encode::JP::Mobile が追加する エンコーディング名 <ul><li>x-sjis-docomo (x-sjis-imode) </li></ul><ul><li>x-sjis-kddi-auto (x-sjis-ezweb-auto) </li></ul><ul><li>x-sjis-softbank (x-sjis-vodafone) </li></ul><ul><li>x-sjis-airh </li></ul><ul><li>x-utf8-docomo (x-utf8-imode) </li></ul><ul><li>x-utf8-kddi (x-utf8-ezweb) </li></ul><ul><li>x-utf8-softbank (x-utf8-vodafone) </li></ul>これだけじゃないけど割愛
  37. 37. use Encode; use Encode::JP::Mobile; # DoCoMo で、 chaset=shift_jis のページのフォームから # 「あ  」 を送信 my $input = &quot;x82xa0xF8x9F&quot;; # decode my $text = decode(' x-sjis-docomo ', $input); # 好きな処理をする… warn length($text); # 2 # 好きなエンコーディングで encode して出す print encode(' x-sjis-kddi-auto ', $text); # x82xa0xf6x60 (あ  )
  38. 38. 自由自在に unicode 'x-sjis-docomo' で decode ドコモの絵文字交じりの sjis au の絵文字交じりの sjis softbank の絵文字交じりの utf-8 DB とか 'utf-8' で encode 'x-sjis-kddi-auto' で decode 'x-utf8-softbank' で decode unicode は utf8 に表現できるのでロスなし
  39. 39. unicode ドコモのへ sjis として au へ sjis として softbank へ utf-8 DB とか 'utf-8' で decode 'x-sjis-docomo' で encode 'x-sjis-kddi-auto' で encode 'x-utf8-softbank' で encode
  40. 40. どのエンコーディングを使うか <ul><li>HTTP::MobileAgent::Plugin::Charset </li></ul>use HTTP::MobileAgent; use HTTP::MobileAgent::Plugin::Charset; my $agent = HTTP::MobileAgent->new($ua); my $encoding = $agent ->encoding ;# 適したエンコーディング名 use HTTP::MobileAttribute plugins => [qw( Encoding )]; my $agent = HTTP::MobileAttribute->new; my $encoding = $agent ->encoding ; # 適したエンコーディング名 <ul><li>HTTP::MobileAttribute::Plugin::Encoding </li></ul>
  41. 41. キャリア間変換の話 A : 絵文字 -> 絵文字 B : 絵文字 -> 文字表現 (>3<) とか [ エビフライ ]
  42. 42. <ul><li>A は何もしなくて ok </li></ul><ul><li>B について </li></ul><ul><ul><li>ないものは encode() 失敗します </li></ul></ul><ul><ul><li>-> Encode デフォルトの処理では「 ? 」に。 </li></ul></ul><ul><li>例 </li></ul>use Encode; use Encode::JP::Mobile; # decode 済みの au の「     」 my $text = &quot;x{EF60}x{ECA2}&quot;; print encode('x-sjis-docomo', $text); #     ?
  43. 43. encode() 失敗するものについては、 <ul><li>encode 第三引数で制御可能 </li></ul>use Encode; use Encode::JP::Mobile; my $text = &quot;x{EF60}x{ECA2}&quot;; # print encode('x-sjis-docomo', $text, Encode::FB_XMLCREF ); 
  44. 44. コールバックを指定可能 use Encode; use Encode::JP::Mobile; my $text = &quot;x{EF60}x{ECA2}&quot;; # print encode('x-sjis-docomo', $text, sub {'x'} ); x
  45. 45. Encode::JP::Mobile::FB_CHARACTER <ul><li>というカスタムコールバック付属 </li></ul>use Encode; use Encode::JP::Mobile; my $text = &quot;x{EF60}x{ECA2}&quot;; print encode('x-sjis-docomo', $text, Encode::JP::Mobile::FB_CHARACTER );   (> 3 <) と、キャリアが行なう相互変換と同じようになる ※ Encode::JP::Mobile::Fallback で定義されています。
  46. 46. アジェンダ <ul><li>Perl とモバイル </li></ul><ul><li>Encode::JP::Mobile とは </li></ul><ul><li>使い方 ~基本編~ </li></ul><ul><li>使い方 ~発展編~ ← </li></ul><ul><li>ステータス / インストール </li></ul><ul><li>さいごに </li></ul>
  47. 47. 今回は基本のものだけ扱いましたが <ul><li>絵文字だけ除去したい </li></ul><ul><li>PC 向けに絵文字を画像で表示したい </li></ul><ul><li>といったこともできて、 Encode::JP::Mobile::CookBook の POD に書いてあります。 </li></ul>
  48. 48. お役立ち <ul><li>dat   - モジュールが内部的に利用 </li></ul><ul><li>lib   - モジュール </li></ul><ul><li>t   - テスト </li></ul><ul><li>tools   - dat/* や ucm/* を生成するもの達 </li></ul><ul><li>ucm   - make 時に c (モジュール)になるマッピング </li></ul>
  49. 49. お役立ち <ul><li>ソース ./tools/* </li></ul><ul><ul><li>キャリアのページをスクレイピングして ./ucm/* や ./dat/* を生成 </li></ul></ul><ul><li>ソース ./dat/* </li></ul><ul><ul><li>各種マッピング情報 </li></ul></ul><ul><ul><li>-> tools や dat を他言語のモジュールでも使えるのでは </li></ul></ul>
  50. 50. アジェンダ <ul><li>Perl とモバイル </li></ul><ul><li>Encode::JP::Mobile とは </li></ul><ul><li>使い方 ~基本編~ </li></ul><ul><li>使い方 ~発展編~ </li></ul><ul><li>ステータス / インストール ← </li></ul><ul><li>さいごに </li></ul>
  51. 51. ステータス <ul><li>いちおう still development </li></ul><ul><li>だいぶ落ち着きましたが </li></ul><ul><li>TODO </li></ul><ul><ul><li>clouder さんによる Willcom メールの branch の trunk 取り込み </li></ul></ul><ul><ul><li>Typecast の絵文字も取り込み?たいかも </li></ul></ul><ul><li>ぜひ使ってみてください </li></ul><ul><li>周辺モジュールの充実が期待 </li></ul>
  52. 52. Catalyst で使う <ul><li>Catalyst::Plugin::Unicode::Encoding::MobileAgent http://coderepos.org/share/browser/lang/perl/Catalyst-Plugin-Unicode-Encoding-MobileAgent/trunk </li></ul><ul><li>楽だけど、いまいちな気もする(融通が利かない)。 今の案件で別な形式も作っているので、合わせて UP 予定す </li></ul>use Catalyst qw( ConfigLoader MobileAgent Unicode::Encoding Unicode::Encoding::MobileAgent );
  53. 53. インストール <ul><li>CPAN は v0.24 (相互変換がない時代) </li></ul><ul><ul><li>もし http://search.cpan.org/dist/Encode-JP-Mobile/ が v0.25 じゃなかったら </li></ul></ul><ul><li>svn HEAD </li></ul>$ svn co http://svn.coderepos.org/share/lang/perl/Encode-JP-Mobile/trunk/ Encode-JP-Mobile $ perl Makefile.PL $ make $ make test $ sudo make install
  54. 54. アジェンダ <ul><li>Perl とモバイル </li></ul><ul><li>Encode::JP::Mobile とは </li></ul><ul><li>使い方 ~基本編~ </li></ul><ul><li>使い方 ~発展編~ </li></ul><ul><li>ステータス / インストール </li></ul><ul><li>さいごに ← </li></ul>
  55. 55. モバイルまわりはまだまだモジュール化・ノウハウ共有の余地あり <ul><li>#mobilejp@irc.freenode.net </li></ul><ul><ul><li>私は遅レスですすみません </li></ul></ul><ul><ul><li>神速な tokuhirom さんがいます </li></ul></ul><ul><ul><li>Encode::JP::Mobile のチャンネルというわけではない </li></ul></ul><ul><ul><li>Perl だけってわけでもないです </li></ul></ul><ul><li>http://mobilehacker.g.hatena.ne.jp/ </li></ul><ul><ul><li>もある </li></ul></ul>
  56. 56. ありがとうございました <ul><li>Encode::JP::Mobile はいけてるモジュール </li></ul><ul><li>モバイル周りのノウハウ共有を進めよう </li></ul>

×