2000行Markdownを一気に表示:ターミナルでサクサク読む・探す・書く

テキスト処理
スポンサーリンク

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

用途に応じて切り替えられるよう、エイリアス化しておくと楽です。

すぐに見たい所だけ表示する

目次や見出しと検索を組み合わせて、章単位での閲覧をルーチン化すると効率が上がります。
特に fzfgrep を連携させる方法は、TOCと似た役割をCLIで果たせます。


こうした「最後の仕上げ」を加えるだけで、2000行を超えるMarkdownも 迷わずナビゲートできるドキュメント へと変わります。

まとめ

2000行を超えるMarkdownファイルでも、工夫次第でストレスなく扱えます。
ポイントは 「読む・探す・書く」それぞれに最適なツールを割り当てること です。

  • 読むglowmdcat で軽快にプレビュー、grip でブラウザ表示。
  • 探すrggrep でキーワード検索、fzf と組み合わせて見出しジャンプ。
  • 書くcsplitawk で章ごとに分割し、安全に再結合。

さらに、TOCの自動生成や less の表示オプションを組み合わせることで、巨大なファイルでも「迷わない・止まらない・壊さない」運用が可能になります。

エディタ単体で頑張るのではなく、CLIと役割を分担するハイブリッド運用を意識すれば、Markdownはもっと大規模で実用的なドキュメント形式として活かせます。

参照リンク

スポンサーリンク
Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする