SlideShare a Scribd company logo
1 of 62
1
Takayuki Shimizukawa
Sphinx co-maintainer
Sphinx-users.jp
Ahoj, 안녕하세요, Hola, Hello, こんにちは
2
おまえ誰よ
@shimizukawa
1. Sphinx メンテナ
2. Sphinx-users.jp
3. 一般社団法人PyCon JP 理事
 BePROUD co, ltd.
3
今年はスタッフじゃ無いのに間違えられる
4
今日の予定
1. Sphinx紹介 & i18nセットアップ
2. 貢献しやすいドキュメント翻訳
3. Sphinxのi18n機能
4. 翻訳プロセスの自動化と便利なサービス
5. Tips, tricks, traps
5
6
質問1
オープンソースソフトウエア
を使っている方
7
質問2
OSSにコントリビュートし
たことがある方
8
質問3
ドキュメントを
日本語に翻訳することは
他の開発者の助けになる
と思いますか?
9
ドキュメント翻訳の価値
10
翻訳者
プロダクト
作者
翻訳Docs
読者
英語Docs
ツール & サービス
ツール
1. sphinx - ドキュメントジェネレータ
2. sphinx-intl - Sphinx i18n機能の補助ツール
3. transifex-client - Transifexサービスのファイルを送
受信するツール
サービス
1. Transifex - 翻訳サポートサービス
2. Drone.io - 継続的インテグレーションサービス
11
12
Sphinx is 何?
Sphinx はドキュメンテーションジェネレー
タです
SphinxはreSTマークアップから複数の
フォーマットのドキュメントを生成します
13
1. Sphinx紹介 & i18nセットアップ
Sphinx
reSTreSTreStructuredText
(reST) reST Parser
HTML Builder
ePub Builder
LaTeX Builder texlive
HTML
theme
Favorite Editor
Sphinxの歴史 (ショートver.)
14
1. Sphinx紹介 & i18nセットアップ
Sphinxの
父
メンテナンス
が大変
~2007
書きやすく
メンテナンスしやす
い2007~
Sphinx 以前、Sphinx以降
Sphinx以前
 ドキュメントを書く標準的な方法がなかった
 出力フォーマットに合わせて、一度書いたドキュメント
を変換する必要があった
Sphinx以降
 1つのソースから複数フォーマットのドキュメントを生
成
 同梱のHTMLテーマ機能で読みやすいドキュメントを提
供
 APIリファレンスと説明的ドキュメントが同居できる
 自動ビルドとホスティングを提供するReadTheDocsの登 15
1. Sphinx紹介 & i18nセットアップ
Sphinxで書かれたドキュメントの例
 Python ライブラリ/ツール:
Python, Sphinx, Flask, Jinja2, Django,
Pyramid, SQLAlchemy, Numpy, SciPy,
scikit-learn, pandas, fabric, ansible, awscli,
…
 Python以外のライブラリ/ツール:
Chef, CakePHP(2.x), MathJax, Selenium,
Varnish
16
1. Sphinx紹介 & i18nセットアップ
Sphinxで書かれたドキュメントの例
 Python ライブラリ/ツール:
Python, Sphinx, Flask, Jinja2, Django,
Pyramid, SQLAlchemy, Numpy, SciPy,
scikit-learn, pandas, fabric, ansible, awscli,
…
 Python以外のライブラリ/ツール:
Chef, CakePHP(2.x), MathJax, Selenium,
Varnish
17
1. Sphinx紹介 & i18nセットアップ
SPHINX
docutils
HTML Builder HTML theme
(Jinja2)
gettext Builder
*.pot
*.po
I18N
*.mo
OmegaT
Pootle
Transifex
Translation Tools, Services
Favorite Editor
Sphinxのi18n機能 (ビルトイン)
18
1. Sphinx紹介 & i18nセットアップ
reST Parser
(directive / role)
doctree
(Intermediate)
reSTreST
reStructuredText
(reST)
$ pip install sphinx
翻訳サポートツールをインストール
Sphinxと i18nツールのインストール
Sphinx本体をインストール
$ pip install sphinx-intl
$ pip install transifex-client=0.8
19
1. Sphinx紹介 & i18nセットアップ
$ git clone https://github.com/shimizukawa/deepthought.git
$ cd deepthought/doc
$ make html
...
Build finished. The HTML pages are in _build/html.
"make html" コマンドで
_build/html ディレクト
リ以下にhtmlファイル
が生成されます
最初のmake html
20
1. Sphinx紹介 & i18nセットアップ
ファイルの一覧と & conf.pyの設定
$ tree /path/to/deepthought
+- deep_thought
| +- __init__.py
| +- api.py
| +- calc.py
| +- utils.py
+- doc
| +- _build/
| | +- html/
| +- _static/
| +- _template/
| +- conf.py
| +- index.py
| +- make.bat
| +- Makefile
+- setup.py
21
1. Sphinx紹介 & i18nセットアップ
ドキュメントソース
Document build output
Target library for doc1. ...
2.
3. language = 'ja'
4. locale_dirs = ['locale']
5.
doc/conf.py
22
多言語化
internationalization
23
2.貢献しやすいドキュメント翻訳
I18N
貢献しやすいって
どういう状況?
24
2.貢献しやすいドキュメント翻訳
翻訳しにくい例 (1/3)
マニュアルがHTMLファイルでのみ
提供されている
HTMLファイルを書き換える?
25
2.貢献しやすいドキュメント翻訳
翻訳しにくい例 (2/3)
マニュアルがreSTファイルやソース
コード内のdocstringから生成されてい
る
 reSTファイルを書き換える?
 ソース内のdocstrinsを書き換える?
26
2.貢献しやすいドキュメント翻訳
翻訳しにくい例 (3/3)
翻訳対象がgitで管理されている
 gitを学ぶ
 GitHubを学ぶ
 "git clone" してソースコードを取得する
 翻訳 (これ!これやりたかった!)
 "git commit"
 "git pull"
 時々競合が発生して解決しないといけない
 "git push"
27
2.貢献しやすいドキュメント翻訳
めんどう vs かんたん
めんどう かんたん
1. gitを学ぶ
2. GitHubを学ぶ
3. "git clone"
4. 翻訳
5. "git commit" / "git push"
6. "git pull"
7. 時々競合解決
8. HTMLを自分でビルド
1. git 使わない
2. Github 使わない
3. file 触らない
4. 翻訳
5. 翻訳は自動更新
6. 競合しない
7. 自分でビルドしなくて
もHTMLをゲット
28
2.貢献しやすいドキュメント翻訳
29
2つのi18n機能
 pot ファイルの生成:
reSTから
 po ファイルの読み込み:
翻訳済みHTMLを生成するため
30
3. Sphinxのi18n機能
reST pot
reST
html
po
翻訳の流れ
 potを生成
 potをpoに翻訳
 翻訳済みHTMLを生成
31
3. Sphinxのi18n機能
reST pot
reST
html
po
pot po
Translator
翻訳して~
翻訳した!
協力ありがとう!
#: ../../../deep_thought/utils.py:docstring of
deep_thought.utils.dumps:1
msgid "Serialize ``obj`` to a JSON formatted :class:`str`."
msgstr ""
msgid "For example:"
msgstr ""
32
pot ファイル生成
3. Sphinxのi18n機能
$ make gettext
...
Build finished. The message catalogs are in _build/gettext.
$ ls _build/gettext
api.pot examples.pot generated.pot index.pot
generated.pot
reST pot
翻訳前にpoファイルを準備
doc
+- _build/
| +- gettext/
| +- api.pot
| +- examples.pot
| +- generated.pot
| +- index.pot
+- locale/
doc
+- _build/
+- locale/
+- ja/
| +- LC_MESSAGES/
| +- api.po
| +- examples.po
| +- generated.po
| +- index.po
+- zh_cn/
これらを翻訳
翻訳者
pot po
33
3. Sphinxのi18n機能
34
翻訳前にpoファイルを準備
$ sphinx-intl update -p _build/gettext -l zh_cn
Create: locale/zh_cn/LC_MESSAGES/api.po
Create: locale/zh_cn/LC_MESSAGES/examples.po
Create: locale/zh_cn/LC_MESSAGES/generated.po
Create: locale/zh_cn/LC_MESSAGES/index.po
sphinx-intl コマンドで「名前を変えてコピー」
pot po
sphinx-intl
$ make gettext
$ sphinx-intl update -p _build/gettext -l zh_cn
Not Changed: locale/zh_cn/LC_MESSAGES/api.po
Updated: locale/zh_cn/LC_MESSAGES/examples.po +3, -1
ドキュメントが更新されたら、同じコマンドでpoを更新
3. Sphinxのi18n機能
po ファイルを翻訳
#: ../../../deep_thought/utils.py:docstring of
deep_thought.utils.dumps:1
msgid "Serialize ``obj`` to a JSON formatted :class:`str`."
msgstr ""
generated.po
pot po
sphinx-intl
翻訳者
#: ../../../deep_thought/utils.py:docstring of
deep_thought.utils.dumps:1
msgid "Serialize ``obj`` to a JSON formatted :class:`str`."
msgstr "``obj`` をJSONフォーマットした :class:`str` にシリアライズ。
"
generated.po
Vim, Emacs, OmegaT, ... 等を使って翻訳
35
3. Sphinxのi18n機能
po ファイルを読み込み
36
3. Sphinxのi18n機能
reST
html
po
翻訳済み
$ make html
...
Build finished. The HTML pages are in _build/html.
全体の流れ
37
3. Sphinxのi18n機能
reST pot
html
po
make gettext
sphinx-intl
翻訳者
make html
ドキュメント作者
翻訳カタログ
翻訳済み
カタログ
38
Sphinxドキュメント翻訳プロセス全体像
39
4.翻訳プロセスの自動化と便利なサービス
reST pot
html
po
make gettext
sphinx-intl
make html
ドキュメント作者
翻訳カタログ
翻訳済カタログ
翻訳者
翻訳者
翻訳者
作者 / 翻訳者
アップロード
翻訳者
clone
翻訳者
自動化したい2つの部分
40
4.翻訳プロセスの自動化と便利なサービス
reST pot
html
po
make gettext
sphinx-intl
make html
ドキュメント作者
翻訳カタログ
翻訳済カタログ
アップロード
翻訳者
自動化したい
並列化
したい
clone
翻訳ツールの種類
 Vim / Emacs (エディタ)
 ローカルファイルの編集
 いくつかの翻訳サポートプラグイン
 OmegaT (翻訳ツール)
 ローカルファイルの編集
 いくつかの翻訳サポート機能
 Transifex (サービス)
 オンライン編集
 いくつかの翻訳サポート
機能
41
4.翻訳プロセスの自動化と便利なサービス
po
翻訳者
並列化
したい
Transifexを用いた並列化
Transifexが提供する機能
APIとして:
アップロード pot
ダウンロード po
Webコンソールとして:
用語集
翻訳メモリ
レコメンド
機械翻訳
42
4.翻訳プロセスの自動化と便利なサービス
po
翻訳者
並列化
pot
アップロード
pot
自動反映
sphinx-intl
transifex-client
po transifex-client
ダウンロード
Transifex Webコンソールで翻訳
43
4.翻訳プロセスの自動化と便利なサービス
原文
翻訳文(reST文法を
壊さないように!)
翻訳メモリ (TM) からの
レコメンド
原文
(pot)
翻訳
(po)
原文を翻訳文にコピー
機械翻訳
保存
レビュー (必要なら)
翻訳者
並列化
1
2
4
3
5
6
自動化したい2つの部分
44
4.翻訳プロセスの自動化と便利なサービス
po
翻訳者
並列化
pot
アップロード
pot
自動更新
sphinx-intl
transifex-client
po transifex-client
ダウンロード
reST
html
make gettext
make html
ドキュメント作者
アップロード
自動化したい
clone
全体の処理を自動化したい
45
4.翻訳プロセスの自動化と便利なサービス
pot
アップロード
sphinx-intl
transifex-client
po transifex-client
ダウンロード
reST
html
make gettext
make htmlアップロード
clone
1
2 3
45
6
自動化したい
自動化の手順
1. リポジトリをclone
2. "make gettext"
3. アップロード pot
4. ダウンロード po
5. "make html"
6. アップロード html
46
4.翻訳プロセスの自動化と便利なサービス
pot
アップロード
sphinx-intl
transifex-client
po
transifex-client
ダウンロード
reST
html
make gettext
make html
アップロード
clone
1
2 3
45
6
自動化した
い
1. pip install sphinx sphinx-intl transifex-client==0.8
2. git clone https://github.com/shimizukawa/deepthought.git
3. cd deepthought/doc
4. sphinx-intl create-transifexrc # create ~/.transifexrc
5. sphinx-intl create-txconfig # create .tx/config
6. make gettext
7. sphinx-intl -p _build/gettext update-txconfig-resources
# update .tx/config
8. tx push -s # push pot files to transifex
9. tx pull -l ja # pull po files from transifex
10. make html SPHINXOPTS="-D language=ja"
自動化のためのシェルコマンド
run.sh
$ export SPHINXINTL_TRANSIFEX_USERNAME=mice
$ export SPHINXINTL_TRANSIFEX_PASSWORD=42
$ export SPHINXINTL_TRANSIFEX_PROJECT_NAME=deepthought-0_7
$ export SPHINXINTL_POT_DIR=_build/gettext
$ run.sh
47
4.翻訳プロセスの自動化と便利なサービス
drone.ioによる自動化
48
WebHook
デプロイ
リポジトリClone
シェルスクリプト実行
drone.io は継続的インテグレーションサービス
4.翻訳プロセスの自動化と便利なサービス
GitHub + drone.io + S3
49
GitHub
Amazon S3
Transifex 1. リポジトリClone
2. make gettext
3. アップロード pot
4. ダウンロード po
5. make html
6. アップロード html
4.翻訳プロセスの自動化と便利なサービス
2
1
3
1
Drone.ioによる自動化
50
pot
アップロード sphinx-intl
transifex-client
po
transifex-client
Download
reST
html
make gettext
make html
アップロード
clone
1
2 3
45
6
To Be
Automated
アップロード
pot
ダウンロード
po
アップロード
html
WebHook
clone
1
5
6 make html
make gettext2
3
4
1
WebHook
自動化
4.翻訳プロセスの自動化と便利なサービス
Drone.ioによる自動化
51
アップロード
pot
ダウンロード
po
アップロード
html
WebHook
clone
1
5
6
make html
make gettext2
3
4
1
WebHook
自動化
4.翻訳プロセスの自動化と便利なサービス
ドキュメント作者の視点
 ドキュメント作者は、面倒な手間をかけずに、翻訳原文
の更新やサイトの閲覧ができる
翻訳原文の更新
ドキュメント作者
通知
閲覧
Commit
52
4.翻訳プロセスの自動化と便利なサービス
翻訳者の視点
 No git
 No file
 No conflict
 自動的に更新
 手動ビルドせずに翻訳されたHTMLを閲覧できる
翻訳者
並列化
閲覧
翻訳
翻訳されたHTML
53
4.翻訳プロセスの自動化と便利なサービス
自動化された全プロセス
54
アップデート
翻訳カタログ
ドキュメント作者
翻訳者
並列化
通知
閲覧
閲覧
更新
翻訳
Commit
ダウンロード
Translations
通知
Automated
4.翻訳プロセスの自動化と便利なサービス
まとめ
ツール
1. sphinx - ドキュメントジェネレータ
2. sphinx-intl - Sphinx i18n機能の補助ツール
3. transifex-client - Transifexサービスのファイルを送
受信するツール
サービス
1. Transifex - 翻訳サポートサービス
2. Drone.io - 継続的インテグレーションサービス
55
4.翻訳プロセスの自動化と便利なサービス
56
TIP: Drone.io の15分制限
 Drone.io はビルド1回の時間を15分に制限している
 パッケージのインストールをwheelで行い時間短縮
57
5. Tips, tricks, traps
1. curl -L -s https://example.com/wheelhouse.tgz | tar vzxf -
2. export PIP_FIND_LINKS=./wheelhouse
3. pip install sphinx sphinx-intl transifex-client==0.8
run.sh
ex. https://bitbucket.org/sphinxjp/docutils-translation/
TRAP: transifex-clientのバージョン
 transifex-client 0.11b3は安定してない(と思
う)
 特にWindowsユーザーにとって
 もし最新版でうまくいかない場合は、以下
のようにバージョン指定してみてください:
58
5. Tips, tricks, traps
$ pip install "transifex-client=0.8"
 Drone.io はGithubか
Bitbucketの管理権限の
あるリポジトリ用のプ
ロジェクトしか作れな
い
 Github等に空リポジト
リを用意してDrone.ioプ
ロジェクトを作成し、
そのWebHook URLを対
象リポジトリの管理者
に設定してもらおう 59
TRICK: Drone.io プロジェクトの用意
5. Tips, tricks, traps
利用事例
 Sphinx-1.3 doc for "ja" translation
https://drone.io/bitbucket.org/shimizukawa/sphinx-doc13/admin
 Sphinx-1.4 doc for "ja" translation
https://drone.io/bitbucket.org/shimizukawa/sphinx-doc14/admin
 Docutils doc for "ja" translation
https://drone.io/bitbucket.org/sphinxjp/docutils-translation/admin
60
5. Tips, tricks, traps
Questions?
@shimizukawa
いつでもつかまえてね :)
OpenSpace, Party, Poster, Sprint
61
Thanks :)
62

More Related Content

What's hot

つたわるスライド
つたわるスライドつたわるスライド
つたわるスライドKazuyoshi Goto
 
TDD のこころ
TDD のこころTDD のこころ
TDD のこころTakuto Wada
 
30分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.230分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.2uchan_nos
 
ビビッド・パワポ・オペーレーション Revision 2015
ビビッド・パワポ・オペーレーション Revision 2015ビビッド・パワポ・オペーレーション Revision 2015
ビビッド・パワポ・オペーレーション Revision 2015Masahito Zembutsu
 
Power BI Desktop こんな使い方してみた件
Power BI Desktop こんな使い方してみた件Power BI Desktop こんな使い方してみた件
Power BI Desktop こんな使い方してみた件Teruchika Yamada
 
RFC6241(Network Configuration Protocol (NETCONF))の勉強資料
RFC6241(Network Configuration Protocol (NETCONF))の勉強資料RFC6241(Network Configuration Protocol (NETCONF))の勉強資料
RFC6241(Network Configuration Protocol (NETCONF))の勉強資料Tetsuya Hasegawa
 
Unicode文字列処理
Unicode文字列処理Unicode文字列処理
Unicode文字列処理信之 岩永
 
30分で理解するLet's Encryptの仕組みとSSL証明書の使い方
30分で理解するLet's Encryptの仕組みとSSL証明書の使い方30分で理解するLet's Encryptの仕組みとSSL証明書の使い方
30分で理解するLet's Encryptの仕組みとSSL証明書の使い方法林浩之
 
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022Takayuki Shimizukawa
 
Git超入門_座学編.pdf
Git超入門_座学編.pdfGit超入門_座学編.pdf
Git超入門_座学編.pdf憲昭 村田
 
ITエンジニアのための英語勉強法
ITエンジニアのための英語勉強法ITエンジニアのための英語勉強法
ITエンジニアのための英語勉強法Etsuji Nakai
 
HowToDevelopATeamGrowsByThemselves_SCF_OSaka2022.pdf
HowToDevelopATeamGrowsByThemselves_SCF_OSaka2022.pdfHowToDevelopATeamGrowsByThemselves_SCF_OSaka2022.pdf
HowToDevelopATeamGrowsByThemselves_SCF_OSaka2022.pdfKei Nakahara
 
スクレイピングとPython
スクレイピングとPythonスクレイピングとPython
スクレイピングとPythonHironori Sekine
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門Hideyuki Tanaka
 
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」Yoshiki Shibukawa
 
ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』Yoshitaka Kawashima
 

What's hot (20)

つたわるスライド
つたわるスライドつたわるスライド
つたわるスライド
 
TDD のこころ
TDD のこころTDD のこころ
TDD のこころ
 
30分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.230分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.2
 
ビビッド・パワポ・オペーレーション Revision 2015
ビビッド・パワポ・オペーレーション Revision 2015ビビッド・パワポ・オペーレーション Revision 2015
ビビッド・パワポ・オペーレーション Revision 2015
 
Power BI Desktop こんな使い方してみた件
Power BI Desktop こんな使い方してみた件Power BI Desktop こんな使い方してみた件
Power BI Desktop こんな使い方してみた件
 
RFC6241(Network Configuration Protocol (NETCONF))の勉強資料
RFC6241(Network Configuration Protocol (NETCONF))の勉強資料RFC6241(Network Configuration Protocol (NETCONF))の勉強資料
RFC6241(Network Configuration Protocol (NETCONF))の勉強資料
 
Unicode文字列処理
Unicode文字列処理Unicode文字列処理
Unicode文字列処理
 
30分で理解するLet's Encryptの仕組みとSSL証明書の使い方
30分で理解するLet's Encryptの仕組みとSSL証明書の使い方30分で理解するLet's Encryptの仕組みとSSL証明書の使い方
30分で理解するLet's Encryptの仕組みとSSL証明書の使い方
 
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
 
Git超入門_座学編.pdf
Git超入門_座学編.pdfGit超入門_座学編.pdf
Git超入門_座学編.pdf
 
JSF++って何
JSF++って何JSF++って何
JSF++って何
 
ITエンジニアのための英語勉強法
ITエンジニアのための英語勉強法ITエンジニアのための英語勉強法
ITエンジニアのための英語勉強法
 
HowToDevelopATeamGrowsByThemselves_SCF_OSaka2022.pdf
HowToDevelopATeamGrowsByThemselves_SCF_OSaka2022.pdfHowToDevelopATeamGrowsByThemselves_SCF_OSaka2022.pdf
HowToDevelopATeamGrowsByThemselves_SCF_OSaka2022.pdf
 
スクレイピングとPython
スクレイピングとPythonスクレイピングとPython
スクレイピングとPython
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
 
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
 
ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』
 
Confluence と SharePoint 何が違う?
Confluence と SharePoint 何が違う?Confluence と SharePoint 何が違う?
Confluence と SharePoint 何が違う?
 
Digitaltransformation Journey
Digitaltransformation JourneyDigitaltransformation Journey
Digitaltransformation Journey
 
C#で速度を極めるいろは
C#で速度を極めるいろはC#で速度を極めるいろは
C#で速度を極めるいろは
 

Viewers also liked

世界のSphinx事情 @ SphinxCon JP 2015
世界のSphinx事情 @ SphinxCon JP 2015世界のSphinx事情 @ SphinxCon JP 2015
世界のSphinx事情 @ SphinxCon JP 2015Takayuki Shimizukawa
 
Easy contributable internationalization process with Sphinx @ PyCon APAC 2016
Easy contributable internationalization process with Sphinx @ PyCon APAC 2016Easy contributable internationalization process with Sphinx @ PyCon APAC 2016
Easy contributable internationalization process with Sphinx @ PyCon APAC 2016Takayuki Shimizukawa
 
素振りのススメ at Python入門者の集い
素振りのススメ at Python入門者の集い素振りのススメ at Python入門者の集い
素振りのススメ at Python入門者の集いTakayuki Shimizukawa
 
JUS関西 Sphinxワークショップ@関西 Sphinx紹介
JUS関西 Sphinxワークショップ@関西 Sphinx紹介JUS関西 Sphinxワークショップ@関西 Sphinx紹介
JUS関西 Sphinxワークショップ@関西 Sphinx紹介Takayuki Shimizukawa
 
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016Takayuki Shimizukawa
 
Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?Takayuki Shimizukawa
 

Viewers also liked (6)

世界のSphinx事情 @ SphinxCon JP 2015
世界のSphinx事情 @ SphinxCon JP 2015世界のSphinx事情 @ SphinxCon JP 2015
世界のSphinx事情 @ SphinxCon JP 2015
 
Easy contributable internationalization process with Sphinx @ PyCon APAC 2016
Easy contributable internationalization process with Sphinx @ PyCon APAC 2016Easy contributable internationalization process with Sphinx @ PyCon APAC 2016
Easy contributable internationalization process with Sphinx @ PyCon APAC 2016
 
素振りのススメ at Python入門者の集い
素振りのススメ at Python入門者の集い素振りのススメ at Python入門者の集い
素振りのススメ at Python入門者の集い
 
JUS関西 Sphinxワークショップ@関西 Sphinx紹介
JUS関西 Sphinxワークショップ@関西 Sphinx紹介JUS関西 Sphinxワークショップ@関西 Sphinx紹介
JUS関西 Sphinxワークショップ@関西 Sphinx紹介
 
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016仕事で使うちょっとしたコードをOSSとして開発メンテしていく- Django Redshift Backend の開発 - PyCon JP 2016
仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発 - PyCon JP 2016
 
Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?Pythonはどうやってlen関数で長さを手にいれているの?
Pythonはどうやってlen関数で長さを手にいれているの?
 

Similar to Sphinxで作る貢献しやすい ドキュメント翻訳の仕組み

ドキュメントの継続的改善―Sphinxを使いながら
ドキュメントの継続的改善―Sphinxを使いながらドキュメントの継続的改善―Sphinxを使いながら
ドキュメントの継続的改善―Sphinxを使いながらsoishino
 
Sphinx ではじめるドキュメント生活 2013 #sphinxconjp
Sphinx ではじめるドキュメント生活 2013 #sphinxconjpSphinx ではじめるドキュメント生活 2013 #sphinxconjp
Sphinx ではじめるドキュメント生活 2013 #sphinxconjpTakeshi Komiya
 
Confluence と DITA による Webマニュアル作成フロー
Confluence と DITA によるWebマニュアル作成フローConfluence と DITA によるWebマニュアル作成フロー
Confluence と DITA による Webマニュアル作成フローTakashi Yamaguchi
 
Python界隈の翻訳プロジェクト
Python界隈の翻訳プロジェクトPython界隈の翻訳プロジェクト
Python界隈の翻訳プロジェクトTetsuya Morimoto
 
20160730 fluentd meetup in matsue slide
20160730 fluentd meetup in matsue slide20160730 fluentd meetup in matsue slide
20160730 fluentd meetup in matsue slidecosmo0920
 
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjpSphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjpTakeshi Komiya
 
Sphinx拡張 探訪 2014 #sphinxjp
Sphinx拡張 探訪 2014 #sphinxjpSphinx拡張 探訪 2014 #sphinxjp
Sphinx拡張 探訪 2014 #sphinxjpTakeshi Komiya
 
執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話
執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話
執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話Takayuki Shimizukawa
 
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会Takayuki Shimizukawa
 
Sphinxの使い方事例
Sphinxの使い方事例Sphinxの使い方事例
Sphinxの使い方事例Go Yamada
 
基礎教養としてのUbuntuサーバ_後編.pptx
基礎教養としてのUbuntuサーバ_後編.pptx基礎教養としてのUbuntuサーバ_後編.pptx
基礎教養としてのUbuntuサーバ_後編.pptxYuji Naito
 
WordPress サイト制作におけるデプロイメントを考える ~Git とデプロイメントサービスの活用~
WordPress サイト制作におけるデプロイメントを考える ~Git とデプロイメントサービスの活用~WordPress サイト制作におけるデプロイメントを考える ~Git とデプロイメントサービスの活用~
WordPress サイト制作におけるデプロイメントを考える ~Git とデプロイメントサービスの活用~Toru Miki
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力ThinReports
 
テクてく Lotus 技術者夜会 03/16 Lotus Notes/Domino Upgrade Pack とは
テクてく Lotus 技術者夜会 03/16 Lotus Notes/Domino Upgrade Pack とはテクてく Lotus 技術者夜会 03/16 Lotus Notes/Domino Upgrade Pack とは
テクてく Lotus 技術者夜会 03/16 Lotus Notes/Domino Upgrade Pack とはHiroaki Komine
 
MakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発をMakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発をAtsuhiro Kubo
 
Cat tool overview for CEDEC2011 Draft
Cat tool overview for CEDEC2011 DraftCat tool overview for CEDEC2011 Draft
Cat tool overview for CEDEC2011 DraftSelf Employed
 
OSS開発勉強会-01B
OSS開発勉強会-01BOSS開発勉強会-01B
OSS開発勉強会-01BKohei KaiGai
 
ソフトウェア工学2023 13 ドキュメンテーション
ソフトウェア工学2023 13 ドキュメンテーションソフトウェア工学2023 13 ドキュメンテーション
ソフトウェア工学2023 13 ドキュメンテーションToru Tamaki
 
Stack Overflow+英文読む時、便利なツール
Stack Overflow+英文読む時、便利なツールStack Overflow+英文読む時、便利なツール
Stack Overflow+英文読む時、便利なツールishiki-takai
 

Similar to Sphinxで作る貢献しやすい ドキュメント翻訳の仕組み (20)

ドキュメントの継続的改善―Sphinxを使いながら
ドキュメントの継続的改善―Sphinxを使いながらドキュメントの継続的改善―Sphinxを使いながら
ドキュメントの継続的改善―Sphinxを使いながら
 
Sphinx ではじめるドキュメント生活 2013 #sphinxconjp
Sphinx ではじめるドキュメント生活 2013 #sphinxconjpSphinx ではじめるドキュメント生活 2013 #sphinxconjp
Sphinx ではじめるドキュメント生活 2013 #sphinxconjp
 
Confluence と DITA による Webマニュアル作成フロー
Confluence と DITA によるWebマニュアル作成フローConfluence と DITA によるWebマニュアル作成フロー
Confluence と DITA による Webマニュアル作成フロー
 
Python界隈の翻訳プロジェクト
Python界隈の翻訳プロジェクトPython界隈の翻訳プロジェクト
Python界隈の翻訳プロジェクト
 
20160730 fluentd meetup in matsue slide
20160730 fluentd meetup in matsue slide20160730 fluentd meetup in matsue slide
20160730 fluentd meetup in matsue slide
 
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjpSphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp
Sphinx ではじめるドキュメント生活 2012 #pyconjp #sphinxconjp
 
Sphinx拡張 探訪 2014 #sphinxjp
Sphinx拡張 探訪 2014 #sphinxjpSphinx拡張 探訪 2014 #sphinxjp
Sphinx拡張 探訪 2014 #sphinxjp
 
執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話
執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話
執筆中のPythonプロフェッショナルプログラミング第2版でsphinxを使っている話
 
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
 
Sphinxの使い方事例
Sphinxの使い方事例Sphinxの使い方事例
Sphinxの使い方事例
 
基礎教養としてのUbuntuサーバ_後編.pptx
基礎教養としてのUbuntuサーバ_後編.pptx基礎教養としてのUbuntuサーバ_後編.pptx
基礎教養としてのUbuntuサーバ_後編.pptx
 
最新UE4タイトルでのローカライズ事例 (UE4 Localization Deep Dive)
最新UE4タイトルでのローカライズ事例 (UE4 Localization Deep Dive)最新UE4タイトルでのローカライズ事例 (UE4 Localization Deep Dive)
最新UE4タイトルでのローカライズ事例 (UE4 Localization Deep Dive)
 
WordPress サイト制作におけるデプロイメントを考える ~Git とデプロイメントサービスの活用~
WordPress サイト制作におけるデプロイメントを考える ~Git とデプロイメントサービスの活用~WordPress サイト制作におけるデプロイメントを考える ~Git とデプロイメントサービスの活用~
WordPress サイト制作におけるデプロイメントを考える ~Git とデプロイメントサービスの活用~
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
 
テクてく Lotus 技術者夜会 03/16 Lotus Notes/Domino Upgrade Pack とは
テクてく Lotus 技術者夜会 03/16 Lotus Notes/Domino Upgrade Pack とはテクてく Lotus 技術者夜会 03/16 Lotus Notes/Domino Upgrade Pack とは
テクてく Lotus 技術者夜会 03/16 Lotus Notes/Domino Upgrade Pack とは
 
MakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発をMakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発を
 
Cat tool overview for CEDEC2011 Draft
Cat tool overview for CEDEC2011 DraftCat tool overview for CEDEC2011 Draft
Cat tool overview for CEDEC2011 Draft
 
OSS開発勉強会-01B
OSS開発勉強会-01BOSS開発勉強会-01B
OSS開発勉強会-01B
 
ソフトウェア工学2023 13 ドキュメンテーション
ソフトウェア工学2023 13 ドキュメンテーションソフトウェア工学2023 13 ドキュメンテーション
ソフトウェア工学2023 13 ドキュメンテーション
 
Stack Overflow+英文読む時、便利なツール
Stack Overflow+英文読む時、便利なツールStack Overflow+英文読む時、便利なツール
Stack Overflow+英文読む時、便利なツール
 

More from Takayuki Shimizukawa

Navigating Python: Milestones from Essential Reads
Navigating Python: Milestones from Essential ReadsNavigating Python: Milestones from Essential Reads
Navigating Python: Milestones from Essential ReadsTakayuki Shimizukawa
 
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けようDjango ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けようTakayuki Shimizukawa
 
プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022
プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022
プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022Takayuki Shimizukawa
 
Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略Takayuki Shimizukawa
 
『自走プログラマー』 が我々に必要だった理由
『自走プログラマー』 が我々に必要だった理由『自走プログラマー』 が我々に必要だった理由
『自走プログラマー』 が我々に必要だった理由Takayuki Shimizukawa
 
エキスパートPythonプログラミング改訂3版の読みどころ
エキスパートPythonプログラミング改訂3版の読みどころエキスパートPythonプログラミング改訂3版の読みどころ
エキスパートPythonプログラミング改訂3版の読みどころTakayuki Shimizukawa
 
RLSを用いたマルチテナント実装 for Django
RLSを用いたマルチテナント実装 for DjangoRLSを用いたマルチテナント実装 for Django
RLSを用いたマルチテナント実装 for DjangoTakayuki Shimizukawa
 
独学プログラマーのその後
独学プログラマーのその後独学プログラマーのその後
独学プログラマーのその後Takayuki Shimizukawa
 
【修正版】Django + SQLAlchemy: シンプルWay
【修正版】Django + SQLAlchemy: シンプルWay【修正版】Django + SQLAlchemy: シンプルWay
【修正版】Django + SQLAlchemy: シンプルWayTakayuki Shimizukawa
 
Sphinx customization for OGP support at SphinxCon JP 2018
Sphinx customization for OGP support at SphinxCon JP 2018Sphinx customization for OGP support at SphinxCon JP 2018
Sphinx customization for OGP support at SphinxCon JP 2018Takayuki Shimizukawa
 
Sphinx autodoc - automated api documentation - PyCon.KR 2015
Sphinx autodoc - automated api documentation - PyCon.KR 2015Sphinx autodoc - automated api documentation - PyCon.KR 2015
Sphinx autodoc - automated api documentation - PyCon.KR 2015Takayuki Shimizukawa
 
Easy contributable internationalization process with Sphinx @ pyconmy2015
Easy contributable internationalization process with Sphinx @ pyconmy2015Easy contributable internationalization process with Sphinx @ pyconmy2015
Easy contributable internationalization process with Sphinx @ pyconmy2015Takayuki Shimizukawa
 
Sphinx autodoc - automated api documentation - PyCon.MY 2015
Sphinx autodoc - automated api documentation - PyCon.MY 2015Sphinx autodoc - automated api documentation - PyCon.MY 2015
Sphinx autodoc - automated api documentation - PyCon.MY 2015Takayuki Shimizukawa
 
Sphinx autodoc - automated API documentation (EuroPython 2015 in Bilbao)
Sphinx autodoc - automated API documentation (EuroPython 2015 in Bilbao)Sphinx autodoc - automated API documentation (EuroPython 2015 in Bilbao)
Sphinx autodoc - automated API documentation (EuroPython 2015 in Bilbao)Takayuki Shimizukawa
 
Easy contributable internationalization process with Sphinx @ pyconsg2015
Easy contributable internationalization process with Sphinx @ pyconsg2015Easy contributable internationalization process with Sphinx @ pyconsg2015
Easy contributable internationalization process with Sphinx @ pyconsg2015Takayuki Shimizukawa
 
Sphinx autodoc - automated API documentation (PyCon APAC 2015 in Taiwan)
Sphinx autodoc - automated API documentation (PyCon APAC 2015 in Taiwan)Sphinx autodoc - automated API documentation (PyCon APAC 2015 in Taiwan)
Sphinx autodoc - automated API documentation (PyCon APAC 2015 in Taiwan)Takayuki Shimizukawa
 
Easy contributable internationalization process with Sphinx (PyCon APAC 2015 ...
Easy contributable internationalization process with Sphinx (PyCon APAC 2015 ...Easy contributable internationalization process with Sphinx (PyCon APAC 2015 ...
Easy contributable internationalization process with Sphinx (PyCon APAC 2015 ...Takayuki Shimizukawa
 
PyPro2の読みどころ紹介:Python開発の過去と現在 - BPStudy93
PyPro2の読みどころ紹介:Python開発の過去と現在 - BPStudy93PyPro2の読みどころ紹介:Python開発の過去と現在 - BPStudy93
PyPro2の読みどころ紹介:Python開発の過去と現在 - BPStudy93Takayuki Shimizukawa
 
Pythonコミュニティ-紹介 @ LOCAL 2015
Pythonコミュニティ-紹介 @ LOCAL 2015Pythonコミュニティ-紹介 @ LOCAL 2015
Pythonコミュニティ-紹介 @ LOCAL 2015Takayuki Shimizukawa
 

More from Takayuki Shimizukawa (20)

Navigating Python: Milestones from Essential Reads
Navigating Python: Milestones from Essential ReadsNavigating Python: Milestones from Essential Reads
Navigating Python: Milestones from Essential Reads
 
IKEv2-VPN PyHackCon2023
IKEv2-VPN PyHackCon2023IKEv2-VPN PyHackCon2023
IKEv2-VPN PyHackCon2023
 
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けようDjango ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
 
プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022
プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022
プログラマーとの出会い - Hello, Programmer! at PyCon Kyushu 2022
 
Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略Webアプリを並行開発する際のマイグレーション戦略
Webアプリを並行開発する際のマイグレーション戦略
 
『自走プログラマー』 が我々に必要だった理由
『自走プログラマー』 が我々に必要だった理由『自走プログラマー』 が我々に必要だった理由
『自走プログラマー』 が我々に必要だった理由
 
エキスパートPythonプログラミング改訂3版の読みどころ
エキスパートPythonプログラミング改訂3版の読みどころエキスパートPythonプログラミング改訂3版の読みどころ
エキスパートPythonプログラミング改訂3版の読みどころ
 
RLSを用いたマルチテナント実装 for Django
RLSを用いたマルチテナント実装 for DjangoRLSを用いたマルチテナント実装 for Django
RLSを用いたマルチテナント実装 for Django
 
独学プログラマーのその後
独学プログラマーのその後独学プログラマーのその後
独学プログラマーのその後
 
【修正版】Django + SQLAlchemy: シンプルWay
【修正版】Django + SQLAlchemy: シンプルWay【修正版】Django + SQLAlchemy: シンプルWay
【修正版】Django + SQLAlchemy: シンプルWay
 
Sphinx customization for OGP support at SphinxCon JP 2018
Sphinx customization for OGP support at SphinxCon JP 2018Sphinx customization for OGP support at SphinxCon JP 2018
Sphinx customization for OGP support at SphinxCon JP 2018
 
Sphinx autodoc - automated api documentation - PyCon.KR 2015
Sphinx autodoc - automated api documentation - PyCon.KR 2015Sphinx autodoc - automated api documentation - PyCon.KR 2015
Sphinx autodoc - automated api documentation - PyCon.KR 2015
 
Easy contributable internationalization process with Sphinx @ pyconmy2015
Easy contributable internationalization process with Sphinx @ pyconmy2015Easy contributable internationalization process with Sphinx @ pyconmy2015
Easy contributable internationalization process with Sphinx @ pyconmy2015
 
Sphinx autodoc - automated api documentation - PyCon.MY 2015
Sphinx autodoc - automated api documentation - PyCon.MY 2015Sphinx autodoc - automated api documentation - PyCon.MY 2015
Sphinx autodoc - automated api documentation - PyCon.MY 2015
 
Sphinx autodoc - automated API documentation (EuroPython 2015 in Bilbao)
Sphinx autodoc - automated API documentation (EuroPython 2015 in Bilbao)Sphinx autodoc - automated API documentation (EuroPython 2015 in Bilbao)
Sphinx autodoc - automated API documentation (EuroPython 2015 in Bilbao)
 
Easy contributable internationalization process with Sphinx @ pyconsg2015
Easy contributable internationalization process with Sphinx @ pyconsg2015Easy contributable internationalization process with Sphinx @ pyconsg2015
Easy contributable internationalization process with Sphinx @ pyconsg2015
 
Sphinx autodoc - automated API documentation (PyCon APAC 2015 in Taiwan)
Sphinx autodoc - automated API documentation (PyCon APAC 2015 in Taiwan)Sphinx autodoc - automated API documentation (PyCon APAC 2015 in Taiwan)
Sphinx autodoc - automated API documentation (PyCon APAC 2015 in Taiwan)
 
Easy contributable internationalization process with Sphinx (PyCon APAC 2015 ...
Easy contributable internationalization process with Sphinx (PyCon APAC 2015 ...Easy contributable internationalization process with Sphinx (PyCon APAC 2015 ...
Easy contributable internationalization process with Sphinx (PyCon APAC 2015 ...
 
PyPro2の読みどころ紹介:Python開発の過去と現在 - BPStudy93
PyPro2の読みどころ紹介:Python開発の過去と現在 - BPStudy93PyPro2の読みどころ紹介:Python開発の過去と現在 - BPStudy93
PyPro2の読みどころ紹介:Python開発の過去と現在 - BPStudy93
 
Pythonコミュニティ-紹介 @ LOCAL 2015
Pythonコミュニティ-紹介 @ LOCAL 2015Pythonコミュニティ-紹介 @ LOCAL 2015
Pythonコミュニティ-紹介 @ LOCAL 2015
 

Sphinxで作る貢献しやすい ドキュメント翻訳の仕組み

Editor's Notes

  1. (ここの文字サイズ大きくする、マウスをレーザーポインタにする) こんにちは、今日は私のセッションに来ていただいてありがとうございます。 このセッションでは「~」を紹介したいと思います。
  2. 伝統の「おまえ誰よ」から。 清水川です。 オープンソースで3つの活動をしています。 1. Sphinx co-maintainer since the end of 2011. 2. organize Sphinx-users.jp users group in Japan. 3. member of PyCon JP Committee. BePROUDで働いています。 弊社では、主にDjangoやPyramidなどを使ってWebアプリケーション開発を行っています。 最近、Pythonトレーニング事業、Python技術サポート事業も始めました。 自宅勤務が週5日までOK、スタンディングデスクあり、ラジオ体操ありの会社です。
  3. 本題に入る前に。質問があります。
  4. どのくらいの人がオープンソースソフトウエアを使っていますか? -> 10, 20, ... ありがとうございます。 A-> 明らかにほとんどの人がOSS使ってるようですね。 B-> あれ、意外と少ないですね。半分くらいでしょうか。
  5. 次の質問です。 自分はOSSに貢献している、という人はどのくらいいますか? -> 1, 2, ... ありがとうございます。 A-> かなり少なくなりましたね。N人くらいでしょうか。 B-> おー、けっこう多くの人が手を挙げてくれました。N人くらいですね。 私としては、OSSを使う事、それを人に勧めることが最初の貢献なのかなと思っています。 ですので、最初に手を挙げてもらった、OSS使ってる方はもう1歩目の貢献をしているのかなと思います。
  6. 次の質問です。 多くのOSSドキュメントが英語で提供されています。 これらを日本語など普段使っている言語に翻訳することは他の開発者の助けになると思いますか? 10, 20,... ありがとうございます。 A-> ほとんどの人がそう思う、ということですね。私もそう思います。 B-> あれ、みんな手を挙げるかなと思ったんですが・・、みんな英語読めってことですかね。厳しめですねー 私が聞いた話では、日本の技術者はググって開いたページが英語だとすぐ閉じちゃうらしいですけど。 そうでなくても英語よりも日本語のほうが読みやすいのは確かですね。 そんなこともあって、私もよくOSSのドキュメントを翻訳しています。
  7. 誰かがOSSドキュメントを翻訳すれば、より多くの人がそのOSSを使えるようになります。 (クリック) もし、より多くの翻訳者が翻訳作業に参加できれば、より速く正確な翻訳ドキュメントを提供できます。 このセッションでは、翻訳に簡単に参加しやすい仕組みをどうやって作るのかを紹介します。
  8. そのメカニズムを作るために、このセッションでは以下に紹介するツールを使います。 Tools; sphinx, docutils, sphinx-intl, transifex-client Services; Transifex, Drone.io.
  9. それでは、始めましょう。 まずはSphinxの紹介と、Sphinxの多言語対応向けセットアップからです。
  10. Sphinx is 何? Sphinxはドキュメンテーションジェネレータです。 SphinxはreStructuredTextというテキストマークアップから、複数の出力フォーマットに変換します。 (ポインタでinputとoutputを指す)
  11. Sphinxの歴史をちょっとだけ紹介します。 この人がSphinxの父、Georg Brandlさんです。 PyCon JP 2013のキーノートスピーカーでした。 (クリック) 2007年まで、Pythonの公式ドキュメントはLaTeXで書かれていました。 しかし、これはメンテナンスが難しくて、ほぼ不可能。 Georgはこの状況を変えようとしました。 (クリック) そして、2007年にSphinxを作りました。 Sphinxは書きやすくてメンテナンスしやすいことを目標に作られました。
  12. Sphinx以前、以降 以前 Python界にはドキュメントを書く標準的な作法が確立していなかった。Python公式ドキュメントもそのうちのひとつで、ドキュメントはLaTeXでかかれていて、LaTeXに変換したりLaTeXから変換する多くのスクリプトジャングルがありました。その頃は、出力フォーマット別に、それらのジャングルスクリプトでマークアップを変換して、さらに別のツールで出力していました。 Sphinxがこの地に降りたって以降、 * Python界の住人は、1つのソースコードから複数のフォーマットに出力できるようになりました。 * また、同梱されたHTMLテーマによって、ドキュメントは読みやすくなりました。 * APIリファレンスはライブラリの説明的ドキュメントと1つに統合して出力できるようになりました * ReadTheDocsという自動ドキュメントビルド&ホスティングサービスが登場し、便利になりました
  13. 今では、Sphinxは多くのPythonライブラリで使われるドキュメンテーションツールになりました。 Python libraries/tools: Python, Sphinx, Flask, Jinja2, Django, Pyramid, SQLAlchemy, Numpy, SciPy, scikit-learn, pandas, fabric, ansible, awscli, … そしてPython以外のlibrary/toolsでもSphinxは使われています: Chef, CakePHP(2.x), MathJax, Selenium, Varnish
  14. 今では、Sphinxは多くのPythonライブラリで使われるドキュメンテーションツールになりました。 Python libraries/tools: Python, Sphinx, Flask, Jinja2, Django, Pyramid, SQLAlchemy, Numpy, SciPy, scikit-learn, pandas, fabric, ansible, awscli, … そしてPython以外のlibrary/toolsでもSphinxは使われています: Chef, CakePHP(2.x), MathJax, Selenium, Varnish
  15. Sphinxはdocutilsというライブラリをベースに作られています。 Sphinxはdocutilsにはない、多言語化の機能を提供しています。 のちほど、この多言語化機能を詳しく紹介します。
  16. Sphinxと i18nツールのインストール まず、Sphinxは当然インストールする必要がありますね。 そして、 sphinx-intl と transifex-client を翻訳サポートのためにインストールします。 ところで、最新のtransifex-clientはちょっと安定してないため、私は0.8を使用しています。
  17. まず、翻訳の対象となるソースコードを手に入れるところからです。 今回の例では、そのソースコードはSphinxで書かれたドキュメントをもう持っていることにします。 ですので、取ってきたソースコードのdocディレクトリで "make html"を実行すればHTMLが生成されるはずです。 出力は _build/html にあります。
  18. ここで、ディレクトリ構成をみてみましょう。このようになっています。 (ポインタ) * まず対象のソースコードはどこか既存のリポジトリからcloneしてきたものです * ドキュメントのビルド出力 _build は "make html" で生成されたものです * Sphinxで書かれたドキュメントソースの雛形は一般的に"sphinx-quickstart"コマンドで作られます (クリック) docディレクトリの中に、 conf.py ファイルがあります。 このファイルに2行追加してください。 * 3行目: 出力するドキュメントの言語コードです。 * 4行目: localeディレクトリへの相対パスです。このlocaleディレクトリには翻訳カタログファイルを置くことになります。 セットアップはこれでおわりです。
  19. ここから主題に入っていきます。 Sphinxを使った貢献しやすいドキュメント翻訳プロセス、ってなんだろう、というのを見ていきます。
  20. 多言語化、ってなんでしょう。よく省略してI18Nと呼ばれます。 多言語化プロセスは、よく翻訳とか、ローカライズとかよばれますが、技術的には、こういった翻訳などを元のソースコードを書き直さずに行う事を多言語化といいます。 元のソースコードを書き直さずに行う、というのが重要なところです。
  21. 貢献しやすいってなに? ソフトウエアの利用者やドキュメント読者は、たまに翻訳で協力したいと思うことがあります。 でも、翻訳に参加するのに準備が大変だったり、環境構築スキルが要求されたりすると、うわーっ!ってなってあきらめます。 「貢献しやすい」というのは、翻訳などで簡単に協力できる「状況」のことです。
  22. 3つのケース HTMLだけで提供、翻訳できるけど、たいへん、元がちょくちょく更新される場合、どうやって追従する? So, for the comparison, I'll introduce the three cases of difficult to contribute. First one. The manual are provided only in the HTML files. Of course, you can translate it. But, usually the html files are frequently updated. How do you follow the original changes to update your translations? This is the first case. I have no idea how to follow the original changes.
  23. 2つめ。ソースを書き換える。 reSTを壊さないように 多人数に作業を分割できない 元が更新されたらどうする? 2nd example. When the manual are generated from reST files and docstrings in the source files, You can rewrite original files to translate it. But this approach has three problems: No1. You must be careful to maintain reStructuredText structure. No2. It's hard to divide translation tasks for a number of volunteer translators. No3. It's hard to pursue the upstream document source that is frequently updated.
  24. last example. OK, we are engineers. We can use git! (上を読む) Additionally, in this case, the repository owner should allow write access permission for each translators. This is also not a easy way.
  25. Well then, what is a easy way? My opinion is this. Left side is Not a easy way. Right side is A easy way. We need a easy way. The combination of the Sphinx i18n feature and some of the services can realize such a mechanism. Sphinxのi18n機能と、いくつかのサービスを組み合わせてこの仕組みを実現します。 That's what is the goal of this session これがゴール I'll explain what how to create the mechanism in this session. どうやって作るか説明します。 OK, let's move forward.
  26. 3rd Subject. Sphinx i18n feature. I'll explain the detail of the feature.
  27. Sphinx i18n は2つの機能で構成されてます。 1つめ。Potを生成 First one is the generation pot files from reST files. pot file is a famous translation catalog format for gettext that is used for i18n, you know. Potはi18n界では有名なgettext形式のカタログです 2つめ。reSTと、翻訳したPoから、翻訳HTMLを生成します Second one is the generation translated html files with using po files that is translated version of catalogs. It's the human work to prepare the translated po files from the pot files. このpoを用意するのは人間の仕事です。
  28. Like this, Converting the POT files into PO files is the job of humans. (クリック)作者がpotを生成して、翻訳者に依頼します (クリック)翻訳者はpotを受け取って、翻訳します。翻訳済みのファイルは拡張子をpoにします。 (クリック)おわったら、翻訳者は作者にpoを送ります 最初の部分をもうちょっと見ましょう
  29. 著者は "make gettext" でpotを生成します "make gettext" はreSTのtextから文章を取りだしてpotに書き出します。もしSphinxのautodoc機能を使っていれば、Pythonソースからもドキュメントを読み込みます このpotを翻訳すれば良いので、元のreSTやPythonコードを書き換える必要はありません。 "msgid" line have a original sentence. "msgstr" line will have translated one. このように翻訳カタログは1つの言語から別の言語に翻訳するのに便利です。
  30. Translated PO files should have as a right side structure. "locale" directory has "ja" and it has "LC_MESSAGES" directory, and it has translated PO files. PO files are copies of POT files with changed file's extension. If you want to translate it into other languages, like 'zh_cn', you can create other directories under "locale" directory. When original POT files are updated by changing of original document, you should update PO files too. If you had done it manually, it is very hard. You can automated it by sphinx-intl.
  31. At first, sphinx-intl copy pot files and rename them. When the document is changed, translators can use sphinx-intl to update PO differences. By same command. As you see, translators can finish the boring tasks by one command. sphinx-intl copy pot files and rename them on behalf of you. sphinx-intl also update differences for each po files when the document is changed. It's easy to use. As a consequence of introducing the sphinx-intl tool, translators can concentrate for translation.
  32. This is a translation work. Translators can use their favorite editors or helpful tools/services easily that provide translation support features like a translation memory, recommending similar translation, glossary and auto-translation. Once the translation is complete, finally let's run the "make html" command.
  33. Finally author and translators can run "make html" and can get translated output w/o editing reST and python code. This is a translated HTML sample. Internally, Sphinx parse reST file and replace them into translated one by using po file.
  34. Entire process to translate sphinx docs is this. If you translate some sphinx document without using the i18n feature, you need to rewrite original document source files. The Sphinx i18n feature provides a easy way to translate a document as you seen.
  35. So far, we've found the mechanism of i18n of Sphinx. In 4th Subject, Automated translation process with several services, we will continue to automate this mechanism.
  36. Right now, we have seen an overall picture of the process. Actually, I have a thing that was not pictured here. (クリック) Yes, these commands such as "make blah blah" require your hands to invoke. In other words, the translator must learn such steps, yet. Additionally, it would be difficult to translate in parallel. It's not a easy way, you know.
  37. OK, Let's make it to be automation and parallelization. And then, the translator doesn't need to know the mechanism. And, make the translation work possible to parallelize. Let's take a look at from the parallelization of the translation work.
  38. Once you get po files, you can use helpful tools/services easily that provide translation support features like a translation memory, recommending similar translation, glossary and auto-translation. In particular, the use of the online translation service is important for parallelization. I'd like to introduce the Transifex as a online translation service.
  39. Transifex provides the following functions: Upload pot and download po files by API, glossary feature, translation memory, recommending translations, automatic translation by using Google / Microsoft API. Because you can do translation on the Web screen, you can translate them with other translators in parallel.
  40. Translation on Transifex web console. 1. You can select one untranslated message 2. And Translate it by your self, or by machine translation 3. If the message contains long module or method name, you can click the icon to copy original to translation box w/o typing. 4. Sometimes, you are suggested translation messages from other translator, or Translation Memory. Translation Memory (called TM) pick up suggestions from similar translation in the project or its historical changes. For example, When Doc Author fix a typo, translation will be discarded. However, TM suggests previous translation that matches 99% with current original message. 5. Once you finish the translation, you can save it. 6. Optionally, reviewer can review it.
  41. We have made translation parallelization. Next. Let's automate the central part.
  42. The procedure you want to automate is made up of 6 steps. At first, we will review the 6 steps.
  43. First step is, Clone repository to be translated. Step 2. make gettext to generate translation catalog. Step 3. Upload pot translation catalog source. Step 4. Download translated po files. Step 5. "make html" command to generate translated doc. Step 6. Upload html to publish it That's all. Next, we will replace these all steps on the command line.
  44. This is the command line that include the steps. Line1: install sphinx and relates tools Line2: clone repository Line4: create a transifex account file by using sphinx-intl that reference environment variables (USERNAME and PASSWORD). Line5: create a transifex config file by using sphinx-intl that also reference a environment variable (PROJECT_NAME) Line6: generate pot files by make gettext Line7: update resources information in transifex config file that also reference a environment variable (POT_DIR) Line8: push pot files to transifex Line9: pull translated po files from transifex Line10: make html to generate translated html with using translated catalogs. Now we replaced 5 steps on the command line, except HTML uploading part. I'll explain the part later. As you seen above, You can automate the process by this script. Rest of work is preparing a environment to run the script automatically. As one of the environment, I'll introduce the drone.io service.
  45. The drone.io is a continuous integration service. Drone integrates seamlessly with Github, Bitbucket and Google Code to make setup fast and simple. Drone also integrates with Amazon, Heroku, Google AppEngine and more. For custom deployments you can use SSH and shell scripts. You can use the service for public project without charge.
  46. In my case, I usually use Github and S3 integrations. Process of that is, (クリック) 1. Push notification from GitHub 2. That invoke the script you've seen 3. Then, deploy html files onto S3 storage. (You need a publish html setting of S3) If you set WebHook notification URL to transifex hook setting, updating translations also invoke the drone.io script.
  47. By using drone.io service, automation can be achieved. Upper-Left process is replaced with Right-Down one.
  48. 1 WebHook invoke the script. The script execute commands 2, 3, 4, 5. Finally drone.io deployment feature will deploy HTML to AWS S3 storage. As this, we got the automated mechanism by using drone.io environment.
  49. In summary, let's look at the results of the automation at each point of view as author and translators. At first, a point of view from the doc author. When author push to the repository, translation source of Transifex will be updated, and author can check the translated html in the site. Doc Author doesn't require annoying procedure.
  50. The second is, a point of view from doc translators. They can translate the document in parallel with; No git, No file, No conflict. Translation source are updated Automatically They can get a translated HTML output w/o hand-build. It means that the translation contributors can focus on the translation.
  51. By the mechanism of automation, both of doc author and translators will provide the maximum effect with a minimum of effort.
  52. In order to make the mechanism, we'll use such tools and services in this session. Tools; sphinx, docutils, sphinx-intl, transifex-client Services; Transifex, Drone.io.
  53. I'd like to introduce some of the tips.
  54. Drone.io limits 15mins for a build. If your process takes more than 15 minutes, you may be able to reduce the installation time with using wheel. Wheel package is a installation format. Installation speed is much faster than install from source distribution. If you interested in it, please refer to https://bitbucket.org/sphinxjp/docutils-translation/
  55. Version of transifex-client. Looks like transifex-client 0.11b3 is not stable, for me. Especially for Windows users. If you have encountered trouble with using newer version, please try: $ pip install "transifex-client=0.8"
  56. This is a New project page of Drone.io. Drone.io only list-up repositories which you have admin permission. Because drone.io setup webhook, admin permission is required. However, if you prepare a empty repository for drone.io usage, you can create a drone.io project. It means you can prepare the i18n automation environment, except webhook push from github. I think, project owner might be setup the webhook url for translation work, if you ask it. It's bit a hacky way. But works.
  57. These 3 examples are using earlier techniques.