MyEnigma

とある自律移動システムエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

テキストベースでかっこいいドキュメントを作成したい人のためのSphinx, reStructuredText入門


Software-Dokumentation mit Sphinx: Zweite ueberarbeitete Auflage (Sphinx 2.0)

目次

はじめに

著名なOSSを見るとそのOSSのオンラインドキュメントも、

ソースコードと同じgitリポジトリで

管理されていることが多いです。

そのような、テキストベースで

オンラインドキュメントを作成できるツールとして有名なのが、

Pythonで作られているのSphinxです。

www.sphinx-doc.org

 

Sphinx

Sphinxは、Python製のドキュメント生成ツールです。

docs.google.com

 

デフォルトでは、reStructuredTextというテキストフォーマットから、

下記のような整形されたドキュメントを生成できます。

  • HTML
  • PDF
  • EPUB
  • man pages

拡張機能を使うことで、Markdownから上記のドキュメントを生成することが可能です。

 

またautodocという機能を使うことで、

Pythonコードのdocstringを自動的に認識して

簡単にAPIリファレンスを作ることができます。

www.sphinx-doc.org

 

Sphinxはそのような便利機能があるため、

下記のような

有名なOSSのオンラインドキュメントで採用されています。

docs.python.org

www.kernel.org

scipy.github.io

docs.djangoproject.com

scikit-learn.org

 

reStructuredTextでよく使う表現

セクション(章立て)

マークダウンの場合、セクションはシャープの数で指定しますが、

RSTでは、セクションのタイトルの下に、記号で線を引けます。

様々な記号をつかってもSphinxが自動的にセクションを自動的に設定してくれますが、

独自にルールを作って、線を引いたほうが良いでしょう。

自分は下記のようなルールを使っています。

セクション(レベル1)
=====================
 
レベル2
---------

レベル3
~~~~~~~
 
レベル4
^^^^^^^^

セクションの名前よりも、線が短いとSphinxがワーニング出すので注意が必要です。

 

各セクションをリンクする場合

下記の記事にある通り、同じファイル内で定義されているセクションの場合は、”.. _My target:"でタグを付けて、

"`My target`_."で、リンクを作成できます。

docs.readthedocs.io

 

他のファイルで定義されているセクションをリンクする場合は、

下記の回答にある通り、:ref:`My target`でリンクすることができます。

stackoverflow.com

 

URLをリンクする場合

下記のようにリンクを作成できます。

`Sphinxを知りたい方はこちらをクリック <http://sphinx-users.jp>`_

 

数式のナンバリングと参照

こちらの記事の通り、:label: eulerで数式にラベルをつけて、

:eq:eulerで参照できます。

sphinx.shibu.jp

sphinx_rtd_themeを使っていて、数式番号が変なところに表示される場合

sphinx_rtd_themeの既存のバグのようです。

github.com

こちらのコミットのように、カスタムCSSを設定すると修正されます。

github.com

 

includeしたrstファイルで数式のラベルが重複しているとワーニングが出る

これは、こちらのコメントにある通り、cont.pyで設定しているsource_suffix

includeしたファイルが含まれた場合、build時にそのファイルが検索され、読み込まれ、

親のファイルからincludeで読み込まれて、二重に読み込まれることになるからです。

github.com

対策として、各セクションのrstのファイルは、*_main.rstとして、

source_suffixは"main.rst"と設定するようにしました。

 

画像を表示する

下記の記事の通り、そのファイル化から画像ファイルへのパスを設定すると

画像を表示することができます。

.. image:: static/img/sphinx.png

tdoc.info

 

GitHubリポジトリのドキュメントやコードから生成されたドキュメントをgithub pagesで公開する

こちらのGitHub Actionを使うのがおすすめです。

github.com

こちらのGitHub Actionを設定しておくと、

masterブランチにマージされるたびに、

生成されたドキュメントをgh-pages branchにpushしてくれるため、

あとは、リポジトリの設定から、

gh-pagesのrootディレクトリにgithub pagesの登録するように設定すればOKです。

 

SphinxのページにGoogle AnalyticsやGoogle Adsのコードを埋め込む

下記の記事のように、layout.htmlを拡張することで埋め込むことが可能です。

sphinx-users.jp

water2litter.net

 

どのblockを拡張するかはそれぞれのthemeによって代わりますが、

ReadTheDocのthemeを使っている場合は、下記の元のlayout.htmlを見れば、

どのようなBlockが定義されているかわかるはずです。

github.com

 

ソフトウェアドキュメントの構成

ソフトウェアのドキュメントは、

下記の3つで分けると見通しがよくなります。

設計ドキュメント(DESIGN.md, ARCHITECTURE.md)

アーキテクチャの情報や、

クラス図やデータベースのダイアグラムのような低水準の設計情報を提供するドキュメント

主にそのソフトウェアの開発者が読む。

使用方法 (HOW_TO_USE.md, RECIPE.md, TUTORIAL.md)

ソフトウェアをどのように使用するのかが書かれたドキュメント。

このドキュメントは、クックブック、チュートリアル、モジュールレベルのヘルプなどの形態で提供される。

主にそのソフトウェアのユーザが使う。

運用 (DEPLOYMENT.md)

デプロイやアップグレード、ソフトウェアの運用に関するガイドラインを提供する

主にそのソフトウェア を運用する人が使う。

 

ソフトウェアドキュメントを書くコツ

毎回2行だけ文章を書き、読み返して修正するというものです。

こうすることで、文章の作成とテキストのスタイルの両方にフォーカスできます。

 

参考資料

planset-study-sphinx.readthedocs.io

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

 

MyEnigma Supporters

もしこの記事が参考になり、

ブログをサポートしたいと思われた方は、

こちらからよろしくお願いします。

myenigma.hatenablog.com