mdBook - Markdownで本を作るコマンドラインツール
(rust-lang.github.io)- ドキュメントやチュートリアルを本の形で配布したいとき、mdBook 0.5.3 は Markdown ベースの執筆と、ナビゲーションしやすい出力をあわせて提供する
- 軽量な Markdown 構文 と統合検索により、執筆者は書式よりもコンテンツに集中できる
- コードブロックの シンタックスハイライト とテーマファイルにより、技術文書に必要な読みやすさや出力形式の調整が可能
- プリプロセッサ とバックエンドは、カスタム構文、コンテンツ修正、複数の出力形式のレンダリングのための拡張ポイントを提供する
- Rust プロジェクトや The Rust Programming Language の書籍で使われているツールであり、Rust ドキュメントのエコシステムとのつながりが大きい
Markdown の書籍制作に必要な基本機能
- mdBook は Markdown で本を作るためのコマンドラインツール
- 製品ドキュメント、API ドキュメント、チュートリアル、講義資料のような、整然としていてナビゲーションしやすいコンテンツ制作に適している
- 執筆体験と読書体験を支える機能をあわせて提供する
- 軽量な Markdown 構文でコンテンツ作成に集中できる
- 書籍内での統合 検索 をサポート
- 複数言語のコードブロックにカラーの シンタックスハイライト を適用
- テーマ ファイルで出力形式をカスタマイズ可能
拡張性と Rust エコシステムとの接続
- プリプロセッサ はカスタム構文の拡張やコンテンツの修正を担える
- バックエンド を通じて複数の出力形式にレンダリングできる
- mdBook は速度、安全性、シンプルさのために Rust で書かれている
- Rust コードサンプル の自動テストをサポート
実際の利用事例と貢献方法
- mdBook のドキュメント自体が、mdBook で生成された成果物の実例
- Rust プログラミング言語プロジェクトが mdBook を使用しており、The Rust Programming Language の書籍も利用事例のひとつ
- mdBook は 無料のオープンソース プロジェクト
- ソースコードは GitHub で確認できる
- Issue や機能要望は GitHub issue tracker に投稿できる
- 貢献するには CONTRIBUTING ガイドを読み、pull request を開ける
- mdBook のソースとドキュメントは Mozilla Public License v2.0 で配布される
1件のコメント
Hacker Newsのコメント
このプラットフォームは、ライブラリをバンドルしたりベンダリングしたりせず、CDNでホスティングされたライブラリを使っていると記憶している。そのためユーザーは、CDN障害だけでなく、そのサーバーが収集するデータにもさらされる
さらに残念なのは、フロントエンドで Highlight.js と MathJax を使う方式が非常に無駄なこと。すべてのクライアントが構文と LaTeX を直接パース・レンダリングしなければならず、同じ結果を得るために訪問のたびに同じ作業を繰り返すことになる。構文ハイライトはビルド時に処理できるし、JavaScript が必要になる理由もほとんどない
MathJax サポートがオプションなので、そのような選択になったのだと思う: https://rust-lang.github.io/mdBook/format/mathjax.html
ただし MathJax の JS が再び CDN の追加ファイルを読み込む可能性が高く、なぜ MathJax ファイル一式を生成された HTML の横に置かないのか理解しづらい
このスレッドで挙がっていたドキュメント・静的サイトツールとしては、Jekyll, Hugo Book, MdBook, MkDocs, MkDocs Material, GitBook, Antora, Docusaurus, Nextra, Astro, Starlight, Clowncar, Keenwrite, Quarto, Honkit, JupyterBook あたり
Jekyll, Hugo Book, MdBook, MkDocs, MkDocs Material, GitBook, Antora, Docusaurus, Nextra, Astro, Starlight, Clowncar, Keenwrite, Quarto, Honkit, JupyterBook
mdBook を Nim に移植したものだが、Nim の JavaScript バックエンドを使って インタラクティブコンテンツを生成する機能も拡張されている。自分ではまだ使っていないが、必要なときにインタラクティブ要素を一か所で作れるという発想は気に入っている: https://pietroppeter.github.io/nimib/interactivity.html
MdBook、Jekyll、MkDocsを使ってみたが、MdBookは基本プロジェクトには洗練されている一方で、あまりにミニマルすぎると感じた。気に入ったMdBookサイトのソースを見ると、カスタムRustコードで拡張されている場合があった
おすすめとしては、MkDocsは合理的に柔軟な標準の選択肢、Jekyllはランディングページやブログのようにより多くの柔軟性が必要な場合、Antoraは複数のプロジェクトや複数バージョンのドキュメントを集約して最高のドキュメントサイトを作りたく、そのために多くの労力をかける意思があるときに向いている。AsciiDocにはドキュメント作成に役立つ機能が多い
HugoはJekyllのように柔軟に見えるが、思いどおりに合わせるまでにより多くの手間が必要で、テーマごとの動作の違いも大きすぎるように思う。使っていたテーマに必要な機能がなく、別のテーマに変えようとしたが移行は簡単ではなく、結局あきらめた。MdBookはかなり活発に見えるので、最終的には追いつきそうだ
JavaScriptベースのツールを使いたくなくて長く先延ばしにしていたが、使ってみると始めやすく非常に高速で、標準のサイトも美しく、カスタマイズもしやすい。MDXサポートも優れている
BookStackも試しているところだが、よりWikiに近いものの、技術に詳しくない人には良い。通常のMkDocsプロジェクトはVSCodeで編集してGitリポジトリに置くが、BookStackはすべてWebベースだ
以前は til.secretGeek.net の生成にGitBookを使っていたが、時がたつにつれて遅くなり、サイトのビルドに45分かかるようになったうえ、使っていた機能が廃止されたり「premium」になったりした。結局、エンシティフィケーション が始まったということだ
あまりに良さそうな無料ツールを使っているなら、数年待てば壊れる可能性が高い。結局、.NETでごく最小限の静的サイトジェネレーターを自作して、再び数秒でビルドできるようにした。他人に使えと宣伝はしていないが、人気が出たら自分も結局同じように壊してしまいそうだからだ
https://www.collinsdictionary.com/jp/dictionary/english/spru...
複数のプロジェクトで mdBook を使ってきたが、最近は material for mkdocs のほうが標準機能がはるかに多く、使いやすいと感じる
たとえば右側のページ目次が気に入っているが、mdBook にはこの機能がはっきりと欠けている。mdBook では SUMMARY を非常に細かく構成し、もともと1ページに置けた内容を複数ファイルに分割するやり方が標準のように見える
数日前、小さなプロジェクトのドキュメント化のために mdBook を使い始めたが、必要なものに正確に合った 小さな静的ページジェネレーター だ
HUGOも使ってみたが、mdBookに比べると大きすぎて重厚すぎるように感じる。今はObsidian/VIMでドキュメントを編集し、Giteaにプッシュすると1分以内に公開ドキュメントが生成される
適切な shortcode によって図や数式などの自動番号付けができる。mdBook でも自動番号付けができるのか気になる。右側の目次やタグ、ページを列に分ける機能もあり、KaTeXサポートも良い。mdBook は MathJax を使っているようで、デプロイは push や rsync だけで簡単だ
最近、コンテンツを
.mdから .mdx へ少しずつ移しながら見直し始めたのだが、かなり新鮮だった。Markdown でいちばんつらかったのは、使う方言ごとに限界が異なり、その限界を拡張するやり方もそれぞれバラバラなことだった標準的な GitBook Markdown 方言の 80〜90% にはとても満足しているが、ときどき複雑な表や、数行だけを強調しつつ構文ハイライトを維持するコードブロック、インタラクティブなスライダー、文書内に埋め込まれた計算機、特定のグラフやチャートが必要になる。大きなチームで MDX がどう機能するかは分からないが、個人作業には確実に改善に見える
.mdxを初めて知って [0] を見てみた。フロントエンドの標準化の流れを十分追えていなかったようだ方言がなくなって 1 つの汎用的なアプローチが生まれればいいのだが、ドキュメントには「MDX は React に縛られず、Preact、Vue、Emotion、Theme UI などでも使え、classic/automatic JSX ランタイムの両方をサポートする」とある。Svelte 実装 [1] もすでにあるので、今回はフロントエンドフレームワークに縛られた方言がさらに増えるパンドラの箱ではないのか、よく分からない。.mdx の内部でも分かれうるし、.md とも互換性がないかもしれない
[0] https://mdxjs.com/docs/what-is-mdx/
[1] https://mdsvex.com/docs
.mdxは https://astro.build/ ととても簡単に使える。Astro は JavaScript メタフレームワークでありつつ、クライアントに JS を送らない 静的サイト生成優先アプローチ を取っている使えるテーマもあるが、現代の Web 開発者なら自作するのもかなり簡単だろう
Markdown ベースの本を作るために、無料のオープンソースなクロスプラットフォームツール KeenWrite を作った: https://github.com/DaveJarvis/keenwrite
KeenWrite は文書組版のために ConTeXt を呼び出し、プレビューモードでは数式組版に KeenType フォークを使う。コマンドラインから PDF を生成できる。今書いている本では、外部ファイルで定義した複数の変数を本文から参照し、メタデータとして PDF の属性を渡し、
chapters引数で一部の章だけをビルドできる。themeディレクトリには色、フォント、レイアウト、注釈などの組版指示が入っているサンプル出力: https://github.com/DaveJarvis/keenwrite-themes/tree/main/exa...
なぜ Markdown やそれに近い形式が、本や文書、ほとんどすべての文章の基本形式ではないのか気になる。数年前に Typora へ移ってから、自分で書く文章には Word/Writer がほとんど不要になり、他人が送ってきた文書を開くときだけ使うようになった
読んでいる本の 90% も、Markdown 形式であってはいけない明確な理由があるようには見えない。紙の本をきれいに印刷するには組版が必要なのは理解できるが、コンピューターやスマートフォンで読む、あるいは MS/LibreOffice からそのまま印刷する大半のテキストは、どうせそうした組版作業がきちんと行われていない
AsciiDoc のようなより良い代替もあるが、文書化に特化していて、Markdown に近い勢いはない。Markdown が比較的遅れて登場した形式であることを考えると、なぜ本が Markdown であるべきなのか、というほうがより妥当な問いだ。バイナリや XML ベースの形式に比べた Markdown 最大の利点は、プレーンテキストとしてある程度読めることだが、ほとんどの出版社や読者にとってそれはそれほど重要ではない
これは典型的な「自分ならもっと上手くできる」というエンジニアの罠でもあるので、調査なしにそう仮定すべきではない。組版はここで扱っているツール群よりはるかに古い分野であり、その間に蓄積された価値ある知見や技術を、Markdown がいくつかの用途にはほぼ十分だからという理由で捨てるべきではない
mdBook は使いやすく、特にユーザーが テーマを選べる点 が気に入っている。主に電子書籍のオンライン版 [0] とキュレーションした資料 [1][2] に使っている
[0] https://github.com/learnbyexample/scripting_course#ebooks
[1] https://learnbyexample.github.io/py_resources/
[2] https://learnbyexample.github.io/curated_resources/