素のVimでGoのコードを書く
はじめに
筆者はめんどくさがりなので、社会人になってしばらくするまで、大学の後輩のdotfilesをforkして使っていた。tmuxの設定もそのまま再利用してたので、設定ファイルに何が設定してあるかよく分かっていなかった。
就職するまでは、Emacsを使っていて、それなりに設定ファイルを成長させていた。しかし、就職するころになんとなく使い始めたVimがすっかり手になじみ、今も使い続けている。
Vimの設定も適当にネットから取ってきたものをパッチワークしたもので、自分が書いたといえる設定やスクリプトはほとんどなかった。それでも特に問題はなかったが、なんとなくVimが重くなって気がして、しかし改善方法が分からないので、パソコンを変えたタイミングで、すべてを捨てた。
本記事は、筆者が素のVimでどのようにGoのコードを書いているかを説明する記事である。そのため、特に他者に同じ方法を勧める訳ではない。一種の厨二病みたいなやつなのと、設定がだるい以外に理由はないので、各々好きなエディタを好きに設定すればいい。
素のVimとは何か?
ここで素のVimと呼んでるのは、特に設定していないVimのことで特段バージョンなんかも気にしていない。なんか最初から使えるようになってたり、brew installとかで適当に入ったその辺にあるVimだ。
特に設定していないので、.vimrcとかは存在しないし、シンタックスハイライトも行番号すらも表示されない。気にしない。
設定ファイルがないので、パソコンを移行する時には便利だ。でも、それ以外では特に便利ではない。コンバットナイフやハンドガンだけで、バイオハザード2をクリアする感じだ。
素のVimで私が使える武器は基本的なキーバインドとテキストを入力するくらいだ。Vimにはたくさんの機能が最初から入ってそうだが、覚えるのがだるいのであんまり使ってない。
使用しているVimの機能
jkjk、基本的なキーバインドやバッファを切り替える機能、検索と置換くらいは使っている。名前を思い出せないが、Ctr-vして複数行に入力したりするやつも使ってる。
たまに行番号を表示したいにで、:set numberと入力して行番号を表示することもある。コード補完は無いので、開いているファイルにある文字列を保管するアレを使っている。
Goのコードを書く
特にvim-goとかgoplsとかは使っていない。Vimにプリインストールされるようになったら使うけど、まずない。コード補完やシンタックスハイライト[1]はない。
プレゼンしながらThe Go Playgroundでコードを書くことも多いので、どのみちコード補完やシンタックスハイライトはない。
コード補完がなくて不便ではないかと聞かれることはあるが、例の開いているファイルから補完するアレでどうにかなっている。標準パッケージは、大体覚えているのもあって、特に必要ない。思い出せない場合は、パッケージドキュメントやgo docコマンドを利用して検索する。人に説明しながらコードを書くことが多いので、この方が見てる人が分かりやすい。
シンタックスハイライトがないと読みづらいかと聞かれてると、私はそうは思わない。Goのトップレベルの宣言文はすべてキーワードから始まるし、キーワードは25個しかないので、色を変えなくても分かる。識別子が登場する場所も決まってるので色がついてるかどうかは特に影響しない。
ソースコードのビルドやテストなどは、go testを使って実行する。Linterはお手製のものをターミナルでかける。ターミナルはiTerm2を使ってるけどこだわりはない。
gofmtやgoimportsはVimから実行しているが、自動では実行していない。今、そのパッケージ使おうと思ったの!みたいなことが発生するのが嫌だからだ。たまに忘れる。ごめんなさい。
己を鍛える
新卒の時の先輩に、タイポするのは己を鍛えてなからだ[2]。補完に頼るなと言われたことがあり、そのときはやべーなくらいにしか思わなかった。しかし、今となっては己を鍛えることで、自分がgoplsになっている。私がgoplsだ[3]。
筆者は、めんどくさがりなので、ブックマークの類いをうまく活用できない。整理ができないので、何がどこにあるのか分からない。基本的には検索と暗記でいくようにしている。Go関連のサイトは、暗記しているものが多いので、筆者の講義を受けて、アドレスバーにURLを直打ちしていく様子を見たことがある人もいるだろう。やばい人だと思われてるかもしれない。単にブックマークも使えない人なだけだ。ちなみに、この記事に出てくるリンクもすべて暗記していたやつだ[4]。
コード補完に頼らないといい点もある。それはドキュメントを読むことだ。型のパズルでコードを書いてると、見落としてしまう仕様もある。どういう時にエラーを返すのか、panicするのはどういうときなのか、ドキュメントを読まないと分からないこともある。
静的解析が好きなこともあり、言語仕様もよく眺める。そのおかげで、文法にも詳しくなり、コード補完やスニペットがなくても大丈夫なことが多い。
己を鍛えるのは個人の趣味なので、特に誰かに強要するものではないし、批判されるものでもないと思う。
おわりに
誰の役に立つか分からない文章を書いた。自分が好きなように開発できるようになるとすばらしい。
しかし、開発スピードが遅くなってしまっては本末転倒なので、Goを開発するのはVSCodeをおすすめする。設定をしなくても勝手に設定されていくので楽ちんだ。
Discussion