Goを書くときは”err”をハイライトすると捗る in VS Code

こんにちは、GMOインターネット株式会社の斉藤です。
本エントリーでは、Goを書くときに便利な”err”という文字列をハイライトする方法について紹介します。

はじめに

僕は普段EmacsでGoを書いているのですが、最近他の言語を書くときはVisual Studio Code(以下VS Code)を利用することが増えてきています。Emacsは最近は老害などと言われがちではありますが、長く使っていてカスタマイズも完全に馴染んでいるのでなかなか乗り換えが難しいんですよね。

そんなEmacsでGoを書くときに私が便利に使っている設定が、”err”という文字列をハイライトするというものです。

go-modeでerrをハイライトしておくと捗る – Qiita

もともとは下記のブログを参考にしたものです。

Goは例外などの機構が存在せず、エラーはerrやerrをプレフィックスとした名前の変数で受けて処理するのが慣例となっています。そして、以下のようなコードブロックが頻繁に登場します。

if err != nil {
return err
}

なのでerrをハイライトしておくとエラーの箇所が明確になりコードリーディングが便利になるんですね。私はこれを入れないとよくエラーを見落とすので、生産性に直結する大事な設定だったりします。

VS Codeのシンタックスハイライト

この設定、残念ながらVS Codeでは設定できません。VS Code正規表現などを使ったコードハイライトをする仕組みを持たないからです。ただVS Codeは拡張機能を簡単に作れるので、それを利用して自前で作りました。

Go err highlighting – Visual Studio Marketplace
https://marketplace.visualstudio.com/items?itemName=hiro.go-err-highlighting

これを使うと上の画像のようになります。いかにも見やすそうでしょう。VS CodeでGoを書いている方はぜひ使ってみてください。

自分で拡張機能を作る

さて以下はVS Codeのシンタックスハイライトをカスタマイズしたい人向けの情報です。

VS Codeのシンタックスハイライトは、実際にはLanguage Extensionと言う名前の拡張機能の一種として実現されています。これにはシンタックスハイライト以外にもインテリセンスによる補完、括弧の対応、コメントの扱いなどが含まれています。

このLanguage Extensionは予約語の管理もしていて、VS Codeがそれに応じて色を付けるようになっています。たとえばifやforなどですね。逆に言うと予約されていない語に色づけするのは無理です。今回の”err”はGoのLanguage Extensionでは予約されていないので、自前で拡張を作る必要があります。

今回は追加したいキーワードがerrでしたので、既存のGoのLanguage Extensionに設定をInjectionするアプローチを取ります。これはオフィシャルガイドにやり方が書いてあります。

実際の手順は、まずガイドにあるとおり拡張機能のスケルトンを作成します。

Your First Extension | Visual Studio Code Extension API
https://code.visualstudio.com/api/get-started/your-first-extension

あとはInjection grammarsにあるとおりにハイライトしたい設定を書くだけです。Go err highlightingの場合は以下になります。

vscode-go-err-highlight/injection.json at main · hironobu-s/vscode-go-err-highlight
https://github.com/hironobu-s/vscode-go-err-highlight/blob/main/syntaxes/injection.json

おわりに

ちょうどMTGが延期になったりタスクが延期になったりで業務時間の空きができ、これはブログネタにもなりそうだと言うことでエイヤで一気に作り上げてしまいました。

ともかく、これでGoを書くのにもVS Codeを使っていくことができます。EmacsはCUI環境でも使えるのでまだまだ捨てることありませんが、しばらくはVS Codeも併用で開発を進めていくことになりそうです。

それではまた次回お目にかかりましょう。

ブログの著者欄

斉藤 弘信

GMOインターネット株式会社

2000年に同社に入社。ユーザーサポートやデータセンターでのオペレーション業務等を担当し,その後社長室などのゼネラル部門を経て,2014年9月よりクラウド/ホスティング事業のテクニカルエバンジェリストを担当。現在はWebプロモーション研究室のソフトウェアエンジニアとして勤務。得意分野はWebアプリケーションの設計/開発,Linuxサーバー構築/運用。

関連記事