$shibayu36->blog;

株式会社はてなでエンジニアをしています。プログラミングや読書のことなどについて書いています。

gotest.elを使って、Emacs上でgolangのテストを実行する

【Scala】Emacsで現在編集している部分のテストを実行する - $shibayu36->blog; と同じようなことをgolangでもやりたいと思って調べたら、gotest.el というのを使えば同様のことを簡単にできることが分かったので使ってみた。

今回できること

  • 現在編集中のファイルのテストを実行する
  • 現在編集中のテストメソッドのみ実行する

以下のような感じ。

設定

まずはインストール。

M-x package-install RET gotest

あとはrequireして、自分の好きなキーバインドを当てるだけ。

(require 'gotest)
(setq go-test-verbose t) ;; verboseフラグ付きでgotestする
(define-key go-mode-map (kbd "C-c C-t") 'go-test-current-file)
(define-key go-mode-map (kbd "C-c t") 'go-test-current-test)

これで、go-modeでC-c C-tで現在編集中のファイルのテストを実行でき、C-c tで現在編集中のテストメソッドのみ実行出来るようになった。

あとpopwinで表示させるのが好みなので、追加で以下のような設定も行った。

(push '("\*Go Test\*" :regexp t :height 0.5 :stick t) popwin:special-display-config)

まとめ

今回はEmacsgolangのテストを実行する方法について書いてみた。これでgolangでも、テスト編集 -> テスト実行 -> テスト編集のループをEmacs上だけで回せるようになった。

flycheck-gometalinterを利用して、EmacsでGoのシンタックスチェックや型チェックを行う

今までgolangシンタックスや型のエラーがあった時にEmacsに表示するために、flycheck標準のgo用のcheckerを利用していた。しかし、これがだんだん遅くなってきて、結構いらつく感じになってきた。そこで、flycheck-gometalinterを使ったら解決したのでメモ。

flycheck-gometalinterとは

flycheck-gometalinter とは、gometalinterシンタックスやlintのチェックをした結果を、Emacsのflycheckのインターフェースで表示してくれるもの。gometalinterはgolangのいろんなlintツール(例えばgofmtとかvetとかgotypeとか)を統合してlintを行ってくれるので、柔軟に設定して利用することができる。

flycheck-gometalinterを利用するように設定する

まずflycheck-gometalinterをインストールする。

M-x package-install RET flycheck-gometalinter

そして、重くならないようにfastオプションを付けるのと、テストファイルでも利用するようにelispで設定する。

(require 'flycheck-gometalinter)
(flycheck-gometalinter-setup) ;; flycheckのcheckerのリストにgometalinterを追加
(setq flycheck-gometalinter-fast t) ;; only run fast linters
(setq flycheck-gometalinter-test t) ;; use in tests files
(add-hook 'go-mode-hook 'flycheck-mode) ;; go-modeでflycheckを利用するように

これだけで設定が終わり。

これをしておくだけで、シンタックスエラーや型エラーなどがあった時に、flycheckがその行にエラー表示をしてくれる。


便利。

なぜデフォルトのgo-modeのcheckerが利用されなくなるか

なぜflycheck-gometalinter-setupをするだけで、デフォルトのgo-modeのcheckerが利用されなくなるのだろうと疑問だった。それでドキュメントを見て見ると、

http://www.flycheck.org/en/latest/user/syntax-checkers.html#select-syntax-checkers-automatically

Flycheck picks the first syntax checker from this list which exists and supports the current major mode, and runs it over the current buffer.

と書かれていて、つまりgo-modeに紐づく最初のcheckerが利用されることが分かった。

さらにflycheck-gometalinter-setupのコード( https://github.com/favadi/flycheck-gometalinter/blob/c90ea1aba80ddfdf603c9ba731be302400fd6ba2/flycheck-gometalinter.el#L119 )を読むと、flycheck-checkersにgometalinterをadd-to-listしている。これによって、flycheck-checkersの一番最初にgometalinterが入るため、gometalinterがgo-modeに紐づく最初のcheckerとなる。

以上から、gometalinterのみピックアップされ、デフォルトのcheckerが利用されなくなるということが分かった。

まとめ

今回はflycheck-gometalinterを利用して、golangシンタックスチェックや型チェックなどを行うように設定してみた。デフォルトのcheckerを利用すると、かなりCPUが回っていたが、この設定をすることで快適に編集できるようになったので良かった。

Kindleまとめ買いセールでHUNTERxHUNTER買った

Amazon.co.jp: 【まとめ買い20%OFF】Kindleマンガ 2017年売り上げ上位タイトル: Kindleストア

Kindleまとめ買いで、20%オフになるセールがやっていた。10/11まで。

僕は久しぶりにHUNTERxHUNTERを読みたいと思って、そういえばKindleで持っていないと思い出したので、この期に全巻買ってみた。週末に一気に読んだけど、やっぱり面白い。個人的にはグリードアイランド編が好き。

他にもいろいろ売っていたけど、個人的には

あたりがおすすめ。特にキングダムは最高に面白い。