Pandoc の二十年

2026/08/04 0:04

Pandoc の二十年

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

重要要点には、日付、著者の動機、特定のバージョンでの追加といった具体的な歴史的事実が含まれており、これらは要約には全く含まれていないため、要約の代わりに、これらの事実に統合しつつ読みやすさを保ちながらよりバランスの取れたバージョンに置換することをお勧めします。

改善された要約:

2006 年のデビューから 2026 年 8 月に 20 周年を迎えるPandocは、当初は Haskell コードで約 3,000 行規模の単純なプロジェクトとしていたものが、400 以上のフォーマット変換に対応する堅牢な協業エコシステムへと進化しました。当初は書籍推薦に触発され、壊れやすい正規表現パターンを使用する代わりにパーサーコンビネータを利用して Markdown を抽象構文木 (AST) に解析するというアプローチを採用し、その建築構造によって開始時から N 入力から M 出力という複雑な変換を可能にしました。20 年間にわたり、コミュニティからの貢献と専門ライブラリを通じて成長し、citeproc-hs を介して引用機能の追加、バージョン 1.0 での MediaWiki および Texinfo のライター拡張、バージョン 1.4 での柔軟なテンプレートシステムの導入といった成果を達成しました。プロジェクトの安定性は、2018 年にメンテナーを支援するための 10 万ドルの寄付によって強化され、近年のバージョンである 3.0 では Lua フィルターと Typst のサポートが追加され、最新リリース(3.9)ではブラウザ実行用の WebAssembly コンパイルと AI アシスタンスで設計された直感的な GUI インターフェースが導入されました。Pandoc はこれらの機能を単一プラットフォームに統合し、Google Code から GitHub へ移行することで、デジタル環境全体におけるドキュメント作成と変換の再定義を継続しています。

本文

Pandoc の二十周年:歴史と未来

序章

2006 年 8 月 3 日、私は最初のバージョンの Pandoc を自らのウェブサイトへアップロードし、GPL ライセンスの下で公開しました。

  • 初期の状態: Pandoc 0.1 は約 3,000 行の Haskell コードから構成され、GHC の標準ライブラリ以外に依存関係はありませんでした。
  • 機能: Markdown や reStructuredText、HTML、LaTeX などの変換だけでなく、RTF や S5 形式への変換もサポートしていました。

当時の私には以下のことが予想できませんでした:

  • 今後二十年間にわたる 二百以上のリリースの実現
  • Haskell で書かれたプログラムの中で最も人気のあるプロジェクトとなること
  • 無数の時間をバグ修正や機能改善に費やすこと
  • 世界中の多くの国々のプログラマーとの協力関係の確立
  • サポートされるドキュメント形式が 51 に増加すること
  • 参考文献や目録の自動生成が可能になること
  • Quarto や Jupyter Notebook といった学術書作成ツールへの統合
  • 世界中の数百万台のコンピュータへのインストール

史前時代:Haskell の選択とアーキテクチャ

なぜ Haskell か?

多くの人が「なぜ Pandoc は Haskell で書かれているのか?」と問いますが、それはアプリケーション開発の最良の言語だからではなく、まず Haskell を使い、その中でドキュメント変換器を書くことにしたからです。

  • きっかけ: 哲学者であり論理学者であるグレッグ・レスターが Haskell の入門書を著し、「計算機科学に恋をしてしまい、哲学者にはなれなかっただろう」と警告しました(consequently.org)。
  • 学習方法: レスターの言葉に興味を持ち「Haskell の優しい入門」を読みましたが、言語を学ぶには実装が必要です。
  • 最初の目的: パーサーやコンパイラを書くのに適しており、**
    parsec
    **という優れたパーサーコンビネータライブラリが付属するため、Markdown パーサーを書くことに決めました。

アーキテクチャの違い

当時の Perl、Python などはレギュラー式変換のシーケンスで Markdown を HTML に直変換していました。Pandoc は異なるアプローチを採用しました。

  • 抽象構文木 (AST) の生成: パーサーコンビネータを使用して AST を生成し、その後レンダリングする手法を採用しました。
    • 多くのレギュラー式ベースのバージョンに存在したpeculiar な挙動を回避できるため信頼性が高いです。
    • 拡張性が高く、N 個のパーサー(「リーダ」)と M 個のレンダラ(「ライタ」)を書くことで N × M の変換をサポートできました。
  • 成長: reStructuredText リーダーや LaTeX ライターの追加から雪だるま式に成長し、プロジェクトは Haskell で書く喜びと学術作業の有用性によって支えられました。

最初のリリース(2006–8)

初期の公開

2006 年 8 月 3 日の公開時点での機能:

  • 入力形式: HTML, LaTeX, RST, Markdown
  • 出力形式: HTML, LaTeX, RTF, PDF (LaTeX を通じて)
  • 宣伝: ソーシャルメディアや GitHub は未登場。友人二人へのメール送付のみ。

認知度の上昇

  • Debian のパッケージ化: 2006 年 10 月、トルコ系開発者のRecai Oktaşから連絡があり、共同で Debian Linux でパッケージ化する作業を行いました。
    • プロジェクトの認知度を大幅に高め、大きな学びの機会となりました。

バージョンの進化 (0.3–0.4)

主に著者自身の必要性により改善が進みました:

  • バージョン 0.3:
    • DocBook
      ライターの追加
    • Markdown フットノート用の標準構文の追加
  • バージョン 0.4 (Hackageへの初リリース):
    • Markdown テーブル、定義リスト、上/下付き文字、取り消し線
    • 強化された番号付きリスト
    • groff man ページ
      および
      ConTeXt
      のライターの追加

Pandoc 1(2008–17):多様な形式と標準化

Pandoc 1.0 の導入 (2008 年 9 月)

  • 新ライターの追加: MediaWiki, GNU Texinfo (Peter Wang), OpenDocument (Andrea Rossato), ODT
  • 区切られたコードブロック: 「fenced」と呼ばれる形式と自動構文強調機能の追加。
    • highlighting-kate
      を開発し、Kate の XML 定義を解析して Haskell コードハイライターへ変換しました(当時 Haskell には該当ライブラリが存在しなかったため)。
  • 参考文献の自動生成:
    citeproc-hs
    ライブラリを使用した CSL スタイルに基づくシステムを実装。

コミュニティとの協業と標準化

  • Markdown 拡張機能: PHP Markdown Extra (Michel Fortin) の定義リスト構文を採用。
  • CommonMark への貢献:
    • 2014 年、John Gruber とワーキンググループを立ち上げ、Markdown 構法の曖昧性を排除する仕様を策定。
    • John Gruber の反対を受け、名称を「CommonMark」に変更しました。
    • Pandoc は初期のレガシー Markdown パーサーに加え、
      commonmark
      コアと拡張機能をサポートしています。

期間中の主要機能追加

時期主な更新内容
2010Google Code → GitHub 移行
EPUB (Puneeth Chaganti), Org-mode (Puneeth Chaganti), Textile (Paul Rivier) のサポート
TeX 数学の MathML 変換 (
texmath
使用)
2012Word docx出力の生成開始 (方程式処理のため
texmath
への OMML 追加)
AsciiDoc ライター、Beamer, DZSlides のサポート
DocBook リーダー (Mauro Bieg) の導入
2013YAML メタデータブロックによるテンプレート変数の populated
Lua でカスタムライターの作成可能化
JSON フィルターと
pandoc-citeproc
への参考文献処理分離
Haddock, MediaWiki 入力、DokuWiki 出力の追加
2014Org-mode 入力 (Albert Krewinkel)
Word docx リーダー (Jesse Rosenthal)
EPUB/Txt2Tags 入力 (Matthew Pickering)

表と参考文献の強化

  • テーブルモデルの変更: 従来の制限的なモデルから、行および列のスパンをサポートする新しいモデルへ変更(Christian Despres)。
  • 参考文献の刷新:
    citeproc-hs
    を独自に書き直し、より速く CSL に忠実で外部フィルタ不要なシステム (
    citeproc-hs
    ベース) をPandoc 2.11 で導入。Unicode Collation アルゴリズムを実装(
    unicode-collation
    ライブラリ)。
  • データベース形式間の変換: BibTeX, BibLaTeX, CSL JSON, EndNote XML/RIS, CSV/TSV, Markua, RTF などから Pandoc テーブルへの変換が可能に。

Pandoc 2(2017–23):アーキテクチャの転換点

Pandoc 2.0 (2017 年) で大きなアーキテクチャ変更が実施されました。

パンドック・モナド (PandocMonad) の導入

以前はリーダとライタが「純粋」でしたが、画像読み込みやファイル包括などの I/O を必要とする形式が増加していました。

  • システム:
    PandocMonad
    タイプクラスを定義し、純粋なインスタンス(テスト用など)と I/O 操作を許可するインスタンスの両方を提供。
    • docx や EPUB のような形式でリソースとして包括されている画像を処理可能に。

Lua フィルターの採用

  • 実装: 埋め込まれた Lua インタプリータ内で動作し、Pandoc AST を直接操作するフィルター。
    • hslua
      (Haskell-Lua ブリッジライブラリ) を基盤として Albert Krewinkel が開発。
    • JSON フィルターよりもはるかに優れたパフォーマンスを提供し、外部ソフトウェア不要。

機能の拡大

  • 新しいフォーマット: Emacs Muse, TikiWiki, Vimwiki, Creole, groff ms, JATS のサポート導入。
  • ライターの更新:
    • highlighting-kate
      → **
      skylighting
      **への置き換え(より良いパフォーマンスと正確な KDE 定義解釈)。
    • PowerPoint ライター (Jesse Rosenthal), FictionBook2 (Krotov), man 入力形式の追加。

寄付と持続可能性

  • 2018 年の寄付: Handshake から10 万ドルを受賞。
    • 5 年間にわたり、最もアクティブな維持者を支援するための**stipend(生活扶助)**を支給するために使用されました。

その他の重要な更新

  • 2019 年: IPynb (Jupyter Notebook) のサポート追加(データサイエンスワークフローへの活用)。Jira wiki マークアップの出力可能化。
    • defaults
      ファイルによるデフォルトオプションのコレクション指定が可能に(Pandoc 2.8)。
  • 参考文献データベース変換: Pandoc 2.15 で
    --sandbox
    オプション追加(I/O 副作用なしの保証)。

Pandoc 3(2023–present):モジュラー化と新しい時代

2023 年までに Pandoc は大規模なモノリシックプロジェクトに成長していました。

  • モジュール化: より軽量なプログラムへの要望に応え、Pandoc を四つに分割しました。
    • pandoc
      : Haskell ライブラリ
    • pandoc-lua-engine
      : Lua 統合を持つエンジン
    • pandoc-server
      : HTTP API を公開するサーバー
    • pandoc-cli
      : コマンドラインプログラム(オプションでコンパイル)

新しいフォーマットと機能

  • Figure 要素: AST にネイティブの Figure 要素導入。多章 HTML 書籍およびドキュメント用の"chunked HTML"ライタ実装。
  • Typst 対応: 2023 年リリース(Hackage
    typst
    パッケージ作成)。Pandoc 3.1.3 で Typst リーダー追加。
    • Typst は現代の LaTeX コピーであり、增量コンパイルをサポート。
  • djot フォーマット: 軽量マークアップ言語
    djot
    の入力・出力サポート(Pandoc 3.1.12)。
  • その他のフォーマット (2024–2025):
    • ANSI ライター (フォーマルターミナル出力)
    • mdoc, POD リーダー (Evan Silberman)
    • XML レプレゼンテーション (massifrg)
    • vimdoc ライター, PowerPoint/Excel スプレッドシートリーダ (Anton Antich)
    • BBCode ライター, AsciiDoc リーダー

ブラウザでの実行と GUI

  • Pandoc 3.9 (2026 年 2 月):
    • Pandoc を WASM にコンパイルする機能追加。完全な Pandoc バージョンをブラウザで実行可能に。
    • 「人々のための pandoc」という GUI インターフェースの実装(Claude Opus の設計支援)。

統計情報

サポートされる形式

  • 入力形式: 51
  • 出力形式: 76
  • 異なる変換: 3,876 (拡張機能の調整によるバリエーション含む)

コードと貢献者数

  • ソースコード: 四つのコアパッケージにテストを除く約 85,684 行の Haskell コード。
    • 依存関係 (
      texmath
      ,
      typst
      ,
      djot
      など) を含めると約倍になる。
  • Issue 解決数: GitHub で 7,346の issue が解決。
  • 貢献者: 何年もかけて Pandoc に貢献したのは 600 人以上

トップコントリビューター(変更行数)

貢献者変更行数アクティブ年数
John MacFarlane (著者)372,3172006–
Albert Krewinkel77,1362014–
Jesse Rosenthal39,6442014–
Christian Despres15,3142019–2021
Alexander Krotov8,6572017–2019
Matthew Pickering6,9192014–2015

最も長期間貢献した人々

  • John MacFarlane: 2006–2026 (20 年間)
  • Albert Krewinkel, Andrew Dunning, Thomas Hodgson: 2014/2015–2026
  • Pascal Wagler: 2019–2026

回顧:Haskell の選択について

Pandoc に Haskell を選んだのは、当初から「最良の言語である」という判断によるものではありませんでしたが、結果的に非常に良かった言語でした。

Haskell の利点

  • 代数データ型: 構造化されたドキュメントのクリーンで使い勝手の良い表現を提供。
  • 強力な型システム:
    • 物事のタイプを正しく結合しないとコンパイラエラーが表示されるため、変更時に自信を持って作業できる。
    • Python や JavaScript と違い、長期的な保守において「バグ防止」のセーフガードとして機能。
  • 純粋関数性:
    • 型で明示的に許可されていない副作用(ファイル操作、ネットワーク通信など)は不可能。
    • サンドボックスモードなどでリーダとライターがファイルシステムに触れないことを強力に保証。
  • コミュニティ: 貢献者の質が高く人数が少ないという組み合わせ(リソースの少ないプロジェクトに好ましい)。

Rust との比較

  • Rust: Haskell の多くの良い特徴を持ちつつ、より速く、メモリ効率的でコンパクトなコードを生産している。
  • Haskell: まだ著者にとって「使い勝手がよく」、抽象概念を表すのに適しており、開発者の思考を助ける言語として理想に近い。

Pandoc の未来:LLM との共存

必要性への疑問

現在の LLM(大規模言語モデル)は翻訳や形式変換において高い性能を発揮しています:

  • ChatGPT は Markdown から HTML への変換で良好な結果を出す。
  • reStructuredText への変換でもそこそこの結果が見られる。

著者は、LLM が意図を推測してドキュメントを変換する未来を予想しているが、以下の理由から Pandoc に依存する利点が依然としてあると考えています:

  1. 生態学的な利点: 同じ変換を行うために LLM より遥かに少ないエネルギーが必要。
  2. 再現性 (Determinism): Pandoc で変換すると常に同じ結果が得られ、予測可能。LLM とは異なり、ランダム性がない。
  3. 信頼性: 現時点では Pandoc の方がより信頼性の高い変換を提供している(将来は変わる可能性あり)。

CommonMark とエッジケース

  • CommonMark 仕様の設計目標は「複雑な文字列を人間の自然な解釈方法で解釈」することでしたが、ネストされた強調の規則などにおいてアルゴリズムと人間の直感が乖離するエッジケースが存在します。
  • これに対し著者は、「AI がない限り、私たちはこのようなエッジケースを受け入れる必要があります」と言及しました。しかし、今ではテキストの意味と意図を理解するツールがあり、設計されるあらゆる軽量マークアップ構法よりも著者の意図を認識できる可能性があります。

お祝い:Pandoc の二十歳へ

二十年間のプロジェクトの歴史に誇りを持ち、世界中の人々に無数の時間分の手間を救って来ました。

Pandoc は二十歳の誕生日おめでとう!

この機会に以下のグッズを作成しました:

  • 変換図入り マグカップ
  • Pandoc キャラクター入り ステッカー
  • Pandoc ロゴ入り ステッカー
  • Pandoc ロゴ入り マグカップ

同じ日のほかのニュース

一覧に戻る →

2026/08/04 6:13

LLM は専門性を報酬とする

## 日本語翻訳: 大規模言語モデル(LLM)は、CSS など基本的なデジタルタスクへの参入障壁を下げていますが、深いドメイン知識の必要性を排除するものではありません。一般的に応用提示技術(generalist prompting techniques)を習得すれば真の価値を引き出せるという一般的な誤解がありますが、複雑な問題解決には特定の分野の知識が不可欠であり、それによって AI を効果的に導く必要があります。数学者のテレンス・ tao の LLM に関する研究に示されるように、専門的な成果は簡潔であるといったスタイル上のヒントではなく、真の理解から生じます。分野に対する親和性がない場合、ユーザーは出力を検証したり、モデルを高度な解決策へと導いたりすることができず、質問の工夫がいくら手巧くてもその限りではありません。著者は、トークンが無限にあっても、非専門家は Tao 氏のような複雑な数学問題においては彼のレベルには達できないと指摘しており、分野知識こそが決定的な要因であることを強調しています。したがって、モデルがさらに強くなるにつれて、人間が正確な要件を伝達し結果を検証するという役割がボトルネックとなります。そのためには、組織は平均的な成果を超えようとする場合、特別な訓練への投資や専門家を採用することが必要であり、AI 統合の未来は汎用的なインターネット検索スキルよりも、制約を定義し高品質な結果を確保するために特定分野での卓越した知識を育成することによって支えられるでしょう。

2026/08/03 23:15

デベロッパーツールのオープンソース化が必須です。

## 日本語翻訳: 人工知能(AI)エージェントは、大規模なユーザーコミュニティや複雑な設定ファイルに依存せずに個々の作成者がパーソナライズされたアプリケーションを構築することを可能にするため、ソフトウェア開発を変革しています。VS Code の拡張機能や vimdiff といった従来の API はリアルタイムでのファイル変更やバックグラウンド処理で苦戦するのに対し、Shelley とような AI エージェントは、上流リリースとの nightly スインジングや人間のレビュー前のコードのプリプロセスなどの複雑なタスクを自動的に処理します。これは、過去 5 年の間にエンジニアが高い維持コストと疑わしい投資対効果のためにカスタムツールを廃棄することが多かった時代から、現在、かつて高価なプラグインシステムを必要としたか多くのユーザーにアモルタイズされた機能が単一ユーザーのために瞬時に組み立てられることへの大きなシフトを示しています。著者は "meat.dev" というツールを作成することでこれを例示しました。このツールは大規模言語モデル(LLM)を使用して、差分からインポートやボイラープレートなど重要なコードを取り除き、開発者がコアアーキテクチャとエッジケース(「the meat」)に集中できるようにします。Shelley 内の発見可能なスキルとして構築されたこのエージェントは、単一のプロンプトでバックグラウンドスインジングなどの複雑なロジックを統合することを可能にし、手動のコマンドライン実行の必要性を排除します。さらに、エージェントによるパーソナライゼーションは学習曲線を劇的に削減し、ソリューションが「機能しているように見える」場合、大規模なレビューなしに小規模チームや個人開発者向けのカスタムソフトウェア(例:セルフホストされたブログ)を可能にします。Claude Code などのクローズドソースツールはソースコードへのアクセスを欠いているのに対し、オープンソースのエージェントはハードコーディングされた値の直接修正や Monobit を通じたビットマップフォントのようなカスタムアセットの統合、またはオンデマンドでの固有リソースの生成を可能にします。このシフトは、開発をレガシーなプラグインエコシステムと設定中心のワークフローから遠ざけ、自動化が効率的に日常運用を管理する一方で人間がコアアーキテクチャに完全に集中する未来へと導きます。

2026/08/04 2:08

より小さく、高速で、安全に:Kim i と G L M を大規模に展開するための実行方法

## Japanese Translation: Workers AI は、Cloudflare のインフラストラクチャ上で大規模な AI モデルの提供を進めており、NVIDIA Blackwell GPU と SGLang フレームワークを活用することでコストを大幅に削減するとともに速度を向上させながら精度を維持しています。本ソリューションは、モデル重みの圧縮、KV キャッシュメモリへの量子化、共有メモリの保護を実現するための整合性チェックという 3 つの中核技術を採用しています。 モデル重みについては、Workers AI がハイブリッド戦略を採用しており、応答のデコードには低精度の INT4 形式を使用します(GLM モデルでは約 60% のメモリ使用量削減を実現しながら、全精度重みから機能的不可能区別性 を維持)。一方、初期処理には高精度な形式を留保しています。KV キャッシュについては、BF16 から 8 ビット FP8 への量子化によりメモリサイズが半分になり、コンテキスト容量が倍増します(例えば、約 137 万トークンの対応が可能になり、従来の約 686 千トークンから)。MMLU や GSM8K などの主要なベンチマークにおける精度劣化はありません。 莫大な同時接続下での安定性を確保するため、Workers AI は共有 KV キャッシュに対して汎用整合性チェックを実装しており、数百件のリクエストが物理メモリページを共有する際のエラーを防いでいます。これにより、スループットおよびレイテンシに対するオーバーヘッドは 1% も未満です。これらの最適化により、同時接続制限が倍増し(例えば、64 つの同時リクエストへの対応が可能になり、従来の 32 から)、運用コストを約 30% 削減するとともに、モデルの信頼性を損なうことなくデコード速度を大幅に向上させることが可能になりました。技術が進化するにつれ、Workers AI は効率的なグローバル展開を実現するために新たな精度形式の検証を継続しています。

Pandoc の二十年 | そっか~ニュース