GXUIは日本語入力できなかった

Webアプリにも手を出してみた(※)けど、Deployが面倒で萎えた。

※ この辺の本が良かった。

JXA

そんな感じでQiitaを眺めてたら、GoでOSXのアプリを書く #golang - Qiita というのを見つけた。
要はJavaScript for Automationを使うという話。

これを参考に、WebViewだけのCocoaアプリを起動して、そこからlocalhostで立ち上げたGoのWebアプリを開けばいいんじゃないか?

https://github.com/lonnc/golang-nw が使えそうだったけど、あえて自分で作る。

JXA(という略称が正式かは知らないが)だとWebViewのHTMLがレンダリングされないという情報があったが、試してみたら動いた。JSで画面を書き換えられたりするとチラついたりもするけど、そんなインタラクティブなの作る予定はないのでよしとする。

やってみる

  • $GOPATH/src/github.com/tnantoka/webwindow/webwindow.goを作る
  • go get github.com/tnantoka/webwindow する
  • $GOPATH/src/github.com/tnantoka/cwww/main.go作る(webwindowをimport
  • cd $GOPATH/src/github.com/tnantoka/cwww; go run main.goする

後はいじれば勝手に更新もしてくれた。

そんな感じでできたのがこちら。
https://github.com/tnantoka/cwww

パッケージを作ってみたかったのでWebView部分は別レポに分けた。
https://github.com/tnantoka/webwindow

調べたこと

templateの結果を文字列で得る

http://otiai10.hatenablog.com/entry/2014/10/15/135709

var buf bytes.Buffer
t.Execute(&buf, config)
fmt.Println(buf.String())

templateの継承

https://github.com/golang-samples/template/tree/master/extends
これでいける。
bindata使うとfilesできなくなるので、parseで1つ1つ処理していった。

exit status 1でこける

// command := "osascript -l JavaScript " + f.Name()
// 2015/05/28 23:07:15 fork/exec osascript -l JavaScript /var/folders/wh/9ztn2bvs27j6x4wcds8kxkxr0000gn/T/win.js222293868: no such file or directory
// exit status 1

http://stackoverflow.com/questions/24095661/os-exec-sudo-command-in-go
sh -cでやれば行けた。

凡ミス

templfileのfはwriterなので読めないよ、改めて開かないと。

output, err := ioutil.ReadFile(f.Name())
if err != nil {
    log.Fatal(err)
}
fmt.Println(string(output))

TODO

  • アイコン変えたい
  • アプリ名変えたい
  • osascriptやめたい
  • document
  • もっとテスト書く
  • APITokenを暗号化

わりと今回はGo書いた感あった。