▽Copy/Cut/Paste/Hatena ●04/18 21:49 2021-11-30 せめてリポジトリの各ディレクトリの概要説明だけでも欲しい思ったので dirmap というツールを作ってみた Go 既存の開発に参加するときや、0->1の開発をしているとき、いつも「せめてリポジトリの各ディレクトリの概要説明だけでも欲しい」と思っていました。 既存のプロジェクトに参加するときは「プロジェクトの理解をする側」、0->1のプロジェクトで開発をしているときは「説明をする側の立場」で、です。 Ruby on Railsのような基本のディレクトリレイアウト決まっていてもそのプロジェクトの独自性がでてきますし、Goのようにスタンダードなレイアウトがないのであればなおさら初見ではわかりません。 「じゃあREADME.mdにでも書いておけばいい」というのはその通りです。 ただ、概要説明であっても一度書いたら終わりではなく、更新は必要になります。特に0->1のプロジェクトの初期ではディレクトリレイアウトすら途中で変わるということはままあります。 (ここらへんは「継続的ドキュメンテーション」として私の興味のある分野です。私のSpeaker Deckのドキュメント系の発表は大体が継続的ドキュメンテーションにつながっています) そこで、できるだけ簡単に各ディレクトリの概要説明を実現するために dirmap というツールを作ってみました。 GitHub - k1LoW/dirmap: dirmap is a tool for generating a directory map. :file_folder: dirmap is a tool for generating a directory map. - GitHub - k1LoW/dirmap: dirmap is a tool for generating a directory map. github.com github.com dirmap dirmapはディレクトリを再帰的に走査して各ディレクトリの「概要を説明していそうな箇所の文字列」を取得し「各ディレクトリの概要説明=ディレクトリマップ」を生成するツールです。 たとえば dirmap のリポジトリルートで dirmap generate を実行すると以下のような tree に近い出力を得ることができます。 $ dirmap generate . ├── .github/ │ └── workflows/ ├── cmd/ ... Commands. ├── config/ ... Configuration file. ├── matcher/ ... Implementation to find the string that will be the overview from the code or Markdown. ├── output/ ... Output format of the directory map. ├── scanner/ ... Implementation of scanning the target directory and its overview from the file system based on the configuration. ├── scripts/ ... scripts for Dockerfile. └── version/ ... Version. この Commands. や scripts for Dockerfile. のような概要っぽい文字列はどこから取得しているかというと、「そのディレクトリにあるMarkdownファイルの見出しではない最初のパラグラフ」や「そのディレクトリにあるGoのソースコードに書かれているgodocのpackages Overviewにあたる部分」などです。 このように「そのディレクトリにあるファイルからそのディレクトリの説明となる文章を抽出すれば、各ディレクトリの概要説明の管理も最小限になるだろう」という算段です。 「概要っぽい文字列」の取得ルールは設定ファイルを渡すことで変更も可能です。built-inな markdown markdownHeading godoc 以外にも正規表現マッチもサポートしています。 設定ファイルは dirmap init で生成可能です。書かれている設定は dirmap のデフォルト設定(設定ファイルなしの場合の挙動と同じ)になります。 $ dirmap init Create .dirmap.yml # $ cat .dirmap.yml targets: - file: .dirmap.md matcher: markdown - file: README.md