Sphinx で Ruby の API ドキュメントを書く

Ruby のライブラリ用に API ドキュメントを書く際に、簡単な数式(ギリシア文字、上付き、バー、行列など)を使いたかったため Sphinx を検討してみた。

Sphinx については初めて触ったので、よくわからない状態。

追記:やっぱり YARD を使う感じに。

Sphinx のインストール

$ sudo apt-get install python-sphinx

rubydomain のインストール

API ドキュメント用に py:method や c:function などが最初から用意されています。ですが Ruby 用のは用意されていないため、拡張として公開されている sphinx-contirb/rubydomain をいれます。

$ # easy_install はインストール済とする
$ sudo easy_install -U sphinxcontrib-rubydomain

雛形の作成

適当なディレクトリで

$ sphinx-quickstart

を実行します。プロジェクト名や作者、その他もろもろのことが訊ねられますので、答えていくと雛形が作成されます。

設定ファイルの修正

conf.py を修正します。

ここでは数式用の pngmath と rubydomain を読み込むようにします。

extensions = ['sphinx.ext.pngmath', 'sphinxcontrib.rubydomain']

ドキュメントの記述

最終的にはファイルを分割するのが好ましいのかもしれませんが、とりあえず index.rst に記述します。

.. rb:module:: Celes

.. rb:function:: pfw06(date1, date2)

  Returns the precession angles (IAU 2006 model).

  :param date1: TT as a 2-part Julian Date
  :type  date1: Float
  :param date2: TT as a 2-part Julian Date
  :type  date2: Float
  :rtype: Array
  :return: [*gamb*, *phib*, *psib*, *epsa*] -- see below.
  :raise: TypeError

  Returns
    * *gamb* (Float) -- Fukushima-Williams angle :math:`\bar{\gamma}`
    * *phib* (Float) -- Fukushima-Williams angle :math:`\bar{\phi}`
    * *psib* (Float) -- Fukushima-Williams angle :math:`\bar{\psi}`
    * *epsa* (Float) -- Fukushima-Williams angle :math:`\epsilon_A`

  Example
    .. code-block:: ruby

      Celes::pfw06(2450000.5, 5678.9)
      #=> [5.567146520539624e-06, 0.40906694795782306, 0.002764904877386836, 0.409066897588741] 

モジュール関数についての記述です。 rb:module に対してはインデントを用いません。

説明文の中で :param var1: :type var1: などを利用することができます。もちろん用いずにリストなどだけで整形しても構いません( YARD などに比べるとあまり強力なものではないので)。

などを見るとなんとなくわかるような気になります。

HTML 出力

$ make html

を実行すると(デフォルトだと) _build/html/index.html に出力されます。