読者です 読者をやめる 読者になる 読者になる

160321 月曜

log Emacs Go

近況

先週から風邪を引いてしまったようで、熱が出たり悪寒があったり、咳が出たりと大変だった。病院に行って薬を処方してもらった。

インフルエンザの検査もしたが、「わずかに、かすかに反応が出ている」と言われて一緒に検査キットを見たけれど、信じる者には見えるというレベルの話のように思えた。ただ、罹患した時期と検査のタイミングによっては検査結果にあらわれない場合もあるのは確かなので「インフルエンザの疑いあり」ということで諸々薬をもらったり。

金曜の夜時点で熱は平熱に戻り、土日とゆっくり休んでほぼ治ったような気がしている。まだ少し咳が出るけれど、咳を抑える薬、痰を抑える薬もあるので飲んでおけばよさそう。

ちゃんと記録を取っていないけれど、過去 2,3 年の間 12 月頃に毎回風邪を引いていたのは今回と症状が同じ感じだったので、それらも全部インフルエンザだったのではという気がしている。

病院が近くにあることに気づいたので今後は素直に受診しよう。

Python 以外の言語

Python 以外のプログラミング言語をもう少し触ってみたいという欲求が少しある。というのも、昨年書いていたものがあって、一部設計を見なおして書き直したりしていたんだけど、なんかそのコードを触るのがあまり気乗りしなくなってしまったのだ。ほとんど気分の問題ともいえる。

やっぱり新しく学ぶなら関数型じゃない?と思って OCaml や F#、 Haskell あたりを覗いてみたりもしたけれど、色々と新たに理解するべき部分が多くて、今のところはやりたいことに対してコストが大きいように感じた。いずれは OCaml あたりをちゃんと学びたいと思うんだけど。

F# も VisualStudio Code に Ionide というプラグインを入れることでエディタ内でインタラクティブシェルを動かすことができて、 Intellisense の補完もバリバリ効いてくれるということで軽く触る分にはなかなか良さそうではあった。

ただ、コードのフォーマットが効かないみたいなのでそこが残念。 JavaScript とか他の言語についてはフォーマットできるみたいなので F# にはまだ対応していないということなのだと思う。

Go

で、別に関数型じゃなければいけないというわけでもないので、そういえば、と思って Go を触ってみることにした。最初は MacPorts で入れたけれど、なぜか godoc のインストールができなかった( gopath を設定しろ、というエラーが出る。設定しているのに。)ので公式サイトからバイナリをダウンロードしてインストールした。こっちだと godoc も一緒にインストールしてくれた。

% go get -u github.com/nsf/gocode
% go get -u github.com/rogpeppe/godef
% go get -u github.com/dougm/goflymake
% go get golang.org/x/tools/cmd/goimports

このあたりをインストールして、

Emacs の方は

(depends-on "go-mode")
(depends-on "go-autocomplete")
(depends-on "go-eldoc")

この辺をインストールした。

設定ファイルは以下のような感じ。

.zshrc
# GO
export GO15VENDOREXPERIMENT=1
export GOROOT=`go env GOROOT`
export GOPATH=$HOME/go
export PATH=$GOPATH/bin:$GOROOT/bin:$PATH
init.el
;; ------------------------------------------------------------------------
;; @ Go

;; http://qiita.com/koki_cheese/items/2e2ead918a1f1ac5bf6e
;; http://unknownplace.org/archives/golang-editing-with-emacs.html

(add-to-list 'exec-path (expand-file-name (concat (getenv "GOROOT") "/bin")))
(add-to-list 'exec-path (expand-file-name (concat (getenv "GOPATH") "/bin")))
(eval-after-load "go-mode"
  '(progn
     (require 'go-autocomplete)
     (require 'auto-complete-config)
     ;; eldoc
     (add-hook 'go-mode-hook 'go-eldoc-setup)
     (set-face-attribute 'eldoc-highlight-function-argument nil
                         :underline t :foreground "green"
                         :weight 'bold)
     ;; gofmt
     (add-hook 'before-save-hook 'gofmt-before-save)
     ;; key bindings
     (define-key go-mode-map (kbd "M-.") 'godef-jump)
     (define-key go-mode-map (kbd "M-,") 'pop-tag-mark)
     )
  )

これで大体いい感じになった。 Emacs では保存するたびに gofmt がコードをフォーマットしてくれる。最高。公式で色々用意されていて環境構築で迷うことが少ないのはとてもよいと思う。

言語仕様もシンプルというか、書き手によってバラつきが出ないように制限をかけることを意識しているそうなので、少し Python と似たようなところがあるのではとも思った。モダンな書き方ができなくて諦めるしかないところもあるようだけれど。

時間を作って少しずつ書いていってみたい。