2000行を超えるような巨大Markdownファイルを扱うと、VSCodeの標準プレビューや「Markdown Preview Enhanced」といった拡張機能では途中で表示が止まったり、スクロールが極端に重くなることがあります。
特に技術ドキュメントやREADME、設計資料のように一つのファイルに情報を詰め込むケースでは、この「プレビューが追いつかない問題」に直面しやすいでしょう。
そこでおすすめなのが、エディタとCLIの役割分担です。
編集作業はVSCodeなどGUIエディタに任せ、閲覧・検索・部分的な抽出はターミナルで行う。このシンプルな切り分けだけで、大規模Markdownの運用ストレスを大きく減らすことができます。
この記事では、
- 読む(速く・軽くプレビューする)
- 探す(目的の章やキーワードを瞬時に見つける)
- 書く(安全に分割・統合する)
という3つの観点から、CLIでできる実用的なアプローチを紹介していきます。
前提ツール(最小セット)
巨大Markdownでも“読む・探す・書く”を軽く回すために、まずは 最小セット を入れておきます。標準コマンドに加えて、軽量なMDビューアを1つ入れておくと効果が大きいです。
標準で使うコマンド
less
:高速ページャ(-R
で色、-S
で折り返し無効)grep
/rg
(ripgrep):行番号付き検索(-n
)sed
/awk
:範囲抽出・整形
ripgrep は
grep
より高速で大規模ファイル検索に向きます(置き換えではなく“併用”がおすすめ)。
追加ツール – Markdownプレビュー(どれか1つでもOK)
glow
:端末内でサクッとMD表示できるTUIビューア(最速系)mdcat
:色付き・リンク・表の表示が綺麗なMDレンダラ(less -R
併用推奨)grip
:GitHub風にHTML化してローカルHTTPで配信(ブラウザで全行チェック)
インストール例
Ubuntu / Debian
# ripgrep
sudo apt-get update && sudo apt-get install -y ripgrep
# glow(公式バイナリ推奨。aptにある場合はそちらでもOK)
curl -fsSL https://github.com/charmbracelet/glow/releases/latest/download/glow_amd64.deb -o glow.deb
sudo apt-get install -y ./glow.deb
# mdcat
sudo apt-get install -y mdcat
# grip
sudo apt-get install -y python3-pip && pip3 install --user grip
macOS(Homebrew)
brew install ripgrep glow mdcat
# grip は pip がおすすめ
pip3 install --user grip
Arch / Manjaro
sudo pacman -S --needed ripgrep glow mdcat python-pip
pip3 install --user grip
すぐ使える環境設定の小技
# 色を通す less(~/.bashrc など)
export LESS='-R'
# ripgrep で日本語検索の体感向上(候補)
alias rgn='rg -n --hidden --follow --glob "!.git"'
まずは“読む”(最短ルート)
大規模Markdownを一気に開くとき、まず必要なのは「止まらずに全部読めること」です。CLIツールを活用すると、余計な描画処理を挟まないため、2000行以上でもスムーズに表示できます。
glow で軽快に読む
glow README.md
シンプルに端末内でレンダリングしてくれるため、最速で全体を確認できます。コードブロックや見出しも整って表示されるので、素早いレビューや読み流しに最適です。
mdcat × less で色付きプレビュー
mdcat README.md | less -R
表やリンクの表示がきれいで、色付きで確認したいときに便利です。less -R
を組み合わせることでカラーコードをそのまま表示できます。
grip でGitHub風表示
grip README.md
ローカルHTTPサーバーが立ち上がり、ブラウザでGitHub風に全行プレビューできます。画像やリンクを含むファイルを確認する際に有効で、ドキュメントを「公開前にどう見えるか」チェックしたい場面で役立ちます。
これらを状況に応じて使い分けることで、「重くて開けない」「途中で止まる」といった悩みを解消できます。
とにかく速く全体を把握したいなら glow、表示品質を重視するなら mdcat、レイアウト確認までしたいなら grip が基本の選択肢です。
“探す”(ピンポイント表示)
巨大ファイルでは「全部読む」よりも、必要な箇所に一瞬で辿り着くことが重要です。行番号付き検索や見出しジャンプ、周辺だけの抽出で、読み込み負荷を抑えながら効率よく目的地へ移動します。
行番号付きで高速検索(ripgrep推奨)
# 単語一致(大文字小文字無視)
rg -n -i "キーワード" README.md
# 正規表現で見出しだけ検索(例:H2)
rg -n "^## " README.md
rg
は該当行番号を出してくれるので、そのまま sed
で周辺表示に繋げられます。
見出しからジャンプ(fzfでインクリメンタル選択)
grep -n '^#' README.md \
| fzf \
| cut -d: -f1 \
| xargs -I{} sed -n '{}',+80p README.md
- すべての見出しを一覧 → fzfで選択 → 選択地点から80行だけ表示。
- 表示行数は
+80
を好みで調整できます。
キーワードの“周辺だけ”を抜き出す
# ヒット行の前後10行をまとめて表示(複数ヒット対応)
rg -n "キーワード" README.md \
| cut -d: -f1 \
| xargs -I{} sh -c 'sed -n "$((-10+{})),$(({}+10))p" README.md | sed "s/^/[{}] /"'
- 大量ヒットでも全文を開かず、周辺だけを確認できます。
10
の部分で前後表示行数を調整。
範囲抽出(見出し〜次の見出しの手前まで)
# “対象章の見出し”から“次の見出しの直前”までを抽出
awk '
/^## / { # H2見出しを章の開始とみなす
if (printing) exit # すでに出力中なら終了
}
$0 ~ pattern { printing=1 } # ここから出力開始
printing { print }
' pattern="^## 対象章タイトル$" README.md
- 章単位でのレビューや、該当セクションだけの確認に便利です。
pattern
は正規表現なので、部分一致や曖昧指定も可能。
すぐに戻れる“見たいところだけ”リーダー
# 見出しを選んで、その章だけをglowでプレビュー
grep -n '^## ' README.md \
| fzf --prompt='章を選択> ' \
| awk -F: '{print $2}' \
| xargs -I{} awk -v p="^## {}$" '
$0 ~ p {flag=1}
/^## / && $0 !~ p && flag {exit}
flag
' README.md | glow -
GUIプレビューに頼らず、章を選んで即プレビューできます。
対象を絞り込むことで、2000行超でも操作が軽く保てます。
“書く”(壊さない分割・統合)
巨大Markdownは、章ごとに分割して編集 → 確実に再結合できる運用にすると壊れにくくなります。VSCodeの操作はそのままに、分割と結合だけCLIで支えるイメージです。
見出しごとに自動分割(最小コマンド)
H1見出し(#
)を境にファイルを切り出す例です。
csplit -f part_ -b '%02d.md' README.md '/^# /' '{*}'
part_00.md
,part_01.md
…のように連番で出力されます。- H2(
##
)で分割したい場合はパターンを変更します。
H2で分割(日本語タイトルにも強いawk版)
awk '
BEGIN {file="part_00.md"}
/^## / {
i++
file=sprintf("part_%02d.md", i)
}
{ print > file }
' README.md
- 章タイトルに特殊文字が含まれても安定して分割できます。
- 生成された
part_*.md
を個別に編集します。
安全に再結合(順序保証+見出しガード)
# 連番の昇順で結合
ls part_*.md | sort | xargs cat > README.new.md
# 先頭行が見出しで始まっているか軽く検査(失敗時は終了)
awk 'FNR==1 && $0 !~ /^#/{bad=1} END{exit bad}' README.new.md
# 問題なければ置き換え
mv README.new.md README.md
- まずは新ファイルに結合してから検査→置換の流れにすると事故を防げます。
sort
と連番を組み合わせて、編集順序のブレを防ぎます。
差分を素早く確認(壊していないかを即確認)
git diff --word-diff=color README.md
# あるいは
git diff -U0 README.md | less -R
- 文字単位や行単位で差分を確認できます。
- コードブロックの崩れや見出しの消失に早めに気づけます。
よくある躓きと対処
- 見出しの粒度が粗すぎる → 分割後の一つ一つが依然として巨大になります。H2/H3のどちらで分けるかを見直します。
- 画像や相対リンクが壊れる → 画像パスやリンク先をルート相対に寄せる、もしくは分割先に合わせて
basepath
を決め打ちします。 - 手動で結合して順序が入れ替わる → 連番+
sort
のワンパターンで統一します。
この分割・統合の導線を用意しておくと、2000行を超えるファイルでも編集の心理的負担がぐっと下がり、レビューや修正を小さく速く回せます。
仕上げ(TOCと表示小技)
分割や検索で目的の箇所を見やすくしても、全体像を素早く把握する仕組みがなければ迷子になりがちです。最後に、目次(TOC)の自動生成や表示まわりの小技を加えることで、大規模Markdownをさらに扱いやすくできます。
TOC(目次)の自動生成
Pandocを使うと、MarkdownからHTMLを生成する際に目次を自動で付けられます。
pandoc --toc -s README.md -o README.html
生成されたHTMLをブラウザで開けば、見出しごとにリンク付きのTOCが表示されます。
CLI中心であっても、「どの章がどこにあるか」を全体像として把握しておくのに便利です。
折り返しと横スクロール
長い行が多いMarkdownは、折り返し設定で可読性が大きく変わります。
# 横スクロールモード(折り返し無効)
less -S README.md
# 120文字で折り返す
fold -w 120 README.md | less
用途に応じて切り替えられるよう、エイリアス化しておくと楽です。
すぐに見たい所だけ表示する
目次や見出しと検索を組み合わせて、章単位での閲覧をルーチン化すると効率が上がります。
特に fzf
と grep
を連携させる方法は、TOCと似た役割をCLIで果たせます。
こうした「最後の仕上げ」を加えるだけで、2000行を超えるMarkdownも 迷わずナビゲートできるドキュメント へと変わります。
まとめ
2000行を超えるMarkdownファイルでも、工夫次第でストレスなく扱えます。
ポイントは 「読む・探す・書く」それぞれに最適なツールを割り当てること です。
- 読む:
glow
やmdcat
で軽快にプレビュー、grip
でブラウザ表示。 - 探す:
rg
やgrep
でキーワード検索、fzf
と組み合わせて見出しジャンプ。 - 書く:
csplit
やawk
で章ごとに分割し、安全に再結合。
さらに、TOCの自動生成や less
の表示オプションを組み合わせることで、巨大なファイルでも「迷わない・止まらない・壊さない」運用が可能になります。
エディタ単体で頑張るのではなく、CLIと役割を分担するハイブリッド運用を意識すれば、Markdownはもっと大規模で実用的なドキュメント形式として活かせます。
参照リンク
- Markdown Preview Enhanced – Visual Studio Marketplace
- glow – Render markdown on the CLI, with pizzazz! (GitHub)
- mdcat – Fancy Markdown rendering for the terminal (GitHub)
- grip – Preview GitHub Markdown files locally before committing (GitHub)
- ripgrep – Line-oriented search tool (GitHub)
- fzf – A command-line fuzzy finder (GitHub)
- Pandoc – a universal document converter
- teratail – VSCode または Cursor のマークダウンプレビューについて