Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

最近、転職活動しながらオーラー(闇払い)の修行をやっております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をほしい同士がいたらコメントください。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした