Moiz's journal

プログラミングやFPGAなどの技術系の趣味に関するブログです

【技術書典6】Colabから印刷所に出せる原稿を作るワークフロー

Colabから印刷所に出せる原稿を作るワークフロー

はじめに

先日行われた技術書典6で「PythonとColabでつくる-ゼロから作るRAW現像」をid:uchan_nosさんのブースで頒布していただき、用意していた全100部を完売することができました。 ひと月前に部数を相談していたときには50部売れるかなと心配していたのが嘘のようです。 id:uchan_nosさんと@akachochinさんにはいくら感謝しても足りません。

さてイベントも終わり一段落したところですが、今回の原稿作成はちょっと変わったワークフローだったのでまとめておこうかと思います。

Colabから原稿へ移す際の問題点

今回の本はタイトルからもわかるとおり、Colab上で実行できるコードを使う事により、読者のハードルを下げるというのが特徴の一つです。 書籍の方ではColabで行った処理を、結果含めてそのまま再現しなくてはなりません。

当然コードは全部実行可能、出力結果はColabの物と同一でなくてはなりませんが、これが意外と問題になります。

もともとこの同人誌は当ブログで書いた連続記事が元になっています。ブログの方ではJupyter Notebookを使いましたが、実行可能なコードと解説という組み合わせは同人誌版とほぼ同じです。 しかしブログ版を書いたときにはコードはJupyterからのコピペに頼っていたために、

  • コピーミス
  • バージョンが違うコードが混在する
  • 後からの編集で原稿とのミスマッチがおきる

という問題がおきました。特に最初の2つはコードの実行ができなくなる可能性があるので大問題です。

また今回は終盤結構な数の数式が出てくるので、編集の手間を考えるとできるだけ手戻りは防ぎたいところです。

Colabから原稿へのワークフロー

そこで今回はこのようなワークフローを選択しました。

  1. ブラウザ上でColabでプログラム作成。GitHubに保存。
  2. 同Colabで原稿作成(図およびLaTex形式の数式入り)。GitHubに保存。
  3. ローカル環境で、nbconvertによりColabのノートブックからPDFに変換。
  4. 一次校正
  5. nbconvertによりColabからマークダウン形式への変換
  6. 自作スクリプトPython)による画像リンクの修正
  7. マークダウンからPDFに変換
  8. 二次校正
  9. md2reviewでMark DownからRe:VIEW形式に変換
  10. 壊れてしまったLaTex形式数式を修正
  11. レイアウトの調整
  12. Re:VIEWによるPDF原稿の出力
  13. 最終校正
  14. GitHub上の原稿の調整(公開するため)
  15. 完成

また各ステップでMakefileをつくり、できるだけ単純作業は自動化するようにしました。 具体的にはColabで変更を加えると、Make一発で9のRe:VIEW形式への変換まで実行されるようにしました。

ここで4の校正は数回、8のニ時校正も2〜3回行っていますが、Colabで変更してから校正用PDFにするまでは自動なので負担はそれほど大きくありませんでした。

一次と二次の校正の回数が多いのは、Re:VIEW形式にしたあとでは手作業が多いため、これ以降はColabには戻りたくないので、事前にできるだけ完成度を上げておく必用があったからです。

解説と振り返り

最初の目論見では、3のPDFの完成度が高いようならそのまま本にしてしまおうと思っていたのですが、実際に出力されたPDFは間延びしたもので、また、印刷原稿に必用なトンボやノンブルもなく、印刷所にだす原稿には使えなさそうなクオリティーでした。ただ、テキストやColabのコードの確認には十分だったので何回かPDF化してその上で校正しました。

次の5のマークダウン形式への変換と7のPDFの変換では、GitHub上に用意した画像ファイルがPDF化されないという問題がありました。これは6にて、ローカルのリポジトリーのパスに置き換えるスクリプトを実行することで回避しました。

9の「壊れてしまったLaTex形式数式」の修正というのは、md2reviewがうまく認識できなかったLaTex数式を通常のマークダウンと認識してしまう部分が何箇所かあったので、それを修正する作業です。これは自動化したかったのですがうまくいきませんでした。また、md2reviewの調整でうまくいくのかもしれません。1

10以降は通常のRe:VIEWによる技術書執筆とあまり変わらないと思います。今回このあたりは基本的に手作業でした。23

原稿ができたあとでみてみると、Colabノートブックから、マークダウン形式、Re:VIEW形式、と2段階の返還をしているのが気になります。 nbconvertはLaTex形式への変換もできるので、そうしておけば1回の変換ですんだのではないかと思いますが、私自信がLaTexについてあまり知らないのでこのようなフローになってしまいました。

また、ステップ10以降が手作業がメインになってしまっている点も気になります。理想はColabから最終Re:VIEWへ完全自動化だったのですが、なかなかそううまくは行かないようです。 このあたりは次回への課題です。

環境に関しては、今回は原稿部分は図の作成含めてすべてUbuntu18.04上で行いました。表紙の作成はWindows上で行っています。

校正には印刷の他にiPad Proを使用しましたが非常に便利でした。

まとめ

以上、今回「ゼロから作るRAW現像」の原稿を作成するにあたって利用したワークフローを紹介しました。

ColabやJupyterといったPythonインタラクティブノートブックで実行したものを原稿にする際にしか参考にならないニッチな情報ですが、もともと技術書典というのはそういうニッチな物を扱う点に価値があるのかもしれませんので、ここで関連記事として公開させていただきます。

最後に

【技術書典6】で頒布した「PythonとColabでできる - ゼロから作るRAW現像」の書籍版・PDF版ををBOOTHにて販売しています。 書籍+PDF版は2200円プラス送料、PDF版は1200円です。

moiz.booth.pm