2023/04/24

Goプロジェクトの概要をツリー表示するツール書いた

業務では PHP が9割、Goは残り1割くらいという状況なのだけど、けっこう付焼き刃で戦っている認識があり、2ヶ月くらい前から自身のGoスキルをもっとブラッシュアップしたいと思い立っていろいろと自主トレを行った。(実際は、3月、4月は趣味の釣りがお休みになるので、というのが理由の8割なんですけどw あと Rustの勉強に行き詰ったというのも少しあります)

そういうわけで、最初 golang のライブラリソースをいくつか見て回ろうとしたのだけど、知識が足りないこともあり、全体の構造をつかむのに難儀したのです。

いまどき、ライブラリのソースを読むと言ってもエディタがかなりの部分を助けてくれるので、それほどきっちり読む必要というのはないのかもしれませんが(実際私はこれまでGoで使っているライブラリのソースまできっちり読むということをそれほどやらずに来れている。いいのか悪いのかはてさて)、まあ、トレーニングなので普通はやらないことをどんどんやるというのが重要なのです。

というわけで、Goのライブラリをどんどん追いかけてみるぞとなるわけですが、Goのプロジェクト(リポジトリ)を見るときに抑えるべきは以下のような点だと思います。

  • 全体のディレクトリ構造(どういうレイアウトパターンなのか)
  • 依存モジュール
  • goバージョン
  • package
  • .go ファイルの関数やstruct(特にexportedなもの)

VSCodeなんかだと、リポジトリを開くとディレクトリビューがあって、ファイルを選択しながらアウトラインをポチポチすればこれらの情報はおさえられますし、github.com のソースビューもシンボル一覧に関してはかなりきれいに見せてくれます。そんなことより godocって知ってる?という意見もあると思うところですが、いかんせんやっぱり自分がGoプロジェクトの概要を一気に全部こんな風にして見せて欲しい!と思うものは結局見つからなかったのです。

ないなら書くしかありませんね。当然です。

goverview

その名も goverview というツールを書きました。バイナリ配布はまだありません。go install github.com/bayashi/goverview@latest してください。

使い方はものすごくシンプルで、goverview というコマンドがインストールされると思うので、コマンド引数に go で書かれたプロジェクトのディレクトリパスを指定すると、概要をツリービューで表示します。やったね。僕が欲しかったのはこれです。再開発だったらごめんなさい。

例えば、以下のような感じです。

$ goverview ~/go/src/github.com/bayashi/goverview

┌ goverview/
├─┬ .github/
│ └─┬ workflows/
│   └── run-tests.yaml
├── .gitignore
├── LICENSE: License MIT
├── README.md
├──* arg.go: main
├──* builder.go: main
├──* cmd.go: main
├─┬ fileinfo/
│ ├──* fileinfo.go: fileinfo
│ │     Struct: FileInfo
│ ├──* go.go: fileinfo
│ │     Func: GoInfo
│ ├──* gomod.go: fileinfo
│ │     Func: GoModInfo
│ └──* license.go: fileinfo
│       Func: LicenseInfo
├── go.mod: go 1.19
├── go.sum
└──* main.go: main

あまりにもでかいプロジェクトを覗くと非常に散らかった感じで見えてしまうかもしれませんが、そこそこのサイズならいい感じに概要を表示できると思います。

exportedではない関数やなんかも見たい場合は -a オプションが使えますし、表示されたくないディレクトリは --ignore にマッチさせたい文字列を渡して表示をスキップすることができます(デフォルトで .gitignore を読んでスキップもします)。

ちなみに、LICENSE ファイルの実ライセンスを表示するために github.com/google/licenseclassifier/v2 を使っているんですが、これがリアルガチな実装になっていて遅いみたいです。小さなプロジェクトでも LICENSE ファイルがあると1, 2秒待たされます(私のマシンが遅い?)。

まああとはファイル数に応じて表示が待たされるので、ファイル数の多いプロジェクトだとちょっと待ちます(ゴルーチンの習作にもなりそう!)。

というわけで、goverview よかったら遊んでみてください。

今日の紹介は以上になります。

よかったらチャンネル登録と高評価お願いします。

おわり

サイト内検索