技術において行かれないように、必死なおっさんが初めてAdvent Calendarに挑戦してみます!
前置き
結局、日本で展開を考えた時って、ちょっと前のものもサポートしないといけないですよね。ということで、GAE/Goを使って社内システムを作ったのですが、ガラケー(フィーチャーフォン)をサポートしないといけなかったので、その時やったことを書いておきます。
必要なものたち
import (
"code.google.com/p/go.text/encoding/japanese"
"code.google.com/p/go.text/transform"
"github.com/gin-gonic/gin"
"html/template"
"fmt"
"io/ioutil"
"strings"
)
今回は、このくらいを使ってみます。もちろん、他のふつーのやつも必要なので適宜入れてください。
上の3つは、そのURLに行けば入れ方が丁寧に書いてあります。
UA判定/ガラケー判定
いい感じにやってください。ここはガラケーに限った話じゃないと思いますので。
もし、手抜きで判定したい場合は、こんな感じ。
func isMobileUA(ua string) bool {
fua := [...]string{
"DoCoMo",
"KDDI",
"DDIPOKET",
"UP.Browser",
"J-PHONE",
"Vodafone",
"SoftBank"}
for i := 0; i < len(fua); i++ {
if strings.Contains(ua, fua[i]) {
return true
}
}
return false
}
ShiftJISへの文字コード変換
ガラケーといえば、やっぱふつーShiftJISですよね。ということで、変換の処理が必要です。上のimportのやつを使わせてもらって、こんな感じで実装します。
func toSjis(str string) (string, error) {
ret, err := ioutil.ReadAll(transform.NewReader(strings.NewReader(str), japanese.ShiftJIS.NewEncoder()))
if err != nil {
return "", err
}
return string(ret), err
}
ページ表示用のとこ
今回は、"html/template"を使いました。さらに!なぜか、Gin Web Frameworkを使わせてもらいました。ガラケーの部分だけだと使う必要がないとしても!
※古いものをサポートするコードを書くときには、コードも古めかしい感じがいいですよね。Goっぽかったり、ぽくなかったりの部分がありますが、変数名などはカッコ良くローマ字で書きましょう。例えば、UserMasterとかは、YuuzaMasutaと書くべきです。ほんとは全部大文字だとよりカッコいいです。
いにしえのプログラマの可読性のためにも!
type PejiView struct {
Namae string
Hyouji string
}
func init() {
r := gin.New()
r.GET("/gara", handlerPoi)
http.Handle("/", r)
}
func handlerPoi(c *gin.Context) {
isMobile := isMobileUA(c.Request.UserAgent())
var pv PejiView
pv.Namae = "なまえ"
pv.Hyouji = "表示"
var templateName string
if isMobile {
pv.Namae, _ = toSjis(pv.Namae)
pv.Hyouji, _ = toSjis(pv.Hyouji)
templateName = "template/indexfp.html"
t := template.Must(template.ParseFiles(templateName))
c.Writer.Header().Set("Content-Type", "text/html; charset=Shift_JIS")
err := t.Execute(c.Writer, pv)
if err != nil {
c.String(500, "era- "+err.Error())
return
}
}
}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<title>Kakkoii Peji</title>
</head>
<body>
<center>
<h1>最先端のカッコいいページ!</h1>
{{.Namae}}さん。お疲れ様です。
<br /> {{.Hyouji}}
</center>
</body>
</html>
完成!
こんな感じで、新旧折衷のカオスなコードをどんどん作って行きましょう!
わかり始めたマイグレーション。
以上!