Twenty Years of Pandoc: A History of the Haskell Document Converter

Introduction – why Pandoc matters

Pandocの20周年は、小さな自作のMarkdownパーサーがどのようにして最も人気のあるHaskellプログラムに進化したかを示しています。現在、51の入力形式と76の出力形式をサポートし、何百万台ものマシンにインストールされています。その長寿命は、クリーンなASTベースのアーキテクチャ、強い型付け、コミュニティ主導の開発モデルの力を示しています。


Pre‑history: Haskell first, document conversion second

John MacFarlaneはドキュメントコンバータを書くことを決める前にHaskellを選びました。A Gentle Introduction to Haskellを読み、parsecパーサーコンビネータライブラリで実験した後、彼は正規表現ベースのHTML出力ではなく実際の抽象構文木(AST)を生成するMarkdownパーサーを構築しました。この設計により、N × M変換モデルが可能になりました:新しいリーダー(パーサー)とライター(レンダラー)それぞれが可能な形式ペアの数を掛け合わせます。

"I decided to use Haskell, and then decided to write a document converter in it." – John MacFarlane

早期のコードベース(約3k行)はMarkdown、reStructuredText、HTML、LaTeX、RTF、S5をサポートし、GHCの標準ライブラリのみが必要でした。


First releases (2006‑2008): community‑driven visibility

  • 0.1 (Aug 2006) – ソースは作者のウェブサイトに掲載されました;友人への2通のメール以外に広告はありませんでした。* Debian packaging (Oct 2006) – Recai Oktaşとの協力により露出が増加しました。* 0.3 (2007) – DocBookライターと脚注構文が追加されました。* 0.4 (2007) – テーブル、定義リスト、上付き文字、そして最初のHackageリリースが導入され、cabal-installによる依存関係管理が可能になりました。

これらのリリースはほぼ作者の個人的なワークフローに従って行われましたが、各追加が新しいユースケースを開き、より多くのユーザーを引き付けました。


Pandoc 1.x (2008‑2017): expanding the format ecosystem

  • 1.0 (Sep 2008) – MediaWiki、GNU Texinfo、OpenDocument、ODT、フェンスドコードブロック、およびシンタックスハイライトが追加されました。ODTとハイライトをサポートするために、MacFarlaneはzip-archivehighlighting-kateライブラリを作成しました。* 1.4 (Jan 2010) – カスタマイズ可能な出力のための柔軟なテンプレートシステムが導入されました。* GitHub migration (2010) – Google Codeから移行し、可視性が劇的に向上しました。* 1.9 (2012) – Word .docx出力、AsciiDocライター、およびBeamer/DZSlidesサポートが有効になりました。* 2013‑2014 – Markdown拡張、YAMLメタデータブロック、Luaカスタムライター、JSONフィルター、および引用用の外部pandoc-citeprocフィルターが追加されました。* CommonMark integration (2015‑2020)libcmarkを介したCommonMarkパーサーが追加され、その後ネイティブなHaskellパッケージが追加されましたが、Pandocの拡張Markdown方言は保持されました。

この時期、Albert Krewinkel、Jesse Rosenthal、Matthew Pickeringなどの貢献者がOrg‑mode、docxリーダー、EPUBなどの主要なフォーマットサポートを追加しました。


Pandoc 2.x (2017‑2023): architectural overhaul and performance boosts

  • 2.0 (2017)PandocMonad型クラスが導入され、純粋およびI/O対応のリーダー/ライターが可能になり、高速なAST操作のためのLuaフィルターが追加されました。* Luaエンジンhsluaに基づいて構築され、ユーザーが書いたLuaフィルターとカスタムライターを可能にしました。* Skylightinghighlighting-kateを置き換え、より速く正確なシンタックスハイライトライブラリとなりました。* 引用のオーバーホール (2.11) – 外部のpandoc-citeprocフィルターがネイティブなHaskell CSLライブラリと純粋HaskellのUnicode照合実装に置き換えられました。* サンドボックスモード (2.15) – 副作用のない実行を保証し、以前のPandocMonad設計を活用しました。* デフォルトファイル (2.8) – 再利用可能なオプションコレクションが可能になりました。* ウェブサーバー (2.19.1) – PandocがHTTP APIとして公開されました。*

Handshakeからの10万ドルの寄付(2018)により、コアメンテナーへの奨学金が提供され、急速な開発ペースが維持されました。


Pandoc 3.x (2023‑present): modularization and new front‑ends

  • 3.0 (2023) – プロジェクトは4つのパッケージに分割されました:pandoc(コアライブラリ)、pandoc-lua-enginepandoc-server、およびpandoc-cli。CLIは now Luaまたはサーバーコンポーネントなしでビルドでき、軽量使用のためのバイナリサイズが削減されました。* Figure element & chunked HTML writer – マルチチャプターHTMLブックのネイティブサポートが追加されました。* Typst integration (3.1.3)typst Hackageパッケージを介してフル機能のTypstリーダーが作成されました。* Djot support (3.1.12) – 作者によって設計されたMarkdownの後継であるDjotマークアップ言語の入力および出力が両方追加されました。* WASMコンパイル (3.9, Feb 2026) – ブラウザでの完全なPandoc実行が可能になり、「pandoc for the people」と呼ばれるGUIフロントエンドが提供されました。*

2024‑2025のコミュニティ貢献により、ANSI、mdoc、POD、XML AST、vimdoc、PowerPoint、Excel、BBCode、およびAsciiDocのリーダー/ライターが追加され、コアアーキテクチャの継続的な拡張性が示されました。


Statistics that illustrate impact

  • サポートされているフォーマット – 51入力 × 76出力 = 3 876の異なる変換(拡張バリアントを除く)。
  • コードサイズ – コアパッケージには約85k行のHaskellがあり、依存パッケージを含めると合計はほぼ2倍になります。* GitHubアクティビティ – 7 346件のクローズドイシュー;600人以上の貢献者。* トップ貢献者 – John MacFarlane(372 317行変更)、Albert Krewinkel(77 136)、Jesse Rosenthal(39 664)など。* インストールフットプリント – Pandocは何百万台ものコンピュータにインストールされ、Quarto、Jupyter Notebook、そして多くのCIパイプラインに統合されています。

Why Haskell was a decisive factor

著者は、Haskellの代数的データ型、強い静的型付け、および純粋性が大規模なリファクタリングを安全かつ表現豊かにすると主張しています。純粋な関数はサンドボックスモードが「I/Oなし」の semantics を強制することを保証し、型システムはコンパイル時に不一致を検出し、回帰リスクを減らします。

"When working with languages without a strong type system, e.g. Python and JavaScript, the lack of these safeguards always makes me afraid to make big changes."

Rustのパフォーマンス上の利点を認めつつも、著者はHaskellが複雑なドキュメント変換を表現する上で依然としてよりエルゴノミックであると維持しています。


Community reflections (selected HN comments)

  • 長寿命と効率 – コメンテーターは、LLMが決定的な信頼性に近づいても、Pandocはバッチ変換においてエネルギー効率が桁違いに優れていると指摘しました。* 貢献者体験 – ユーザーは歓迎的なメンテナーを称賛し、バグ報告やPRに対する迅速かつ親切な対応を挙げました。Haskellに不慣れな開発者からのフィードバックも含まれます。* 実践的なワークフロー – いくつかのユーザーは、メールからMarkdownへのパイプライン、静的サイト生成、およびバイナリドキュメントのGit diff正規化にPandocを使用するスニペットを共有しました。* 将来の展望 – 一部はAI駆動のフォーマット翻訳が最終的にルールベースのコンバータを置き換える可能性を懸念していますが、ほとんどの人はPandocの決定的な出力と低リソース使用が今日でも関連性を保つと同意しています。

Looking ahead: will Pandoc survive the AI era?

著者は、大規模言語モデルがマークアップ言語間の翻訳を行えるようになったものの、Pandocはまだ3つの具体的な利点を提供すると推測しています:

  1. 生態学的フットプリント – LLMを実行するよりもはるかに低いエネルギー消費。
  2. 決定的な結果 – 同じ入力は常に同じ出力を生み出し、再現可能な科学的ワークフローに不可欠です。* 成熟度と信頼性 – 数十年にわたるバグ修正とコミュニティテストにより安定したツールが生まれ、AIモデルはまだそれに匹敵していません。

それにもかかわらず、著者は将来のAIが最終的にルールベースの変換を上回る可能性があることを認めています。特に曖昧なマークアップケースではそうです。


Conclusion

Pandocの20年間の旅—3k行の趣味プロジェクトからモジュール化され、WASM対応のエコシステムへ—は、よく設計されたAST、強い型付け、そしてオープンな貢献者文化が何十年にもわたって複雑なソフトウェアツールを維持できることを示しています。その継続的な関連性は、効率性、決定的な出力、そしてフォーマット、フィルター、統合を追加し続ける活気あるコミュニティに依存しています。

Sources