7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

闇の魔術に対する防衛術Advent Calendar 2018

Day 20

忍びの地図を作ったはずがオーラー(闇祓い)専用の汎用性の低いコマンドになった件

Last updated at Posted at 2018-12-24

最近、転職活動しながらオーラー(闇払い)の修行をやっておりますaimofです。(意訳:リファクタ必至の読めないコードの整備補助ツールを作っています)
闇の魔術に対する防衛術の先生が失踪したと聞いて、代わりに投稿します。

対象言語はGoです。

忍びの地図、ご存知ですか?

「闇の魔術の防衛術」の元ネタ"Harry Potter"シリーズに登場する便利アイテムで、学校内の人の動きを追跡したり、抜け道書いてあったりなんかいろいろ多機能な地図です。

地図といえば前にプログラミング中に、地図がほしい事象が合ったような……

本題

皆さん、リポジトリ内でパッケージの依存関係(特にExport先)を調べたいことってありますよね?
そんなときのために、依存関係調査ツールdeponを作成しました!(似たツールがすでにあるかは未調査)

github.com/aimof/depon

一日で作ったのでdepon自体のソースコードが闇の魔術ですが、細かいことはおいておいて……

デモ

GOPATH$HOMEです。

~/src/github.com/aimof/depon/cmd/depon $ depon
Ex	Im	packages
1	6	github.com/aimof/depon
1	0	errors
1	0	path/filepath
1	0	strings
0	4	github.com/aimof/depon/cmd/depon
2	0	fmt
1	0	os/exec
1	0	log
1	0	flag
1	0	os
~/src/github.com/aimof/depon/cmd/depon $ depon -package github.com/aimof/depon
export: [github.com/aimof/depon/cmd/depon]
import: [fmt errors strings os/exec os path/filepath]

オプションなしで、リポジトリ内のすべてのexport、import数を表示します。(順番未整備)
-packageオプションをつけると、特定パッケージのexport, import一覧が表示されます。(同じく順番未整備)

(ちなみに--packageoptionはmaster未マージだったり…)

詳細

goパッケージを含むgitリポジトリに対して、リポジトリ内の依存関係を明らかにします。
既存ツール(depth)との違いは、パッケージを指定してexport先を表示することです

実装

type Tree struct {
	root     *node
	allNodes mapNodes
}
type node struct {
	name     string
	tree     *Tree
	parents  mapNodes
	children mapNodes
}
type mapNodes map[string]*node

グラフのようなものを作ってマッピングして、うまいことやります。

なぜdeponがオーラー(闇祓い)専用の汎用性の低いツールなのか?

作ってから気づきました。

__go__で、__リポジトリ内限定__で、__パッケージ単位__でexport先が知りたい状況……

それってやばくね?

解説

goは、パッケージ(ディレクトリ単位)内のファイルが多い言語で、逆にいえば、パッケージ数は少なくなりがちなのです。
パッと見ただけでexport先がわからないというのは、無駄にパッケージが多く、依存関係がめちゃくちゃな、闇の魔術的ソースコードと呼ぶにふさわしい代物です。

そんなコードと戦う環境って多くない……よね?

github.comの適当なリポジトリを見ると、サブパッケージ数が10個超えているところなんてほとんどありません。(5個こえているところすら殆ど無い)

私みたく「パッケージ数を2/3にしてやったぜ」みたいな武勇伝語る人は多くないはず。

結論?

このツールって必要なくね?

少なくともまともな環境では使い道ないけど、需要あれば開発する。

注というか課題というか言い訳

思いついてから一日で作ったので、ソースコードが闇の魔術しているけど許してください。
また、使用に制約が多いため、多分クローンしてきてインストールして使ってみてもだいたい失敗します。
READMEをほしい同士がいたらコメントください。

7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?