Adobe と Microsoft を飛び越えてGitで管理する書籍製作パイプラインを作成しました

2026/05/23 2:17

Adobe と Microsoft を飛び越えてGitで管理する書籍製作パイプラインを作成しました

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

要約

日本語訳:

著者は、新規の形式付けをソフトウェア工学上のタスクとして扱い、Adobe InDesign などの高価なライセンスに依存する脆弱な専用ファイルから、オープンでプレーンテキスト形式のアートファクトへの移行を行うことで、自己出版の自動化を目指している。以前は Microsoft Word と Adobe InDesign を用いて印刷物を制作しており、Calibre を使って Kindle 版への変換を試みても品質が不足していた上、LibreOffice のアップデートにもかかわらず高品質なタイポグラフィを達成できていなかった。今回の移行では LaTeX と自作の Python スクリプトを採用し、電子書籍版および印刷版双方で高品質なテキストを提供すると同時に、Adobe InDesign などの高額ライセンスへの依存度を低減させている。

最も重要な点として、Standard Ebooks のガイドラインを採用することで、厳格なスタイルマニュアルとコマンドラインツールが不可欠な「リンター」として機能し、コードの品質を自動的に検証してデジタル上のエラーを未然に防ぐ。最終出版である『サルデーニャ公(Prince of Savoy)』により、Git を用いたバージョン管理に基づく開発へのピボットが完了した。今後、プロジェクトでは汎用的なスクリプトを活用し、Open Document XML をそのままクリーンな XHTML と LaTeX にマッピングする手法を採用する。この方法は、著者にとって持続可能で再現可能なアプローチを提供し、脆弱なバイナリ形式を意味論的データ構造に置き換えることで、高価なソフトウェアへの依存関係を持たずに長期的な互換性を促進する。

本文

小説家の組版ワークフロー:「真実の源泉」と自動化作業の追求

小説創作において最も重要なのは物語そのものですが、それを出版に値する完成形とするためには、文法やレイアウトといった技術的な要素への多大な労力も不可欠です。特に自己出版においては、組版処理を後回しにしてしまうことはよくあります。ここでは、独立系作家かつソフトウェア開発者として培った、Word から LaTeX への変遷と、その自動化ワークフローについて紹介します。


🛠️ 初期のアプローチ:Microsoft Word の限界と Adobe InDesign への移行

当初の戦略はすべてを**Microsoft Word(DOCX)**で行うところから始めました。編集者や校正者が変更履歴を追跡しやすい点から、すべての最終組版ソフトウェア(InDesign, Kindle Create など)との互換性が高いためです。

⚠️ Microsoft Word の弱点

印刷用レイアウトにおいて Word は以下の点でプロフェッショナル品質に欠けます:

  • マイクロタイポグラフィ機能の不足(2026 年初頭時点での確認)
  • 破折符処理や両端揃えの不備
  • デスクトップパブリッシングレベルの細部制御が困難

🎨 Adobe InDesign への挑戦

業界標準である InDesign で「芸術的な作品」を生み出したいと願い、Creative Cloud を導入しました。学習した主な機能は以下の通りです:

  • DOCX スタイルのマッピング
  • 行切りの防止(エムダッシュの制御)
  • 正確な余白設定とページバランス調整
  • ドロップキャップ、トラッキング、ベースライングリッドの設定

※ InDesign は印刷媒体には最適ですが、電子書籍用 EPUB の支配的なツールではありません。

📚 電子書籍制作ツールの比較

ツール特徴・課題
Calibreほぼあらゆる ebook を扱い、EPUB 作成ツールセットが充実。Word DOCX のインポートも容易。HTML/CSS 知識があれば高互換性な EPUB が作れます。
Kindle CreateAmazon が推奨する KDP 用ですが、独自フォーマット(KPF/KFX)に変換されるため、維持すべきフォーマット負荷が増加します。

🚀 転換(Pivoting):Standard Ebooks ワークフローへの決断

2025 年にトライロジーの第 3 巻『サヴォイ公爵』を完結させた際、Standard Ebooks (SE) プロセスを採用する大きな転換点になりました。

🔄 SE プロセスの特徴

SE のスタイルガイドは解釈の余地を許さず、厳格かつ独断的です。しかし、これに従うことで事実上すべてのデバイスで動作する完璧な EPUBが得られます。

🛡️
standardebooks
ツールの利点

これはコピーエディターのようなものであり、電子書籍組版用の強力な**リンター(linting ツール)**としても機能します。主なチェック例:

  • 文字サイズ単位の誤用(推奨:
    em
    単位)
  • メタデータと実際の単語数の不一致
  • ヘッダー要素のセマンティクスエラー(「タイトル」か「順序番号」を選べず両立させない)
  • 所有格記号
    's
    のイタリック体内外の扱い

このプロセスを経ることで、数百のチェック項目をクリアし、Git でバージョン管理されたクリーンな XHTML ソースファイルが構築できました。これにより、Kindle Create を廃棄し、SE 準拠 EPUB が KDP で良好に動作する状況を作ることができました。


📝 改造(Retrofitting):ODT と LaTeX の統合ワークフロー

旧来の Word ドキュメントを、オープンソースで編集・管理しやすい環境へ「再装備」しました。

1. マスタファイルの変換:DOCX → ODT

Word を使う疲れから解放され、LibreOffice Writerのネイティブ形式である

ODT
に変更しました。

  • 改修作業: 歌書・手紙・詩・引用などへのセマンティックな段落スタイル追加。
  • 多言語対応: 7 つの言語ごとのスタイルを作成し、約 100 の非英語表現に適用。
  • アクセシビリティ向上: 内面的思考や強調などをイタリック体として記述しつつ、それらを「セマンティクス」として扱うことでスクリーンリーダーへの対応を強化。

これで得られたのは、オープンソースで編集容易な ODT ファイルです。これを新たな「真実の源泉」と定義しました。

2. 自動化スクリプトの開発

ODT から EPUB/PDF への変換を自動化すべく Python スクリプトを開発:

  • lxml
    Claude Code
    を活用し、ODT の XML ノードを中間構造にマッピング。
  • TOML
    設定ファイルで ODT スタイルと XHTML 要素を紐付け。
  • 結果: リンターエラーは数個のみという極めてクリーンな EPUB が構築されました。

3. 印刷版(PDF)の課題と解決

LibreOffice Writer のマイクロタイポグラフィ機能はまだ十分でなく、InDesign と同等の品質が得られませんでした。Scribus では処理に時間がかかるため、最終的にはLaTeXへ舵を切りました。

  • LaTeX の強み: 高度なタイポグラフィ、自動化能力、バージョン管理への対応。
  • 実証実験: LaTeX で作成した章と InDesign との比較では、視覚的にほぼ見分けがつかない精度でした。

🔄 ODT → TeX 変換スクリプト

既存の

ODT → XHTML
スクリプトを拡張し、
ODT → TeX
もサポートする汎用的なスクリプトを作成しました。これで印刷版(LaTeX)と電子書籍(EPUB/XHTML)の両方を、一つの「真実の源泉」から生成できます。


📂 現状のワークフロー:透明性と可視性

現在の手順は以下のようになります:

  1. 執筆: LibreOffice Writer(ODT)を使用。「マスタ」として管理。
  2. 印刷版生成: Python スクリプトで
    ODT → TeX
    へ変換し、PDF を出力。
  3. 電子書籍生成: 同スクリプトで
    ODT → XHTML
    へ変換し、EPUBを出力。
  4. バージョン管理: Git でテキストベースの
    .xhtml
    .tex
    ファイルを管理。(校正時は
    git diff
    で変更確認が可能)

✅ メリット

  • 不透明なバイナリ(
    .docx
    ,
    .indd
    )から、透明なテキストへ移行。
  • 生活の質(QOL)向上: コードとして書けるため、変化を追跡しやすく管理しやすい。

🛠️ 改善余地と未来展望

将来的には XHTML と TeX をさらに「コード化」することを願っています。現在は各書籍に別々の Git リポジトリを持つ必要があり、ODT ファイルを残しているのは、プロフェッショナルな校正者が依然としてワードプロセッサを好むためです。

このプロセスはすべての作家に向いているわけではありませんが、自分自身でフォーマット作業を楽しめれば、それは読者にとっても勝利につながります。


🔧 付録:LaTeX プレアムブルの主要パッケージ

本番環境で使用している主要な LaTeX パッケージと役割は以下の通りです:

  • memoir: ドキュメント作成のための「バッテリー搭載済み」クラス
  • fontspec: OpenType フォント(Adobe Garamond など)のレンダリングを許可
  • polyglossia: 言語ごとの破折パターンを提供(フランス語やラテン語などの多言語対応)
  • graphicx: 地図や画像の高度な埋め込みと調整を許可
  • microtype: ページの外観と可读性を向上させる機能(LaTeX を選んだ主な理由の一つ)

同じ日のほかのニュース

一覧に戻る →

2026/05/26 5:41

いくつかの興味深い現代風ピクセルフォント

## Japanese Translation: Vercel による Geist Pixel は、新しさ重視のベクトルフォントから、プロフェッショナルな生産環境に適合した堅牢で機能的なタイポグラフィシステムへの転換を象徴する。アンドリュー・グリーソン氏の Analog Mono(低基準線問題を解決)、ジョセフ・ファチュラ氏の Two Slice(読みやすい 2 ピクセル高のベクトルフォント)、および古谷由美氏の Coral Pixels(ノスタルジックなサブピクセルレンダリングによるフレアを包含)など、過去のデザインは特定の美的特徴や歴史的真似に焦点を合わせていたのに対し、Geist Pixel は重要な生産上の課題に取り組む。ビューポート間での一貫したスケーリングを保証し、対立するタイポグラフィ指標を解決するとともに、文字形式以外の領域(キアニング、メタデータ、追加のグリフ、垂直指標など)において「目に見えない本業」として多大な努力を投入している。ユーザー体験を劣化させる可能性のあるリスクの高い新奇品ではなく、Geist Pixel は広範なタイポグラフィエコシステムにおける信頼性の高いシステムツールおよび拡張機能として振る舞う。この進化は、現代的インターフェースに必要な本質的なタイポグラフィ的堅牢性を保ちながら、画面上で本物らしいテクスチャを維持することを可能にする新たな業界標準を確立する。 ## Text to translate: Improved summary: Geist Pixel by Vercel marks a shift from novelty vector fonts to a rigorous, functional typography system built for professional production. Unlike earlier designs—such as Andrew Gleeson’s Analog Mono (fixing low baseline issues), Joseph Fatula’s Two Slice (a 2‑pixel tall readable vector font), and Kumiko Yoshida’s Coral Pixels (incorporating nostalgic subpixel rendering fringing)—which focus on specific aesthetic quirks or historical replication, Geist Pixel addresses critical production challenges. It ensures consistent scaling across viewports, resolves conflicting typographic metrics, and includes significant “invisible hard work” beyond letterforms in areas like kerning, metadata, extra glyphs, and vertical metrics. Rather than being a risky novelty that can degrade user experience, Geist Pixel acts as a reliable system tool and extension within a broader typographic ecosystem. This evolution establishes a new industry standard where pixel fonts maintain authentic visual texture while preserving the essential typographic rigor required for modern interfaces.

2026/05/26 14:57

予兆的な再会

## Japanese Translation: 学術的な集会で、著者は同世代の多くが大型言語モデル(LLM)による知識労働の人間的側面の喪失に対して広く不安を抱いているのに対し、以前の高齢世代が直面した恐怖とは対照的だと指摘した。この感情は、ウェスリアン大学の工学プロジェクトのために構築され、後にブラウン大学 CS の卒業生アダム・レビエンタールによってメンテナンスされた 1992 年のネットワーク接続型テトリス「BattleTris」の復活という具体的な成功と鮮明な対比を形成していた。長年にわたり、グリッド構成を変更する特定の武器を含むこのレガシーコードベースは、元の 32 ビット Solaris ビルドに影響を与えたことのない現代システム上でクラッシュに見舞われていた。最近、「スパイ」兵器によって開始された試合では、バッファ過負荷によりスタックのスマッushing の検出エラーが発生した:`sendBoard` 関数は 4 バイト(`sizeof(int)`)しか割り当てていないが、8 バイト(`sizeof(unsigned long)`)を書き込み、結果として現代の 64 ビット Linux システム上で 1114 バイトの過負荷を引き起こしていた。 多くの専門家の圈で現在恐れている LLM クロードを使用することで、チームは割り当てと書き込み操作間のこの特定の不一致を特定した。これらの AI の洞察に基づいたターゲットされた修正を適用することで、彼らはゲームを成功裏に移植し再構築し、20 年間クラッシュせずにもう一度元の著者たちにプレイさせることができた。この成功は、LLM が歴史的なデジタルアーティファクトの保存において脅威ではなく有益なパートナーであることを示す強力な証拠であり、現在の不安を引き起こすその技術自体が、複雑なレガシーシステムのデバッグを効果的に支援し、古いプロジェクトの継続的な関連性を確保することを可能にすることを明らかにしている。

2026/05/25 14:05

C 配列の型は奇妙です

## Japanese Translation: C 言語の中核となる区別は、配列が関数呼び出し中にポインタに退化するメカニズムにあります。通常、これは重要なサイズ情報を失うことを意味しますが、`sizeof` 演算子や `&` オペレーターと組み合わせて使用される場合を除きます。関数の引数において、あらゆる配列型は自動的にポインタとして解釈され、サイズ指定子は破棄され、その結果 `sizeof(arr)` は `sizeof(T)` を返します。標準的な慣行では、配列名はその最初の要素へのポインタ(`&arr[0]`)と扱われますが、`sizeof` および `&` のようなオペレーターは元の配列の身元を保持します。特定の実行長が強制されているより短い配列を渡す場合(例:`char buf[static 8]`)、サイズ指定子は呼び出し時にコンパイラの最適化にのみ有用であるため、未定義の動作を引き起こします。これらのリスクを軽減するために、開発者は単なるポインタではなく「配列へのポインタ型(`T (*)[n]`)」を使用して、関数呼び出し中に長さ情報を保持するようにする事ができます。関数は配列と同様にポインタに退化しますが、関数名を解除参照する(`*fn`)ことで、関数シンボルを直接使用せずに直接呼出しを行うことができます。配列は `&arr[0]` によって退化するのに対し、関数は自動的に宣言位置へのアドレスに変換されます(`&fn` は `fn` と同等です)。両者とも、`&` オペレーターへの引数として渡された場合、退化しません。高度な解決策としては、「ワイドポインタ」を使用する事があり、これは構造体のように動作し、全サイズなどの追加データを格納することで、コンパイラが関数の境界を越えて長さを追跡できるようにします。これは C++ の `std::vector` に準じるものであり、サイズ指定のない型整合性を維持します。GDB などのツールは、アドレス表現に `@` オペレーターを使用し、メモリアドレスに長さを付与することで、場所表現を配列に変換します(例:`*ptr@2`)。配列を単純なポインタの退化ではなく、値ベースの構造体として捉えるというコンセプトを採用する事により、複雑なシステムにおけるコードの安全性とメンタルモデルを著しく向上させる事が可能です。