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.

Clojureでガラケーサイトを作る際の細かい話

271 views

Published on

I gave a lightning talk at https://nishi-shinju-clojure.connpass.com/event/52434/ pertaining to Shift_JIS encoding in Clojure libraries out there.

Published in: Software
  • Be the first to comment

  • Be the first to like this

Clojureでガラケーサイトを作る際の細かい話

  1. 1. Clojure でガラケーサイトを 作る際の細かい話 Ikuru K
  2. 2. あるいは ,Shift_JIS がつらい 話 Ikuru K
  3. 3. 自己紹介 - 2016 年 5 月より Clojure プログラマとして勤務 - サイボウズスタートアップス株式会社所属 - https://github.com/iku000888 - https://twitter.com/iku000888 - メンテしているライブラリ: https://github.com/jkk/formative - 5 月 20 日に JJUG CCC で Arachne の話をします!
  4. 4. tl;dr - 今帰らなければいけない人のために - - 力の限り全力で utf-8 だけをサポートする用にしよう - これ以降は Clojure で Shift_JIS したい時の話
  5. 5. Agenda 1. 背景 2. フォームのデコードの話 3. 動的にクエリパラメータを生成する時の話
  6. 6. この時代に Shift_JIS? 安否確認サービス 2 => https://anpi.cstap.com/anpi2.html ガラケーからの利用をサポート => なるべく多くのガラケー端末をサポートし たい => 一部ガラケーでは未だに utf-8 使えないら しい =>Shift_JIS で作る
  7. 7. Shift_JIS の html テンプレート
  8. 8. 結果 問題無かった ! めでたしめでたし
  9. 9. 結果 問題無かった ! めでたしめでたし フォームで GET した値が化ける “ モジバケコワイ” => "���W�o�P�R���C"
  10. 10. 調べた - フォームのパラメターをパースするのは Ring の params ミドルウェア : https://github.com/ring-clojure/ring/blob/master/ring-core/src/ring/m iddleware/params.clj - オプションで :encoding を指定できるらしい (default utf-8) - wrap-params 関数に {:encoding “Shift_JIS”} を渡す
  11. 11. 調べた - フォームのパラメターをパースするのは Ring の params ミドルウェア : https://github.com/ring-clojure/ring/blob/master/ring-core/src/ring/m iddleware/params.clj - オプションで :encoding を指定できるらしい (default utf-8) - wrap-params 関数に {:encoding “Shift_JIS”} を渡す - " モジバケコワイ " =>
  12. 12. 調べた - フォームのパラメターをパースするのは Ring の params ミドルウェア : https://github.com/ring-clojure/ring/blob/master/ring-core/src/ring/m iddleware/params.clj - オプションで :encoding を指定できるらしい (default utf-8) - wrap-params 関数に {:encoding “Shift_JIS”} を渡す - " モ� W�o�P�R ワ� C"
  13. 13. 調べた - フォームのパラメターをパースするのは Ring の params ミドルウェア : https://github.com/ring-clojure/ring/blob/master/ring-core/src/ring/m iddleware/params.clj - オプションで :encoding を指定できるらしい (default utf-8) - wrap-params 関数に {:encoding “Shift_JIS”} を渡す - " モ� W�o�P�R ワ� C" - 惜しい !!( なにが
  14. 14. デバッグした (-> “ モジバケコワイ” ブラウザによる Shift_JIS の URL エンコード ) => "%83%82%83W%83o%83P%83R%83%8F%83C" 証拠 : http://d.hatena.ne.jp/keywordsearchmobile?word=%83%82%83W%83o%83P%83R%83%8F%83C (-> "%83%82%83W%83o%83P%83R%83%8F%83C" (java.net.URLDecoder/decode "Shift_JIS")) ;;params middleware の解読処理 => " モ� W�o�P�R ワ� C"
  15. 15. commons-codec 使えば正しくデコードできるらし い (.decode (URLCodec. "Shift_JIS") "%83%82%83W%83o%83P%83R%83%8F %83C") => " モジバケコワイ "
  16. 16. プロジェクト内での解決方法 問題のこの関数 https://github.com/ring-clojure/ring-codec/blob/master/ src/ring/util/codec.clj#L110 を alter-var-root で commons-codec を使った実装で上書 きした
  17. 17. alter-var-root
  18. 18. 余談: 6 年前に同じ問題に嵌っていた日本の方がい た https://groups.google.com/forum/#!topic/ring-clojure/7VibQRgXH-0
  19. 19. 2. クエリパラメーターを動的に作る話 - https://github.com/cemerick/urlを使用 - マップからクエリパラメーターを作れるので便利 - が、日本語文字列が化ける
  20. 20. 実装を見てみる
  21. 21. url 、お前もか。。。 (URLEncoder/encode "UTF-8")
  22. 22. こちらも alter-var-root! ※ 注:本来はエンコーディングを引数で受けとるようにするのが王道です
  23. 23. まとめ - Clojure 界隈は utf-8 以外のエンコーディングはあまり気 にしていない - Shift_JIS を URL エンコードできる Commons Codec は 偉大。人類の資産 - それをそのまま利用できる Clojure も偉大 - alter-var-root という逃げ道が非常に役に立つ
  24. 24. Thank you!

×