Goチームが贈る強力な解析ツール!「Go Analysis Framework」で静的解析をモジュール化しよう
Go Analysis Framework: modular static analysis by go team
Go Analysis Framework: modular static analysis by go team
Goチームが開発した「Go Analysis Framework」は、Go言語の静的解析をモジュール化するためのフレームワークです。再利用性の高い解析ツールを効率的に構築するための基盤として設計されており、独自の静的解析ルールを作成したいエンジニアにとって必須のツールキットとなっています。
ちょうど探してたところだよ。さっそく試してみる。
これって新しくないよね?すでにかなりのリンターで使われているのがわかるはず:
https://pkg.go.dev/golang.org/x/tools/go/analysis?tab=import... (https://pkg.go.dev/golang.org/x/tools/go/analysis?tab=importedby)
Goが冗長だって文句を言う人もいるけど、自分はGoの何もかもが大好きだよ。
エラーハンドリングも、強制的なフォーマットも、スタイルガイドを含めたすべてのリンティングも最高。他の人のソースコードを読んでも、すごく理解しやすくて納得できる。Goチームのみんな、ありがとう。
(まあ、最近のジェネリクス追加については少し懐疑的かもしれないけど、全体としては素晴らしい言語だよ。愛してる。)
で、コンテキストは何?これは新しくないし、なんで今これが投稿されてるの?
SpiceDB0では、このフレームワークを使って独自の解析器を定義することで大きな成功を収めているよ。LLMのおかげで、今は以前より10倍簡単になった気がする。わざわざ口伝の知識を頼ったり、コードレビューに時間を無駄にしたりしなくても、リンターにしてしまえば解決できるからね。
ソフトウェアエンジニアリングのためのGoチームのツールへのこだわりは、人間にとってもエージェントによる開発にとっても恩恵があるよね。自分自身にも、自分のエージェントにも優れたツールを与えてあげよう。
最近のプロジェクトからの例を挙げるとこれ:
https://github.com/verdverm/gmd/blob/main/Makefile (https://github.com/verdverm/gmd/blob/main/Makefile)
(毎回正しい引数やフラグを推測させるのではなく、エージェントにシンプルな「ツール呼び出し」をさせる、本質的には呼び出し可能なagents.mdのようなもの)
ここから面白い点として挙げられるのは、テストにビルドタグ { unit, coverage, recorded, real api } を使っていること。これがあることで、エージェントがより速く、的を絞った反復作業ができるようになる。自分はリンティングとカバレッジを新しいセッションで実行してレポートを生成させ、別のセッションでそのギャップに対処し始めるという流れにしている。
Goの内部ソースにあるもう一つの超クールなテストツールに testscript があるよ。Roger Peppeが内部ユーティリティのいくつかをここに抽出しているね。
https://github.com/rogpeppe/go-internal/tree/master/testscri... (https://github.com/rogpeppe/go-internal/tree/master/testscript)
こういうプリミティブな機能を使って、より広範な「アーキテクチャ」レベルのリンターって作れるものなの?