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

More Related Content

PDF
サムネイルを作る話
PDF
Wantedlyを2年間Herokuで運用した話
PDF
Riot.jsとフォームのデータバインディング
PPTX
20201107 jjug ccc Spring Boot ユーザーのための Quarkus 入門
PDF
SwaggerとAPIのデザイン
PDF
Riotでサーバレスにした話
PDF
インフラ部門で働くCプログラマの話
PPTX
さくっと理解するSpring bootの仕組み
サムネイルを作る話
Wantedlyを2年間Herokuで運用した話
Riot.jsとフォームのデータバインディング
20201107 jjug ccc Spring Boot ユーザーのための Quarkus 入門
SwaggerとAPIのデザイン
Riotでサーバレスにした話
インフラ部門で働くCプログラマの話
さくっと理解するSpring bootの仕組み

What's hot (20)

PDF
Herokuトレーニング
PDF
会社にGitHub Enterpriseを導入してみた話
PDF
Wantedly - 世界一"いいね!"される 求人サイトの作り方
PDF
WantedlyがまだSendGridを使いこなしてない話
PDF
超初心者でも大丈夫!AngularJSでフォームページをちょっとリッチに改造してみよう
PDF
PyconJP2017 Kivyによるアプリケーション開発のすすめ
PPTX
Kivyでゲーム
PDF
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
PPTX
Spring I/O 2017での拡張のお話
PDF
jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界
PDF
Rails Tokyo 035 Cucumber
PPTX
Django/Celeyを用いたデータ分析Webアプリケーションにおける非同期処理の設計と実装
PDF
PythonのGUI_2018 with NSEG
PPTX
C# CloudScript Azure Functions との連携
PDF
JS Board で IoT は楽勝か?
PDF
Riot.jsと仲良くなるための僕的tips
PDF
俺とAngular JS 2
PPTX
普段Reactを触ってる僕が Angularを触ってみた感想を共有する
PDF
Djangoのススメ
PDF
いまさら触るAwt
Herokuトレーニング
会社にGitHub Enterpriseを導入してみた話
Wantedly - 世界一"いいね!"される 求人サイトの作り方
WantedlyがまだSendGridを使いこなしてない話
超初心者でも大丈夫!AngularJSでフォームページをちょっとリッチに改造してみよう
PyconJP2017 Kivyによるアプリケーション開発のすすめ
Kivyでゲーム
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
Spring I/O 2017での拡張のお話
jooqってなんて読むの? から始めるO/RマッパーとSpringBootの世界
Rails Tokyo 035 Cucumber
Django/Celeyを用いたデータ分析Webアプリケーションにおける非同期処理の設計と実装
PythonのGUI_2018 with NSEG
C# CloudScript Azure Functions との連携
JS Board で IoT は楽勝か?
Riot.jsと仲良くなるための僕的tips
俺とAngular JS 2
普段Reactを触ってる僕が Angularを触ってみた感想を共有する
Djangoのススメ
いまさら触るAwt
Ad

Viewers also liked (15)

PPTX
How to share manufacturer product data in 2017
PDF
高速!Clojure Web 開発入門
PDF
Om Next ~React.jsを超えて
PPTX
Web forms made easy (with formative)
PDF
Brochure - Queen Sirikit Centre for Breast Cancer
PDF
Dan 26 2_17
PPTX
Insurance Broker software Services|Insureqlik
PPTX
地獄のElixir(目黒スタートアップ勉強会)
PPTX
実務に活かす超実践的ロジカルシンキング
PDF
40 activités parrot educators v1
PDF
Fukuoka University Public NTP Service Deployment Use case
PPTX
ポアソン画像合成
PPTX
古着10t キャンペーン!ねば子の世界一周 断捨離の旅
PDF
Agency of the future keynote
How to share manufacturer product data in 2017
高速!Clojure Web 開発入門
Om Next ~React.jsを超えて
Web forms made easy (with formative)
Brochure - Queen Sirikit Centre for Breast Cancer
Dan 26 2_17
Insurance Broker software Services|Insureqlik
地獄のElixir(目黒スタートアップ勉強会)
実務に活かす超実践的ロジカルシンキング
40 activités parrot educators v1
Fukuoka University Public NTP Service Deployment Use case
ポアソン画像合成
古着10t キャンペーン!ねば子の世界一周 断捨離の旅
Agency of the future keynote
Ad

Similar to Clojureでガラケーサイトを作る際の細かい話 (20)

PDF
Arachne Unweaved (JP)
PPT
14対話bot発表資料
PDF
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
PDF
Azure How to Learn & ゆるふわ雑談Q&A
PPTX
Azure のポータル画面で、AI フレーバな BOT の作成ハンズオン
PDF
KeycloakのCNCF incubating project入りまでのアップストリーム活動の歩み
PDF
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
PDF
IaC事始め Infrastructure as Code やってみる?
PPTX
Iotlt 28 HoloLensに日本語聞いてもらいたい
PPTX
Azure Function GAした!Visual Studio Tools for Azure Functions もプレビューだ!
PDF
皆さん!ふくてんが来ましたよ!!
PPTX
Kichijoji-mini #010:うちの残念な開発環境を正常な状態にするには?
PDF
万能モジュール xCCK のご紹介 Osc20113 Nagoya
KEY
リモートデバッグツール Weinerをつかってみた
PDF
React VR ことはじめ
PDF
Metahub for github
PDF
ngJapan報告会
PDF
受託開発とRubyGems
PDF
Python × Herokuで作る 雑談slack bot
PDF
Algyan6th基板 作例
Arachne Unweaved (JP)
14対話bot発表資料
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
Azure How to Learn & ゆるふわ雑談Q&A
Azure のポータル画面で、AI フレーバな BOT の作成ハンズオン
KeycloakのCNCF incubating project入りまでのアップストリーム活動の歩み
Spring Bootハンズオン ~Spring Bootで作る マイクロサービスアーキテクチャ! #jjug_ccc #ccc_r53
IaC事始め Infrastructure as Code やってみる?
Iotlt 28 HoloLensに日本語聞いてもらいたい
Azure Function GAした!Visual Studio Tools for Azure Functions もプレビューだ!
皆さん!ふくてんが来ましたよ!!
Kichijoji-mini #010:うちの残念な開発環境を正常な状態にするには?
万能モジュール xCCK のご紹介 Osc20113 Nagoya
リモートデバッグツール Weinerをつかってみた
React VR ことはじめ
Metahub for github
ngJapan報告会
受託開発とRubyGems
Python × Herokuで作る 雑談slack bot
Algyan6th基板 作例

More from Ikuru Kanuma (19)

PDF
clj and deps.edn
PDF
Kukutei shinkoku with Clojure
PDF
Locarise,reagent and JavaScript Libraries
PDF
clara-rules
PDF
ClojureScript@node
PDF
Welcome to ClojureScript
PDF
Clojure web dev history
ODP
Review June2015 Dec2015
ODP
Redmine on amazon ec2
ODP
Engineering Ethics (In Japanese)
ODP
First Real Pull Request Ever
ODP
Pyunit
ODP
Review june2014 june2015
ODP
Elementary vim tricks
ODP
Processors in a nutshell
ODP
Computer hardware, and network
ODP
Installing Japanese environment(mozc) on Debian 8 + Mate
ODP
Git for standalone use
PPTX
Soap ui introduction
clj and deps.edn
Kukutei shinkoku with Clojure
Locarise,reagent and JavaScript Libraries
clara-rules
ClojureScript@node
Welcome to ClojureScript
Clojure web dev history
Review June2015 Dec2015
Redmine on amazon ec2
Engineering Ethics (In Japanese)
First Real Pull Request Ever
Pyunit
Review june2014 june2015
Elementary vim tricks
Processors in a nutshell
Computer hardware, and network
Installing Japanese environment(mozc) on Debian 8 + Mate
Git for standalone use
Soap ui introduction

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