皆さん、こんにちは。エンジニアのいもす (@imos) です。
文書はMarkdownで管理はしたいけど、Markdownは他の人に読んでもらうにはイマイチ使いにくい。そう思ったことはありませんか?
昨今LLMやコーディングエージェントが大きく進化し文書を気軽に書けるようになり、Google DocsやWordで文章を書くよりもMarkdownで書いた方が都合が良いことが増えつつあります。一方でMarkdownは決まったレンダリングツールがなく、そのまま顧客やユーザに提供するわけにはいきません。
そこで今回、Markdown から日本語の PDF 文書を生成する CLI ツール「pfpdf」をオープンソースとして公開しました。
文書の中身はMarkdownとGitで管理し、配布用のPDFはコマンド一つで作り直すというワークフローを実現することができます。
pfpdfの使い方
使い方は簡単で以下のようなMarkdownファイルまたは複数のMarkdownファイルを入れたディレクトリを用意します。
---
title: Markdown でつくる技術レポート
author: いもす
template: pfn
---
# 概要
これは **pfpdf** で PDF に変換するサンプルです。
| 項目 | この文書で試すこと |
| --- | --- |
| 日本語 | 見出しと本文の表示 |
| 数式 | 数式の組版 |
| コード | Python の構文ハイライト |
## 数式
値 $x_1, x_2, \ldots, x_n$ の平均値は、次の式で表せます。
$$
\bar{x} = \frac{1}{n}\sum_{i=1}^{n} x_i
$$
## コード
```python
def mean(values):
return sum(values) / len(values)
```そしてnpxが動作する環境で以下のように--inputに作成したMarkdownのファイルまたはディレクトリを指定するだけです。
npx @pfnet-research/pfpdf@latest --input report.md --output report.pdf出力した結果は以下のようになります
![]() | ![]() | ![]() |
pfpdfの機能
pfpdfは、Markdownに含まれる GitHub Flavored Markdown(表、リスト、リンクなど)に対応し、日本語の強調表現、数式、コードハイライト、改ページ(アンダースコア3個以上で改ページ扱いとなる)にも対応しています。BibTeX形式の参考文献ファイルを使い、引用と参考文献一覧を作ることもできます。
また、様々な用途に使いやすいように7種類のテンプレートを同梱しています。コーディングエージェントに対して、これらを参考にしながら要望を出すことで、気軽に新たなテンプレートも作ることができると思います。
pfpdfの仕組み
pfpdfはnpxで動きますが、JavaScriptだけで動作しているわけではありません。内部ではMarkdownをHTMLに変換し、Vivliostyle CLI とChromiumを使ってPDFに組版しています。Chromiumは必要ですが、初回実行時にレンダリング用のブラウザが自動取得され、以後はキャッシュされたものが利用されます。初回のダウンロードには数百MBの通信が発生する場合があります。
もう一つ気を使ったのがフォントです。PDFでは環境によって日本語フォントの有無や字形が変わると、文書の見た目や改ページが変わりやすくなります。pfpdfでは、再配布可能なオープンなライセンスのフォントを同梱し、標準設定ではOSに入っているフォントに依存しないようにしています。数式やコードハイライトに使うアセットも同梱しているため、組み込み機能だけで完結する文書なら、必要なものを取得した後はオフラインで変換できます。
つまり「どんな環境でも何も用意せずに動く」というわけではありませんが、ブラウザ管理やフォントの準備をツール側でできるだけ引き受けることで、原稿のリポジトリに大量の組版用ファイルを置かずに済むようにしています。
おわりに
pfpdfは、特別な環境構築なしに始められ、Markdownを最小限の設定できれいなPDFに変換できるようにすることで、コーディングエージェント時代の文書作成とGitなどを使った管理をサポートします。
使い方は日本語チュートリアルにまとめています。手元にあるMarkdownファイルを、ぜひ一度pfpdfでPDFにしてみてください。





