SuiTechLog

Unity,Arduino,RaspberryPiなど、モノづくり系を気ままに書き残すブログ。

PythonをDoxygen使ってドキュメント化するよ! その2 コメントの書き方


 前回の記事で、インストールと設定、作成の流れが終わりました。

 次に、Doxygen形式のコメントについて解説していきます。

 

おおまかな流れ 

 Doxygenはコメントに書き込まれた特殊コマンド(@から始まる特殊な文字)を読み取って、独自のルールでドキュメント化していきます。

ルール的にはコマンドの後ろに半角スペースをいれて文章を書き込むのがメインとなります。

#   @コマンド 表示させる文章

という形で書いていきます。

 

 

 注意点として、#と@がくっついていると正しく動作しなかったので、私は、#と@の間はTabキーでインデントさせて空けています。(できあがるドキュメントに差はありません)また、コメントに空白行があると1つのカタマリと認識してくれないので、コメントはまとめて書いてください。たとえば、

以下のように@briefと@authorの間に空白改行があると@briefまでしか認識しなくなりました。

#   @brief briefにはpackageのくわしい説明をかけます(詳細ではここが表示されます 
# @author packageの作者:私です。やめてください死んでしまいます。^o^

 

パッケージ(ファイル)の詳細説明について

 pythonパッケージ(ファイル自身)についての説明を、ソースコードファイルトップに書いておくと良いと思います。ここで生成されるドキュメントはこのファイルに存在するクラスやグローバル変数を一覧で確認することができるものになります。

サンプル

## 	@package Test packageのご説明(一覧で表示されるときはここが表示されます。)
#   @brief briefにはpackageのくわしい説明をかけます(詳細ではここが表示されます 
#   @author packageの作者:私です。やめてください死んでしまいます。^o^
#   @date   packageの日付はここ。2018.04.24
#   @version  packageのバージョンはここ1.1

 

生成されたページはこちら

 

f:id:sui332015:20180507153122j:plainf:id:sui332015:20180507153116j:plain

@briefは、クラスや変数、関数も含め、たいがいのものに付与できるオプションで、詳細説明を意味します。一覧ページからは見えませんが、More...を押したときに表示されるものになります。

 

グローバル変数の詳細説明について

 

 グローバル変数のドキュメント化のしかたです。

以下のようになります。

## 	グローバル変数のごく簡単な説明(一覧で表示されるときはここが表示されます。)
#	@brief 詳細説明とか。(クリックした先のページではここが表示されます)
PROGRAMFILES_PATH = "C:/Program Files (x86)"

#   @cond 
##  ドキュメント化したくないもの。\n
#	cond~endcondで囲むとドキュメント化されないです。
IGNORE_PATH = "C:/Program Files"
#   @endcond

 

## の二重になっているところが見出しで、

@briefは説明ですね

@cond~@endcond

こちらで挟まれたコメントや変数はドキュメント化するときに無視されます。

あまり使いません。基本的にはパブリックなものはすべてドキュメント化するのが吉です。

公式リファレンスはこちら

 

上記、パッケージページから確認すると以下のようになります。

f:id:sui332015:20180507160516j:plain

 

クラスの詳細説明について

 続いて、クラスのドキュメント化のしかたです。

まず、クラス宣言は以下。

##	クラスのごく簡単な説明(一覧で表示されるときはここが表示されます。)
#	@brief 詳細説明とか。(クリックした先のページではここが表示されます)
class SugoiClass():

とくに解説することはないですね

f:id:sui332015:20180507154713j:plain

クラス内部の変数

	##	ごく簡単な説明(一覧で表示されるときはここが表示されます。)
	#	@brief 詳細説明とか。(クリックした先のページではここが表示されます)\n
	#	@brief Doxygenでは、改行は¥nで可能。
	hogeHogePub = "Publicyade"
	
	##	クラスのプライベートな変数
	#	@brief 使い方とか。doxywizard側であえて設定しない限りプライベート変数はドキュメント化されないです
	__hogeHogePri = "Privateyade"

改行は\nです。

 デフォルトでは、プライベート変数や関数は原則ドキュメント化されないように設定されています。原則必要ないのですが、Doxywizard上のEXTRACT_PRIVATE値を変更することであえて出力させることもできます。

 

結果は以下です。

f:id:sui332015:20180507153331j:plain

クラスの各種メソッドの書き方の例

まず、引数も戻り値もないメソッドの場合

以下です。

    ## 	ごく簡単な説明(一覧で表示されるときはここが表示されます。)
    #	@brief くわしい説明とかいれます(メソッド詳細では表示されます。)\n
    #	@brief 引数の戻り値もない。シンプルなメソッドの例
    def ShoboiKansu(self):
    	print "-ShoboiKansu-"   

とくに難しいことはありません。

@briefを二個ならべて詳細説明を二行にしているだけです。

f:id:sui332015:20180507153646j:plain

 

次に、

1つの引数と戻り値のあるメソッド

です。

    ## 	ごく簡単な説明(一覧で表示されるときはここが表示されます。)
    #	@brief くわしい説明とかいれます(メソッド詳細では表示されます。)\n
    #	@brief 引数と戻り値があるシンプルなメソッドの例
    #  	@param arg 引数の説明
    #	@return ret_value 戻り値の説明
    def Kansu(self, arg):
    	print "-Kansu-"  
    	print arg

    	ret_value = 15

    	return ret_value

@paramでひとつの引数についての説明を書くことができます。

@return で、ひとつの戻り値について説明を書くことができます。

f:id:sui332015:20180507153708j:plain

 

次は、

複数の引数と複数の戻り値がある複雑なメソッド

です。

	##	ちょっと複雑な例です
	#  	@brief くわしい説明
	#  	@param Int_arg 引数の説明
	#  	@param String_arg さらに引数の説明
	#  	@warning 注意文をさしこむ場合(多用すると見づらくなるので注意)    
	#  	@brief warningのくわしい説明は、こう書きます(もう一個warning書いてもOK)
	#  	@retval ret_int 複数の値が返るときはreturn ではなく retvalで複数併記できます
	#  	@retval ret_String 複数の値が(ry
	#	@note ret_Stringについて、warningほどではないけど注意することを書き込みます。
	#	@test サンプルコードなどを説明に埋め込みたいときに code ~ endcode使うと良いです
	#	@code
	#
	#	#使い方とかコードサンプルぅ
	#	self.SugoiKansu()
	#
	#	@endcode
	def SugoiKansu(self, Int_arg, String_arg):
		
		print "-SugoiKansu-"

		print Int_arg
		print String_arg

		ret_int = 15
		ret_String "返す"

		#タプルで複数値を返す
		return ret_int, ret_String

@retval こちらは、@returnとちがって複数の戻り値を分けて書くことができます。@returnを複数行かいても、1つにまとめられてしまうためこれを使っています。

 @warning これは、注意を表す赤いマークをつけるオプションです。任意のところに書き足すことができますが、多用すると読みにくくなるので注意です。

@note これも、warningほどではないですが、メモ的なことをかいておくと見やすくなると思います。

@code~@endcode これは、使い方などのサンプルコードを埋め込むのに使えます。

f:id:sui332015:20180507153718j:plain

コード全体

以下に、今回のサンプルのコード全体をアップしておきます。

## 	@package Test packageのご説明(一覧で表示されるときはここが表示されます。)
#   @brief briefにはpackageのくわしい説明をかけます(詳細ではここが表示されます 
#   @author packageの作者:私です。やめてください死んでしまいます。^o^
#   @date   packageの日付はここ。2018.04.24
#   @version  packageのバージョンはここ1.1

## 	グローバル変数のごく簡単な説明(一覧で表示されるときはここが表示されます。)
#	詳細説明とか。(クリックした先のページではここが表示されます)
PROGRAMFILES_PATH = "C:/Program Files (x86)"

#   @cond 
##  ドキュメント化したくないもの。\n
#	cond~endcondで囲むとドキュメント化されないです。
IGNORE_PATH = "C:/Program Files"
#   @endcond

##	クラスのごく簡単な説明(一覧で表示されるときはここが表示されます。)
#	@brief 詳細説明とか。(クリックした先のページではここが表示されます)
class SugoiClass():

	##	ごく簡単な説明(一覧で表示されるときはここが表示されます。)
	#	@brief 詳細説明とか。(クリックした先のページではここが表示されます)\n
	#	@brief Doxygenでは、改行は¥nで可能。
	hogeHogePub = "Publicyade"
	
	##	クラスのプライベートな変数
	#	@brief 使い方とか。doxywizard側であえて設定しない限りプライベート変数はドキュメント化されないです
	__hogeHogePri = "Privateyade"

    ## 	ごく簡単な説明(一覧で表示されるときはここが表示されます。)
    #	@brief プライベートメソッドっぽいけど、コンストラクタ、こいつはドキュメント化されます。
    def __init__(self):
    	print "-INIT-"

    ## 	ごく簡単な説明(一覧で表示されるときはここが表示されます。)
    #	@brief くわしい説明とかいれます(メソッド詳細では表示されます。)\n
    #	@brief 引数の戻り値もない。シンプルなメソッドの例
    def ShoboiKansu(self):
    	print "-ShoboiKansu-"    

    ## 	ごく簡単な説明(一覧で表示されるときはここが表示されます。)
    #	@brief くわしい説明とかいれます(メソッド詳細では表示されます。)\n
    #	@brief 引数と戻り値があるシンプルなメソッドの例
    #  	@param arg 引数の説明
    #	@return ret_value 戻り値の説明
    def Kansu(self, arg):
    	print "-Kansu-"  
    	print arg

    	ret_value = 15

    	return ret_value

    ## 	ごく簡単な説明
    #	@brief プライベートメソッドなのではドキュメント化されません
    def __Private_Kansu(self):
    	print "-Private_Kansu-"

	##	ちょっと複雑な例です
	#  	@brief くわしい説明
	#  	@param Int_arg 引数の説明
	#  	@param String_arg さらに引数の説明
	#  	@warning 注意文をさしこむ場合(多用すると見づらくなるので注意)    
	#  	@brief warningのくわしい説明は、こう書きます(もう一個warning書いてもOK)
	#  	@retval ret_int 複数の値が返るときはreturn ではなく retvalで複数併記できます
	#  	@retval ret_String 複数の値が(ry
	#	@note ret_Stringについて、warningほどではないけど注意することを書き込みます。
	#	@test サンプルコードなどを説明に埋め込みたいときに code ~ endcode使うと良いです
	#	@code
	#
	#	#使い方とかコードサンプルぅ
	#	self.SugoiKansu()
	#
	#	@endcode
	def SugoiKansu(self, Int_arg, String_arg):
		
		print "-SugoiKansu-"

		print Int_arg
		print String_arg

		ret_int = 15
		ret_String "返す"

		#タプルで複数値を返す
		return ret_int, ret_String

 

参考

  今回ご説明したもの以外にも数多くの特殊コマンドがサポートされています。ただし、Pythonの場合、\(バックスラッシュ)を@と読み替えてください。

www.doxygen.jp

 

上記で説明した Python流の書き方についての基本的な公式資料は以下 。(やたら短い)
www.doxygen.jp


この情報が皆様のお役にたてれば幸いです。