[小ネタ] ディレクトリ構造をハイパーリンク付き Markdown に変換する

投稿者: | 2021/06/01

Converting file and directory structure to Markdown.

小ネタが続きます。

皆様はこんな御経験をお持ちではないでしょうか。

  • ソフトウェアリリース時に、ソースコードのディレクトリ構造について説明資料を用意したい。できたら、ハイパーリンクをクリックすると、当該ディレクトリの中を閲覧できるようにしたい。
  • 社内のイントラネット上で、歴史的事情で混乱したディレクトリ構造になっている社内資料について、どこにどんな資料があるのか、ドキュメント化したい。

いずれも Markdown で文書化すれば、ハイパーリンクを含んだ使いやすい資料とすることができます。しかし、Markdown であっても、ディレクトリ構造を手で記述するのは面倒ですよね?

tree コマンド

そんな時に最初に思いつくのが、Unix 系 OS で広く使われている(?)tree コマンドです。

残念ながら、tree コマンドには直接 Markdown 形式で出力する機能がありません。しかしながら、つらつらと man ページを眺めていたら、-H なるオプションを見つけました。これは、出力を HTML 形式にする、というものです。

例えば、こんな感じで実行できます。

bash$ tree -L 2 -H . > poi.html

こんな感じに出力されます。

<!DOCTYPE html>
<html>
<head>
    <!-- 略 -->
</head>
<body>
        <h1>Directory Tree</h1><p>
        <a href=".">.</a><br>
        ├── <a href="./kesu.md">kesu.md</a><br>
        ├── <a href="./poi.html">poi.html</a><br>
        ├── <a href="./%E8%AD%B0%E4%BA%8B%E9%8C%B2/">議事録</a><br>
        │   ├── <a href="./%E8%AD%B0%E4%BA%8B%E9%8C%B2/2019%E5%B9%B4/">2019年</a><br>
        │   ├── <a href="./%E8%AD%B0%E4%BA%8B%E9%8C%B2/2020%E5%B9%B4/">2020年</a><br>
        │   └── <a href="./%E8%AD%B0%E4%BA%8B%E9%8C%B2/2021%E5%B9%B4/">2021年</a><br>
        └── <a href="./%E9%A1%A7%E5%AE%A2%E8%B3%87%E6%96%99/">顧客資料</a><br>
        &nbsp;&nbsp;&nbsp; ├── <a href="./%E9%A1%A7%E5%AE%A2%E8%B3%87%E6%96%99/A%E7%A4%BE/">A社</a><br>
        &nbsp;&nbsp;&nbsp; └── <a href="./%E9%A1%A7%E5%AE%A2%E8%B3%87%E6%96%99/B%E7%A4%BE/">B社</a><br>
        <br><br>
        </p>
        <p>

7 directories, 2 files
        <br><br>
        </p>
        <hr>
        <p class="VERSION">
                 tree v1.8.0 © 1996 - 2018 by Steve Baker and Thomas Moore <br>
                 HTML output hacked and copyleft © 1998 by Francesc Rocher <br>
                 JSON output hacked and copyleft © 2014 by Florian Sesser <br>
                 Charsets / OS/2 support © 2001 by Kyosuke Tokoro
        </p>
</body>
</html>

ここでひらめきました!(← 大げさ) Pandoc を使えば、Markdown に変換できるのでは?

Pandoc で Markdown に変換する

こんな感じです。

bash$ tree -L 2 -H . | pandoc -f html -o poi.md

無事に変換できました。HTML からの変換はやや強引なので、あまり綺麗な Markdown にはなっていませんが、あとはチョコチョコと手編集すればなんとかなりそうです。

Directory Tree
==============

[.](.)\
├── [kesu.md](./kesu.md)\
├── [poi.html](./poi.html)\
├── [議事録](./%E8%AD%B0%E4%BA%8B%E9%8C%B2/)\
│   ├── [2019年](./%E8%AD%B0%E4%BA%8B%E9%8C%B2/2019%E5%B9%B4/)\
│   ├── [2020年](./%E8%AD%B0%E4%BA%8B%E9%8C%B2/2020%E5%B9%B4/)\
│   └── [2021年](./%E8%AD%B0%E4%BA%8B%E9%8C%B2/2021%E5%B9%B4/)\
└── [顧客資料](./%E9%A1%A7%E5%AE%A2%E8%B3%87%E6%96%99/)\
    ├── [A社](./%E9%A1%A7%E5%AE%A2%E8%B3%87%E6%96%99/A%E7%A4%BE/)\
    └── [B社](./%E9%A1%A7%E5%AE%A2%E8%B3%87%E6%96%99/B%E7%A4%BE/)\
\
\

7 directories, 2 files\
\

------------------------------------------------------------------------

tree v1.8.0 © 1996 - 2018 by Steve Baker and Thomas Moore\
HTML output hacked and copyleft © 1998 by Francesc Rocher\
JSON output hacked and copyleft © 2014 by Florian Sesser\
Charsets / OS/2 support © 2001 by Kyosuke Tokoro

お粗末様でした。今日はここまで。

お問い合わせはお気軽に!

お問い合わせを頂いた後、継続して営業活動をしたり、ニュースレター等をお送りしたりすることはございません。
御返答は 24時間以内(営業時間中)とさせて頂いております。もし返答が届かない場合、何らかの事情でメールが不達となっている可能性がございます。大変お手数ですが、別のメールアドレス等で督促頂けますと幸いです。