51
Sphinx-users.jp & Sphinxコミッター 清水川貴之

執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

Embed Size (px)

DESCRIPTION

Sphinxを出版に使っている事例。 以下の書籍の執筆にSphinxを使った際のシステム構成などを紹介。 ・エキスパートPythonプログラミング ・Pythonプロフェッショナルプログラミング ・Sphinxをはじめよう ・Pythonプロフェッショナルプログラミング第2版

Citation preview

Page 1: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

Sphinx-users.jp & Sphinxコミッター

清水川貴之

Page 2: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

自己紹介:清水川貴之

@shimizukawa

株式会社BeProud所属

Sphinxコミッター

Sphinx-users.jp お財布担当

一般社団法人PyConJP理事

Pepper レンタル中

Page 3: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話
Page 4: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

Sphinxで執筆した書籍1

翻訳者4名

Sphinxを使って書いた日本初の書籍(たぶん)

reSTで提出して、アスキーさんがEWBにがんばって変換

校正戻し以降は執筆側で両方メンテナンス地獄

エキスパートPythonプログラミング2010, アスキー・メディアワークス刊

Page 5: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

エキPyシステム

PDFからコピペ&Sphinxに整形

SCM(Bazzar)

reSTreST->->

make html

執筆

確認

レビュー

校正

Spreadsheetでレビュー指摘

Page 6: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

エキPyシステム

PDFからコピペ&Sphinxに整形

SCM(Bazzar)

出版

翻訳

校正

レビュー

Spreadsheetでレビュー指摘

Page 7: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

Sphinxで執筆した書籍2

執筆者14名

make shuwaで、Sphinxから

直接提出用フォーマットで出力

人数多くてマークアップや文体を揃えるのが大変

校正戻し以降は執筆側で両方メンテナンス地獄

Pythonプロフェッショナルプログラミング2012, 秀和システム刊

Page 8: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

PyProシステム

Sphinxの雛形作成

SCM(Mercurial)

reST

make html

執筆

確認

レビュー

通知

Spreadsheetでレビュー指摘

Page 9: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

PyProシステム

make shuwa 校正Sphinxの雛形作成

SCM(Mercurial)

reST

make html

執筆

確認

レビュー

通知

Spreadsheetでレビュー指摘

Page 10: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

PyProシステム

校正

SCM(Mercurial)

執筆

レビュー

出版

Spreadsheetでレビュー指摘

Page 11: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

Sphinxで執筆した書籍3

執筆者4名

オライリーさんがmake xmlからのRe:VIEW変換

リポジトリ直接校正のため、戻しがなくて平和

Sphinxをはじめよう(電子書籍)2013, オライリー・ジャパン刊

Page 12: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

レビュー

Sphinxをはじめようシステム

Sphinxの雛形作成

SCM(Bitbucket)

reST

make html

執筆

確認

Spreadsheetでレビュー指摘

Page 13: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

レビュー

Sphinxをはじめようシステム

Sphinxの雛形作成

SCM(Bitbucket)

reST

make html

執筆

確認

出版

reSTRe:VIEW

校正

make xml

Spreadsheetでレビュー指摘

Page 14: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

Sphinxで執筆中の書籍4 <- New!!

執筆者11名

make shuwaで、Sphinxから

直接提出用フォーマットで出力

初版の原稿をreSTに戻してなかったのを反映

校正戻し以降は…どうなる?(そろそろ考える)

Pythonプロフェッショナルプログラミング第2版

2015, 秀和システム刊(予定)

Page 15: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

PyPro第2版システム

前回のSphinx原稿

SCM(Mercurial)

reST

make html

執筆

確認

レビュー

通知

Spreadsheetでレビュー指摘

通知

Page 16: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

PyPro第2版システム

前回のSphinx原稿

SCM(Mercurial)

reST

make html

執筆

確認

レビューSpreadsheetでレビュー指摘

通知

make shuwa 校正

差分をもらう予定

通知

Page 17: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

PyPro第2版 (2014/9 ~ 2015/02)

Page 18: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

PyPro第2版システム

前回のSphinx原稿

SCM(Mercurial)

reST

make html

執筆

確認

レビューSpreadsheetでレビュー指摘

通知

make shuwa 校正

差分をもらう予定

通知

Page 19: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

中央リポジトリ

中央リポジトリ

Sphinx原稿管理

Push受付

Redmineの関連チケットにcommit表示

Jenkinsへ通知、ビルド

Slackへ通知 SCM(Mercurial)

reST 通知

チケット更新ビルド

Page 20: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

執筆の工程

1. 私: Sphinx用に初期のディレクトリ構成を作る

2. 私: 社内のMercurialリポジトリにpush

3. 担当者: hg pull

4. 担当者: pip install –r req.txt (初回)

5. 担当者: 各章をそれぞれ執筆(reST)

6. 担当者: 手元で make html

7. 担当者: ブラウザで自己レビュー

8. 担当者: hg push

9. 担当者: Jenkinsでエラー -> 修正

10. 担当者: レビュー通知 -> 修正

レビュー指摘

前回のSphinx原稿①

⑥⑦

Page 21: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

Redmine

Redmine

進捗管理

チケット更新 -> Slack通知, メール通知

リポジトリ更新検知 -> チケット更新

SCM(Mercurial)

Page 22: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

Jenkins

ビルド管理

リポジトリ更新検知 hg pull

pip install –r requirements.txt

make html pdf

ビルド成功 Slack通知

成果物を提供

ビルド失敗 Slack通知

SCM

レビュー

通知

PDF生成には、TeXLive2014が必要。

各執筆者は環境を持っていない。

TeXLive2014入り

Page 23: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

Google Spreadsheet

レビュー指摘

Redmine等のチケットはあえて使わなかった

レビュアーにとって、チケットは重い(気がする)

Spreadsheetの長所、短所

他の人のレビュー状況がなんとなく分かる

さくさく書ける、緩い感じがして気軽

新しく指摘された部分が分からない

通知はGASを書いて

Slackに更新通知。

差分は分からない。

Page 24: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

出版社への提出工程(2012)

1. 私: hg pull

2. 私: make shuwa

3. 私: tar zcf bpbook20141205.tgz shuwa

4. 私: cp bpbook20141205.tgz ~/Dropbox

5. 私: メールで連絡

make shuwa 校正

②③④

Page 25: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話
Page 26: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

執筆者

執筆はreST、執筆者レビューはHTML

レビュー指摘はRedmine、または直接編集

Page 27: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

社内レビュー&早期レビュー

社内レビューはHTML or LaTeX PDF

レビュー指摘はGoogle Spreadsheet

Page 28: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

社外レビュー

出版形式PDF(希望者にはHTML渡し)

レビュー指摘はGoogle Spreadsheet

Page 29: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話
Page 30: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

各フォーマットの比較

reStructuredText

HTML

LaTeX -> PDF

秀和システム原稿フォーマット

Page 31: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

SphinxのHTML出力

Page 32: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

SphinxのPDF出力

Page 33: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

秀和システム原稿フォーマット&出力

秀和システム原稿フォーマット 出版用PDF出力

Page 34: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

ここで改めて

Page 35: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

Sphinx誕生: 2007年

作者: Georg Brandl

2007年にSphinxを開発 それまでLaTeXで作っていたPythonドキュメントが複雑すぎてメンテ不能に。簡単に扱えるツールが必要だった

DocutilsのreStrucutredTextをベースに reSTは、2002年にPythonのテキストマークアップとして採用されていた(PEP287)

その他のコミッターRoland, @shimizukawa, @tk0miya

Page 36: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

Docutils/reStructuredTextの特徴

¥や{}で目がチカチカしない

レイアウト制御命令がない

レイアウトを意識せずに内容に集中できる

テキストのままでも読みやすい

一部のマークアップを拡張可能(role, directive)

:idx: ロールを追加 blockdiag directiveを追加 →出力

Page 37: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

Sphinxの特徴

Docutilsは単ページのみ。Sphinxは複数ページを扱う。

全てのページをツリー構造に繋ぐ toctree

複数のページを縦横に繋ぐ参照

各種フォーマットの出力

HTML, PDF(LaTeX), EPUB

(WYSIWYGエディタがない)

Page 38: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

Sphinxの処理、出力フォーマット

Page 39: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

Sphinxのデータ変換イメージ

Page 40: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話
Page 41: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

numfig: 図表番号(Sphinx-1.3b1)

conf.py

index.rst index.html

Page 42: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

bizstyle: HTMLテーマ(Sphinx-1.3b1)

Sphinx bizstyleSphinx default

Page 43: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

literalinclude:外部ソース埋め込み

index.rst code/sample.rst

Page 44: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

todo

文中に入れておきたい、「あとでやること」

JenkinsのToDo検知

preface.rst preface.html

todolist.html

Page 45: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

執筆に使った/作ったSphinxの拡張

blockdiag

ダイアグラム図を書ける

japanesesupport

reSTマークアップでどうしても入ってしまう空白を除去

時々除去しすぎて英単語同士がくっついてしまう

column-directive

コラム用の体裁でレイアウトする自作ディレクティブ

idxロール

索引データを自動生成

Page 46: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

執筆用に作ったSphinxの拡張

Sphinx日本語バリデータ

各自がmake htmlするとNG項目を表示する

半角全角チェック: 英数カナ

ABCABC123123アイウアイウ -> ABC123アイウ

半角全角カッコチェック: 内容が全角ならカッコも全角

NG: (sphinx)(全角)

OK: (sphinx)(全角)

!? は全角直後では全角、半角直後では半角

NG: 日本語!!

OK: 日本語!!

全角直後のカンマ、ピリオドは禁止

用語辞書で指摘

用語辞書

Page 47: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

執筆用に作ったSphinxの拡張

rst2shuwa

秀和システム原稿フォーマットでビルド

make shuwa ------->

3年前の資産!

(やっと元が取れそう)

(Pythonプロフェッショナルプログラミング 2012年2月の最終稿より)

Page 48: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

校正戻し原稿の扱い

2012年は、秀和フォーマットで校正されたデータが戻ってきた

差分を手動でreSTに戻す作業が発生

今回はどうする?

最初から差分で受け取る・・これはこれで大変そう

Page 49: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話
Page 50: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話

Sphinxのコミュニティー

Webサイト、資料:

http://sphinx-users.jp/

メーリングリスト:

http://sphinx-users.jp/mailinglist.html

イベント:

http://sphinx-users.jp/event/

Twitter:

#sphinxjp

Page 51: 執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話