Works by

Ren's blog

@rennnosuke_rk 技術ブログです

golang.tokyo#37で登壇しました

遅くなってしまいましたが、11/26(火)にgolang.tokyo#37で登壇しました。

speakerdeck.com

今回が初めてのオフラインでの登壇だったので少し緊張しましたが、懇親会で直接感想をいただけたのが嬉しかったです。

登壇内容について

Goの静的解析をテーマに登壇しました。

以下、登壇中に紹介できなかった点について簡単に紹介します。

解析対象のASTを確認する

静的解析ツールを作成中、ASTノードをキャストしながら目的の構文を探すことがよくあります。

この時、解析対象のソースコードのASTがどうなっているのか、どのような ast.Node 具象型 かがコードの位置ごとにわかると便利です。

ASTを出力するツールはいくつかあります。

  1. go/parser でAST Treeを出力するコードを自分で書く
  2. gotype -ast でAST Tree を出力する
  3. GoAST Viewerを使う

自分は2.3.をよく使っています。特にGoAST Viewerはブラウザベースで簡単に使えるので便利です (WASM向けにビルドされたGoバイナリをローカルで実行しているようなので、サーバー通信もなく高速です)。

github.com

ReviewDog

github.com

既にご存知の方も多いと思いますが、ReviewDogを使用すればLinterの結果をレビューコメントとしてGitリポジトリホスティングサービス上に表示させることができます。 よくある使い方として、GitHub PRへのコメントがあります。

様々なLinterの結果をpipeで入力できるので、独自Linter含めgolangci-lintなどのOSS Linterも流して表示することができます。

$ gofmt -s -d . | reviewdog -name="gofmt" -f=diff -f.diff.strip=0 -reporter=github-pr-review
$ shellcheck -f diff $(shfmt -f .) | reviewdog -f=diff

おわりに

今後もGoやっていきます。