1. はじめに
Markdownは、見出しの大きさを「#」の数で指定し、文章を簡単に構造化できる記法です。また、一定のルールに基づいてHTMLにレンダリングされるため、多くのブログで採用されています(例: Qiita)。
Markdownを使用して情報をまとめる際、全体の構造を一目で把握したくなることがあります。その際に便利なのが、Markdownファイルの階層構造をUNIXコマンドのtreeのように出力することができるmarktreeコマンドです。
Linux向けからの変更
以前はLinux向けにaptでインストールできるようにPPAリポジトリを使用していましたが、Windowsに戻ったためスクリプトを書き直し、パッケージ名も「markdown-tree」から「marktree」に変更しました。インストールはPyPIを使用します。
詳しい開発経緯は以下の記事をご覧ください。
2. セットアップ(Setup)
pipを使用してインストールします。
pip install marktree
Windowsで「警告」が出た時の対処方法
Windowsでpip installを実行すると、PATHに通っていない旨の警告("WARNING: The script clipcount.exe is installed in 'ファイルパス' which is not on PATH.")が表示されることがあります。この場合、C:\Users\user\Documents\PowerShell\Profile.ps1に以下のようにPATHを追加してください。
$env:path += ";C:\Users\user\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\LocalCache\local-packages\Python311\Scripts"
Powershellのバージョンが「5」なら、Profile.ps1の保存先フォルダは「Powershell」から「WindowsPowerShell」に変えてください。
上記の設定は、Powershellのバージョン「7」を想定しています。
詳しくは以下の記事を御覧ください。
また、WARNING: Failed to write executable - trying to use .deleteme logic といった警告が出てインストールそのものが出来ないこともあります。この問題の解決については、以下の記事をご参照ください。
3. 簡単な使い方(Quick usage)
marktree [オプション] [hoge.md]
| オプション | 説明 |
|---|---|
| marktree -h | ヘルプ画面を表示します。 |
| marktree --help-jp | ヘルプ画面を日本語で表示します。 |
| marktree -L 3 | -Lオプションはツリーが表示される階層を決定します。(デフォルト: 6) |
| marktree -C | -Cオプションは、クリップボードにコピーされたMarkdownテキストをツリー形式で直接出力します。 |
| marktree -P | -Pオプションを指定すると、ツリー化せずに見出しをそのまま出力します。 |
| marktree -E 文字コード | -Eオプションでファイルの文字コードを指定できます(例: utf-8, cp932, shift_jis)。「Decode Failed」というエラーが出たら使用してください(デフォルト: utf-8 ) |
例
次のようなMarkdownファイルhoge.mdを用意してください。
# h1
ここではセクション全体の概要を紹介します。読者がこの章で何を学べるかを簡単に説明します。
## h2
最初のトピックについて詳しく説明します。背景や前提条件もここで示します。
### h3
この小節では、上で紹介したトピックに関する具体的な詳細を述べます。
#### h4
さらに理解を深めるための補足情報や注意点をここに記載します。
#### h4
追加の例やポイントを挙げて、前の小節の内容を補強します。
## h2
このセクションでは、二つ目の主要なポイントを紹介し、関連情報を提供します。
## h2
別の重要なトピックについて説明し、例や考察を加えます。
### h3
二つ目のトピックに関する詳細を掘り下げ、重要な概念を解説します。
#### h4
具体的な使用例やケーススタディを示し、理解を助けます。
##### h5
補足的なポイントや注意事項を挙げ、主要な議論をサポートします。
###### h6
参考情報や注釈、追加のヒントなど、詳細情報を提供します。
### h3
この小節の結論として、重要なポイントをまとめます。
# h1
最後のセクションでは全体のまとめを行い、読者への締めくくりを提供します。
- 通常の出力(デフォルトの階層は6):
$ marktree hoge.md
├── h1
│ ├── h2
│ │ └── h3
│ │ ├── h4
│ │ └── h4
│ ├── h2
│ └── h2
│ ├── h3
│ │ └── h4
│ │ └── h5
│ │ └── h6
│ └── h3
└── h1
-
-L 3を使用して階層を決める:
$ marktree -L 3 hoge.md
├── h1
│ ├── h2
│ │ └── h3
│ ├── h2
│ └── h2
│ ├── h3
│ └── h3
└── h1
-
-Cを使用すると、クリップボードにコピーされたMarkdownテキストをツリー形式で直接出力します。さらに、-Lを組み合わせて使うこともできます:
$ marktree -C -L 3
├── h1
│ ├── h2
│ │ └── h3
│ ├── h2
│ └── h2
│ ├── h3
│ └── h3
└── h1
-
-Pを使用すると、見出しをそのまま出力します。文章の見出しだけ取得したい場合に、ご使用ください:
$ marktree -C -P
# h1
## h2
### h3
#### h4
#### h4
## h2
## h2
### h3
#### h4
##### h5
###### h6
### h3
# h1
4. 使い方(Usage)
marktree コマンドは、Markdown ファイルの # に基づいてファイルをツリー階層として出力します。
-
-Lオプションは、元のtreeコマンドと同様に出力の深さを指定します。深さは 1 から 6 まで可能で、それ以上を指定するとエラーが発生しますので注意してください。(デフォルト: 6) -
-Cオプションは、クリップボードにコピーされた Markdown テキストをツリー形式で直接出力します。これにより、Markdown テキストを別ファイルにコピーする必要がなくなります -
-Pオプションを指定すると、ツリー化せずに見出しをそのまま出力します。ツリー構造ではなく平文で見出しだけ確認したい場合に便利です -
-Eオプションでは、ファイルを開く際の文字コードを指定できます(例:utf-8、cp932、shift_jis)。文字化けを防ぐため、ファイルの実際の文字コードに合わせて指定してください。(デフォルト:utf-8)
オプションの順序は、渡す Markdown ファイルを含めて特に決まっていません。
また、複数のファイルを渡した場合(例: markdown hoge.md foo.md)、最後に指定したファイルのみが変換されて出力されます。
5. まとめ
marktreeはMarkdownファイルを読み込み、「#」の数だけ階層が深くなるtreeを生成するコマンドです。目次代わりにも使えるので、ぜひ試してみてください。