Skip to main content
  1. Entry/

Go の AST を眺めるツール go-ast-inspector を作った

Go Advent Calendar シリーズ2の8日目。

Go で AST を扱う時に便利なツールを作ったはなし。

AST をいじりたいが・・・ #

テストをいい感じに実行ツールを go/ast を使ってやりたかったのだが、実は今までまともにASTを扱ったことがない。 何をしなければいけないのかは何となく分かるが、何を対象に処理を行えばいいのかのイメージがぼんやりしていた。 どの枝のどのノードを探しに行けばいいんだろうか、とか、そもそも目的のノードを表す名前がわからない、とか。 godoc を読んだり、実際にコードを書いていじっていればそのうち覚えるのだろうが、 そこにあまり時間をかけたくないなというのが正直な気持ちだった。

AST を眺めるためのツールを作った #

上記のようなモチベーションから、Go Ast Inspector というブラウザで動作するツールを作った。

go-ast-inspector

ブラウザの Web インスペクタのように、コードとASTの対応を確認できるというもの。 https://handlename.github.io/go-ast-inspector/ を開けばすぐに使えるので試してみてほしい。

Wasm で AST パーサーを動作させているので、一度ページをロードしてしまえば後はオフラインでも動作する。 入力したコードを何処かに送信することもないので、仕事用のコードにも使えて安心。

画面は左右に分かれていて、左のエディタペインのコードにカーソルを合わせると右のASTペインの対応するノードがハイライトされる。 逆に、AST ペインにカーソルを合わせれば、対応するコードがハイライトされる。

その他の機能については README を参照してほしい。 同類のツールには goast-viewerAST Explorer があり、これらを参考にしている。

開発 #

今回の開発は、すべて Claude Code によるもの。 Agentic Coding も今ではすっかり当たり前になってしまった。

ワークフロー #

最近の個人的な Agentic Coding の流れは以下の通り。

  1. /prj-define-reqirement で要件を定義する。REQUIREMENT.md が作られるので中身をざっくり確認して気になる部分があれば手直し
  2. /prj-define-design で技術的な設計書を作る。DESIGN.md が作られるのでこれも中身をざっくり確認して気になる部分があれば手直し
  3. /prj-define-tasks で実装のためのタスクをリストアップ(初期実装は終わったのでもう削除してしまったがこういうやつ)
  4. /prj-exec-tasks でタスクを実行し、完成するまで待つ
  5. 動作確認をして、気に入らない部分があれば都度修正を指示
  6. 完成!

上記の各 Slash Command は自作のもの。 自作と言ってもすべて手で書いたわけではなく、ざっくりしたコマンドの内容を書いた上で /brushup-slash-command でブラッシュアップした上で使用している。

技術選定 #

今回、フレームワークには Svelte を、Go のコードパースには前述の通り Wasm を使っているが、 どちらも筆者自身は名前を知っていただけで使ったことはない。 Claude Code に設計書を作らせた時点で「なるほどそういう選択肢があるんだな〜じゃそれで」くらいの指示しかしていない。 あとは「そうやってやるのか勉強になるな〜」と思いながら眺めていただけ。

便利な時代になったもんだ。

おわり #

「ほしいけど自分で作るのはめんどくさい」系のアプリケーションを作る場合は、コーディングエージェントは非常に強力なツールである。 仕事でも、仕様がかっちり決まっている小範囲の実装や、実装を正としたテストコードの作成など、 やることはわかっているけどめんどくさい系の作業はおおよそ任せられるようになっている。

あとはどこかで panic した際の原因調査とか。 いままではデバッガでステップ実行して値を確認しながら原因を特定していたものが、「調べて」だけで済むようになった。 時間がかかるだけのストレスフルな仕事を丸投げできるのは精神衛生的にも良い。

go/ast を使ってやりたいこと」というやつを Claude Code にやらせればいいんじゃないの?と思うかもしれないが、 自分でコードを書いた上で実現したい場合と、コードとかそういうのはいいからさっさと動くものを作りたい場合があって、 今回は前者にあたるものだったという話。go-ast-inspector は後者だった。