SphinxでドキュメンテーションコメントをHTMLに変換する方法
前フリ
Pythonにはpydocというモジュールがあって、これを使うと同じようにAPIリストが出力できると思っていた。今までDjangoのコードを書いてみて、いわゆるヘッダーコメントとかドキュメンテーションコメントと言われているものをなんとなくjavadocライクに書いていたが、pydocだとあんまり期待した通りのHTMLを出力してくれないことが分かった。
Pythonにはpydocというモジュールがあって、これを使うと同じようにAPIリストが出力できると思っていた。今までDjangoのコードを書いてみて、いわゆるヘッダーコメントとかドキュメンテーションコメントと言われているものをなんとなくjavadocライクに書いていたが、pydocだとあんまり期待した通りのHTMLを出力してくれないことが分かった。
sphinxでautodocを使用する場合はプライベートメンバー('_'から始まるメンバー)はデフォルトで非表示となっていて、docstringが出力されない。出力する場合には、autodoc-skip-memberというカスタムメソッドを使用して表示するメンバーを指定すれば良いらしいが、これだと手間が増える。
Djangoでアプリケーション開発をする場合、Django付属の開発サーバー(manage.py)を使用していたが、どうもリロードが遅かったり、Linux用にデプロイするのが、めんどくさそうと思ったので、開発時からApacheを使ってホストできないか調べてみた。ちなみにリロードが遅いのは、pythonコードを読み込みなおしているから、という記述をどこかで見かけた。Apacheを使うと、リロードが必要になる。MaxRequestsPerChild 1を指定すればよいが、これだと、毎回リロードすることになり、Apacheを開発サーバーとして使う意味がなくなる。変更ファイルを検出して、自動でリスタートしてくれればいいけど、Windowsだとやり方が分からないので、とりあえず、Apacheは再起動することにする。
ちょっと気になって調べたのでメモ。
基本は静的コンテンツをホストするWebサーバーはKeepAlive On
に設定して、動的コンテンツをホストするAPサーバーはKeepAlive Off
に設定しておくといいらしい。物理的にサーバーを分けることができなくても、VirtualHostでWebサーバー部分とAPサーバー部分を分離して、それぞれKeepAliveの設定を変更した方がいいよ、という内容。なので、Django開発用PCのローカルApacheの設定も変更してみた。ちょっと速くなった気がする。実際には気がするだけでほとんど変わってないのかもしれない。あれ?気のせい?
モデルの使い方がいまいち覚えられないので、ちょっとまとめてみることにした。Djangoのドキュメントってちょっと分かりにくいよねぇ。Pythonのドキュメントも分かりにくいけど。チュートリアルなのか、リファレンスなのか、ごちゃごちゃになっているからかもしれない。使い方2では内部結合・外部結合について書くつもりだけど、納得できるまで書かないので、書けない可能性もある。エンティティどうしが結合する場合、Entity Frameworkみたいに新しいエンティティを作らないといけないのだろうか。それとも合成せずに簡単にかけるのか。