Pythonのプロジェクトでドキュメントを書く、といったらSphinx、というくらいSphinxはメジャーなツールになっています。そのため、ここではPythonのプロジェクトドキュメントをSphinxで作成する手順について解説します。
Sphinxのインストール
Sphinxについては、日本ユーザー会のサイトで詳しく解説されています。当然、インストールの手順も記載されています。
上記の解説ではeasy_install
を使用していますが、pip install Sphinx
や、Anaconda/Minicondaを使っていればconda install Sphinx
でも導入可能です。
※2015/8/2現在、Sphinxが依存するBabelの最新版2.0ではPython3環境において不具合があります。これを回避するには、一旦pip uninstall babel
を実行したのち、pip install babel==1.3
でダウングレードするが、GitHub上のブランチから直接インストールしてください(pip install git+https://github.com/mitsuhiko/babel.git@2.0
)。
Sphinxはプロジェクト共通で利用するツールなので、virtualenvなどの仮想環境内でなく、グローバルにインストールしておいた方が良いと思います。
※仮想環境内にインストールしてしまうと、プロジェクト本体の依存ライブラリとドキュメントを作るためだけのSphinxの依存ライブラリが混ざってしまい、requirements.txt
が冗長になります
ドキュメントの作成
ここから実際にドキュメントを作成していきます。具体例があった方がイメージがつきやすいと思うので、以下にサンプルのリポジトリを用意しました。フォルダ構成やソースの修正箇所などについてはこちらを参照した方がわかり易いと思います。
まず、Pythonプロジェクトの直下にdocs
というフォルダを作成し、そこにドキュメントを作成していきます。
作成したdocs
フォルダに移動し、sphinx-quickstart
を実行し、ひな形を作成します。
sphinx-quickstart
このコマンドの詳細については、こちらのページにある「sphinx-quickstartの詳細説明」を参照してください。
これでドキュメントはの準備は整いました。ただ、APIリファレンスのようなものは当然ソースコードから自動で生成したいものです。Sphinxでは、sphinx-apidoc
を利用しこのソースコードからのドキュメント生成を行わせることができます。
以下コマンドでは、docs
フォルダ内のapis
に、Pythonパッケージであるpython_doc_sample
のドキュメントを生成しています(コマンドはプロジェクトのルートから実行)。
sphinx-apidoc -f -o docs/apis python_doc_sample
※importの仕方によっては、importしたものの文書まで芋づる式に作成されてしまうので注意(こちら参照)。
これでプロジェクトに関する文書とAPIリファレンスが整いました。何れも、文書は拡張子が.rst
であるreStructuredText形式で書かれています。最終的には、これをHTML形式に変換する必要があります。
そのためのコマンドがsphinx-build
ですが、make
を使用する方が簡単です(Windowsでも、sphinx-quickstart
を実行した際make.bat
が作成されるので利用可能です)。
make html
と、コマンドを実行する前にconf.py
を編集しておきます(docs
フォルダの直下にあるはずです)。
なぜなら、デフォルトではPythonコードからの自動ドキュメント作成はオンになっていないためです。
...
sys.path.insert(0, os.path.abspath('../'))
...
extensions = ["sphinx.ext.autodoc"]
- 23行目のあたりにある
sys.path.insert
で、作成したPythonパッケージへのパスを通しておきます - 33行目あたりの
extensions
で、APIドキュメント作成を行うための拡張sphinx.ext.autodoc
を追加しておきます
conf.py
を修正後make html
を実行すれば_build
フォルダにHTMLファイルが作成され、以下のようなWebページが参照できると思います。
そして、Module Indexのリンクからは、プロジェクト内のパッケージから作成されたAPIドキュメントが検索/参照できると思います。
コメントを適切に書いておけば、以下のように見えると思います。
以後は、ドキュメント(.rst
)の更新をしたらmake html
でHTMLページが更新されていきます。
ただ、ソースコード側の修正の場合はsphinx-apidoc
の実行が必要で、これが面倒という場合は簡単なバッチかスクリプトを作ってもよいと思います(サンプル)。
上記で紹介したコマンドは以下にリファレンスがまとまっているので、オプションの意味などを確認する際に参考にしてください。
ドキュメントの公開
作成したドキュメントはHTMLページなので、サーバーにおけば簡単に公開できます。GitHubリポジトリの場合、GitHub pagesが使えます。
Creating Project Pages manually
HTMLページが作成される_build
フォルダをgh-pages
にpushすればそれで公開は完了です。ただ、注意点として静的ファイルへのアクセスのため.nojekyll
ファイルが必要な点に注意してください。
これでPythonプロジェクトのドキュメントをSphinxで作成し、公開できるようになりました!