はじめに
2020年に開催予定だった技術書典8へ向けて、技術同人誌を作成し、技術書典応援祭でのオンライン頒布をしました。
当時の職場の有志が集まって、プログラミング言語について紹介しています。
この技術同人誌の作成にあたり、技術選定や取り組んだことについて解説します。
企画立案
2019年頃、技術書典が盛り上がっていました。個人的にも同人誌文化に親しんでいたため、技術書典にもサークル参加してみたい気持ちがありました。
職場の有志を集めて、和気あいあいと取り組んでみたかったこともあり、Software Design や WEB+DB PRESS のような合同誌の形式を検討しました。
議論を重ねて、プログラミング言語を題材に執筆することを決め、申し込みに進みました。
2019年10月頃に職場にて有志を集い、11月にサークル参加を申し込みました。
サークルカットが必要だったため、有志同士のつながりでイラストレーターに依頼し、描いてもらいました。
12月15日頃に当選の連絡をいただき、本格的に執筆を始めました。
技術選定
当落発表までに、どのツールで執筆するかの技術調査をしていました。
候補として挙がっていたのは以下のとおりです。
- LaTeX: 組版品質が高く、数式や図表の配置を細かく制御できます。私自身は使い慣れていましたが、環境構築が複雑でチームメンバーへの学習コストが高いと判断しました
- Re:VIEW: 独自のRe:VIEW記法(Markdownに近い軽量マークアップ)で執筆でき、内部でLaTeXに変換してPDFを生成します。執筆とスタイリングの関心が分離されており、著者は Re:VIEW 記法に、編集担当はLaTeX側のスタイル調整に集中できます
- Vivliostyle: CSSによる組版ツールで、HTMLやMarkdownから印刷用PDFを生成できます。Web技術に慣れたメンバーには馴染みやすい一方、当時は日本語縦組みや印刷向け細かい調整のノウハウが少なく、情報収集コストが高いと判断しました
Re:VIEW を選んだ理由は、著者が Markdown 類似の Re:VIEW 記法で執筆に集中でき、私がLaTeX 知識を活かしてスタイリングを担当できる、役割分担のしやすさにあります。
また、著者によっては Markdown で原稿を書いた後、md2review で Re:VIEW 記法に変換するやり方を取れることも魅力的でした。
執筆
2020年1月頃に GitHub リポジトリを作成し、各々執筆していただいたものをマージしていきました。Re:VIEW のバージョンは v4.0.0 でした。
編集として行ったことは以下のとおりです。
- GitHub Actionsの構築: ビルドしたPDFを出力する・TextLintで静的解析する
- スタイリング: 奥付が偶数ページになるよう調整したり、プロフィールやコードブロックのスタイリング
- コードレビュー: 本文モノクロ印刷のため、画像がカラーだった場合はモノクロにしてもらうなどコメント
- イラストの発注: イメージを言語化して依頼・検品し、表紙・裏表紙を設定する
- 印刷所の選定: PDF印刷ができる印刷所をチェックし、選定する
GitHub Actions
GitHub Actions でプッシュのたびに自動ビルドし、生成された PDF を Artifacts として保存することで、レビュー時に最新の PDF をすぐ確認できる環境を整えました。当時は re-view-pdf-generator を使いました。
TextLintについては、textlint-rule-preset-ja-technical-writing を使って技術文書向けのルールを適用しました。「である調」「ですます調」の混在チェック、1文の長さ制限、二重否定の検出などを設定し、文体の統一に役立てました。
{
"filters": {
"whitelist": {
"allow": [
...
]
}
},
"rules": {
"preset-ja-spacing": true,
"preset-ja-technical-writing": {
"ja-no-weak-phrase": false,
},
"spellcheck-tech-word": true,
"ja-technical-writing/sentence-length": {
"max": 200
},
"ja-technical-writing/no-exclamation-question-mark": {
"allowHalfWidthQuestion": true,
"allowHalfWidthExclamation": true,
},
"ja-technical-writing/max-kanji-continuous-len": {
max: 6,
allow: ["純粋関数型言語"]
}
},
"plugins": [
"review"
]
}
スタイリング
Re:VIEW のスタイリングはLaTeXのスタイルファイル(.sty)を編集して行います。主に対応した内容は以下のとおりです。
- 奥付の調整: 奥付が必ず偶数ページ(左ページ)に来るよう、
\clearoddpageを利用して調整1 - コードブロック: フォントサイズや背景色の変更、行番号表示の設定
- プロフィール: 著者アイコンと紹介文を横並びにするレイアウトをLaTeXで実装
プロフィールのスタイリングは以下のとおりです。
\newcommand{\profile}[3]{
\begin{minipage}[]{.2\linewidth}
\centering
\includegraphics[width=.75\linewidth]{#1}
\end{minipage}
\begin{minipage}[]{.8\linewidth}
\vspace{1ex}
{\noindent
{\bf 著者:#2}\\
\rule[1.2zw]{\linewidth}{0.05zw}}\vspace{-1.5zw}
#3
\vspace{1ex}
\end{minipage}
\vspace{1ex}
}
使い方は以下のとおりで、画像のような結果となります。
//embed[latex]{
\profile{./path/to/image.jpg}{Adacchi3(@ayata\_taguchi)}{Webエンジニア。SPARQLやオントロジーマッピングについてちょっとわかる。}
//}
おわりに
技術書典8 は新型コロナウイルス感染症の影響により中止となり、技術書典応援祭でのオンライン頒布となりました。Twitter(X)にて宣伝し、多くの方にご購入いただきました。
出社が再開された後、ご協力いただいた方々には大阪印刷株式会社(おたクラブ)さんで印刷した書籍を贈呈しました。
Re:VIEW による執筆環境は、LaTeX 知識がある編集者と、Markdown 慣れした著者がコラボレーションできるバランスの取れた選択だったと思います。GitHub Actions による CI/CD を導入したことで、原稿の品質担保と最終成果物の確認が自動化でき、複数人での執筆でも混乱なく進められました。
当時は新卒1年目で自ら音頭を取り、いろいろな方を巻き込んで挑戦できた貴重な経験でした。
