https://flightbooks.pub/ のビルド環境をローカルに特化して移植しました。
FlightBooksは技術書典をはじめとする技術同人誌を、気軽に書くためのツールセットです。 Markdownで章ごとに執筆し、config.ymlを書き換えるだけで、同人印刷所に入稿可能なPDFをビルドできます。 同様の執筆環境にはRe:VIEWやVivliostyleがありますが、Flightbooksの特徴としては、エンジニア(とくにWeb系の方)が細かいことを気にせず最低限の設定で同人誌のデータを作れることを目標としています。そのため、あまり自由なレイアウトを作り上げるには不向きです。
- 引用、脚注のパーサー調整
- ドキュメントをわかりやすく
- Dockerhubにアップしてみたい
- npm コマンドを定義する
- 記事をbook配下のNN.mdに書く
- 画像を埋め込む場合はbook/images配下に設置し、相対パスで埋め込む。
- リモート画像はネットワーク環境により読み込めない(読み込み完了を待たずにPDF生成する)可能性がある
- node generate_html.js を実行する
- node generate_pdf.js を実行する
- build/配下に成果物が出来上がる
直接実行の場合、実行環境にNodeJS 20、適切なフォント*とPlaywright対応の実行環境をインストールする必要があります。
付属のDockerイメージには、これら必要な環境をインストールしてありますので、ぜひご活用ください。
docker compose build
docker compose run flightbooks npm install
docker compose run flightbooks node generate_html.js
docker compose run flightbooks node generate_pdf.js
一般的な印刷所に比べ、同人印刷所は厳密な形式でないPDFも(納期に余裕をもって送れば)対応していただけることが多いです。本エンジンはトンボ(裁ち落とし線)の実装をそぎ落としました。そのため「仕上がりサイズのPDFデータです。文字だけで全画面画像がないので塗りたし対応不要です」という呪文を唱えれば受け取ってもらえる可能性が高いです。
画像については、高解像度(Retina@3x相当以上)をPNG形式で用意することが望ましいです。SVGは問題が起きやすいためPNGにしましょう。高解像度画像が手に入らない場合は「解像度不足でギザギザしても大丈夫です」と伝えましょう。CMYKとは何か知らない場合、あなたが扱っている画像はほとんどの場合RGB形式です。
同人印刷所で印刷可能なPDFを生成するには、フォントをファイル内に埋め込む必要があります。しかしChrome(のSkiaPDFエンジン)の制限により、Noto SansなどOTFフォントに対応していません。Flightbooksではアウトライン化することで対応していましたが、OSS版ではMgen+フォントを利用することで対応しています。template内に再配布の形で含めていますので、詳しくはライセンスファイルとDockerfileをお読みください。
本リポジトリのコードはMITライセンスとします。再配布物に関してはそれぞれのライセンスをご覧ください。