ドラフト

この記事はドラフトです。
この注意書きを削除するまで、このURLを共有したりリンクしたりしないでください。

本書の奥付

2014年3月14日



これまで多くの書籍を執筆してきましたが、時々聞かれる質問として、執筆に使用しているツールは何ですか?というものがあります。長年にわたり、少なくとも私自身の目的にとっては非常に優れたツールチェーンを開発してきましたので、その仕組み全体について説明します。

執筆を始めた頃は、ワープロソフトや出版ツールを使用していました。しばらくの間Microsoft Wordを使ってみましたが、あまり満足できませんでした。初期の書籍(『Analysis Patterns』、『UML Distilled』、『Planning Extreme Programming』、『Refactoring』)はすべてFramemakerを使って書かれました。これは大規模な文書を扱うための洗練されたツールです。WYSIWYG編集環境を好むなら、かなり良いものでした(ただし、2000年頃以降は使用していません)。

『Patterns of Enterprise Application Architecture』では、書籍の執筆方法に大きな変化がありました。テキストベースのシステムに移行したのです。つまり、書籍のソースファイルをオープンなテキスト形式で保存するということです。これは私にとって非常にうまく機能しました。私は結局のところギークなので、テキストベースのファイルを処理するツールを簡単に作成できます。また、標準的なバージョン管理システムで書籍を管理することもできます。これは一人で作業する場合にも便利ですが、他の人と共同作業を行う場合は不可欠です。

このような仕組みには、多くの人にとって欠点もあります。WYSIWYGではなくなりました。代わりに、テキストエディタで執筆し、スクリプトを実行して読みやすい出力を生成します。私にとってはこれで十分ですが、ギークでない人にとってはかなり原始的に感じるかもしれません。

私のような技術系ライターにとって、このスキームの大きな利点の1つは、ソフトウェアコードの処理です。テキストを使用する前の時代には、プログラムを記述し、動作させ、テストしてから、Framemakerにコピー&ペーストする必要がありました。最後のステップが問題でした。プログラムを変更する必要が生じると、書籍内のコードも更新する必要がありました。手動でのコピー&ペーストでは、エラーが発生しやすかったです。

現在のスキームでは、すべてのコードがビルドプロセスの過程で自動的に書籍に取り込まれます。そのため、コードを更新すれば、書籍も自動的に最新の状態になります。二度と手動でのコピー&ペーストには戻りません。

私の完全テキストアプローチの唯一の例外は図表です。様々な図表作成ツールを使用してきましたが、ほとんどがWYSIWYGスタイルのツールです。理想的ではありませんが、テキスト編集とよりうまく連携するソリューションは見つかっていません。

ソーステキスト形式

私のアプローチの重要な点は、オープンなテキスト形式を使用するという考え方です。私の場合は、自作のXMLボキャブラリを使用しています。HTMLとほぼ似ていますが、私の書籍にとって意味のある追加タグがあります。私は常にセマンティックマークアップのファンでした。出力の書式ではなく、意味に従ってテキストにマークアップするのです。例えば、私が時々行うことの一つに、定義する際にフレーズを太字にするというものがあります。これは、読者が用語の定義を探している場合、ページをスキャンすることで迅速に見つけることができるため、行っています。

しかし、そのマークアップを行う際に、<b><bold>のようなタグは使用せず、セマンティックタグ<term>を使用します。そして、変換コードで用語を太字のテキストに変換するように決定します。

書式ではなくセマンティクスに集中することを強制するため、このようにしています。また、変換中に他の便利な機能も提供します。用語を変換する際には、太字にするだけでなく、出力にインデックス用のマーカーを挿入することもできます。

知っている多くの人がテキスト文書のアイデアを気に入っていますが、XMLを嫌っています。XMLの入力がぎこちない、あるいはタグが読みやすさを妨げるという人もいます。ここで人気のある代替案はマークダウンで、これは意図的にプレーンテキストで読みやすく、書きやすく設計されています。XMLの方が柔軟性が高いためXMLを好んでいます。好きなタグ(この書籍専用の特殊なタグを含む)を導入し、プロセスにスムーズに組み込むことができます。

他に遭遇したソース形式として、Docbook XMLボキャブラリを使用するものがあります。Docbookは、特に長文文書のための標準的なXMLボキャブラリです。いくつかの利点がありますが、タグが冗長で邪魔だと感じています。また、Docbookを採用すると、独自のセマンティックタグを使用できなくなります。

長い歴史を持つ別のテキスト選択肢としてLaTeXがありますが、試したことはありません。

変換ターゲット

ソース文書を出力に変換するために、後で説明する変換ツールチェーンを使用します。そのツールチェーンの直接的なターゲットはDocbookです。ソース文書形式としてはDocbookを好んでいませんが、変換ターゲットとしては非常に優れています。テキストをDocbookに取り込めば、Docbookを様々な形式(HTML、PDF、ePubなど)に変換できる多くのOSSツールがあります。これらのツールを私のツールチェーン全体に簡単に組み込むことができるため、1つのコマンドでこれらの形式の任意の組み合わせを生成できます。

初期の段階では、書籍に取り組む際に通常はHTML出力を利用します。レビュー担当者と書籍を共有したい場合は、PDFまたはePubを生成します。私の出版社(ピアソン)はDocbookファイルを受け取り、それらを彼らの出版プロセスに送ります。

変換ツールチェーン

Docbookを生成するツールチェーンは、Rubyで自作した一連のスクリプトです。これらは、書籍テキストを形成する一連のXMLファイルと、参考文献やライブコードディレクトリなどの参照ファイルを取り込み、Docbook出力を生成します。

これらは変換ルールとして構成されているため、トランスフォーマが「term」タグを検出すると、適切なDocbook要素(インデックス情報を含む)を出力することがわかります。新しいタグを追加する場合は、そのための新しいハンドラーメソッドを追加するだけで、出力がすぐに表示されます。このツールチェーンは、私のウェブサイトで使用しているものと非常に似ていますが、主な違いは、ウェブサイトのツールチェーンが出力をHTMLではなくDocbookに出力することです。

編集

このアプローチの良い点は、任意のテキストエディタを使用して執筆できることです。私のお気に入りのテキストエディタはEmacsで、EmacsにはXML文書を編集するための非常に優れたモード(NXMLモード)があるのが特に便利です。私が見た多くのXMLエディタは、階層的データ構造のシリアライゼーションとしてのXMLを対象としており、マークアップされたテキストには適していません。NXMLモードはテキストマークアップに非常に適しているため、私にとってうまく機能します。他の機能の中でも、RNCスキーマファイルを使用してエディタをスキーマ認識にすることができます。

コードインポート

コードの自動インポートは、私のツールチェーンの非常に重要な部分です。好きなように整理された通常のプログラムコードで作業できます。書籍にコード断片として取り込みたいコード領域を示すために、コメントで囲まれたマーカーを配置するだけです。次に、ファイル名と断片をラベル付きで指定するXML要素を作成します。ツールチェーンを実行すると、コードがライブファイルからDocbook出力に抽出されます。

グラフィック

グラフィックは、テキストエディタで編集を行わない唯一の分野です。現在、図表の作成にはOmniGraffle(Mac専用)に依存しています。OmniGraffleは、書籍制作に必要な様々な形式(png、epsなど)にエクスポートできます。私のスクリプトツールチェーンはAppleのスクリプト機能を使用して、必要に応じてファイルを自動的に再エクスポートするため、図表を変更したときにエクスポートすることを覚える必要はありません。

バージョン管理

他のプログラマーと同様に、バージョン管理を非常に重視しています。『P of EAA』を始めた頃はCVSを使用していましたが、それ以降はSVN、Mercurial、gitを使用してきました。バージョン管理システムは、他の人と共同作業を行う際に特に役立ちます。コードと同じアプローチを使用して、執筆内容を同期させることができます。

書籍が制作段階に入ると、出版社のピアソンと協力して、リポジトリ内の元のソースファイルで作業することに慣れているコピーエディタ、インデクサ、その他の制作スタッフを利用しています。


重要な改訂

2014年3月14日