Comments
Description
Transcript
RDocを用いた数値モデルのドキュメント生成
情報の広場 : (RDoc;Fortran;ドキュメント生成;数値モデル;Ruby) RDoc を用いた数値モデルのドキュメント生成 森 川 靖 小 大 ・石 高 正 渡 正 樹 ・堀之内 嗣 ・林 1.はじめに 祥 武 介 ドキュメント作成の手間を軽減し,ドキュメント整 この小論では,Fortran 90/95で書かれた数値モデ 備を促進させる手法は,ソースコードのコメント行に ルに付随するドキュメント生成とその管理の為になさ ドキュメント用の文書を埋め込むことによってモデル れてきた試みについて紹介し,オブジェクト指向スク とドキュメントの一元管理を実現し,かつ,ドキュメ リプト言語 Rubyによるドキュメント生成用のライブ ント生成をソースコード解析用のソフトウェアによっ ラリ RDoc を用いた手法について解説を行なう. て自動化することである.例えば,まつもとゆきひろ 数値モデルの開発や保守において,モデルを構成す 氏を中心に開発されたオブジェクト指向スクリプト言 るサブルーチンや関数など,プログラム単位の機能や 語 Ruby 1や,サン・マイクロシステムズ社により開 用法の詳細を記述したドキュメント(リファレンス 発 さ れ た オ ブ ジェク ト 指 向 プ ロ グ ラ ミ ン グ 言 語 マニュアル)の整備を行うことは必須な作業である. Java 2では,それぞれ RDoc 3,Javadoc 4といったド 数値モデルを利用する第三者にとっても,モデルを理 キュメント自動生成用のライブラリが用意されてい 解し,あるいはこれに改良を加える上で,このような る.C,C++,Python,IDL に関しては Doxygen 5 ドキュメントが提供されていることは望ましい. というドキュメント生成用ソフトウェアが存在する. しかし,モデルの開発に合わせて常に最新のドキュ こ れ ら RDoc や Javadoc,Doxygen は,単 に ソース メントを整備しておくことは大変に手間のかかる作業 コードの解析やコメント行中に記述される文書の抜粋 である.その主な原因は,モデルで記述した内容とほ を行なうだけではなく,自動生成される HTML ド ぼ同じ内容(サブルーチンの名前や引数など)を再度 キュメントにハイパーリンクや見出し,箇条書きと ドキュメントとしても記述せねばならない点にある. ドキュメントとモデルとを別々のファイルで管理する 1 場合にはこの作業はさらに煩雑となる.そのためド 「オブジェクト指向スクリプト 言 語 Ruby」http:// キュメントの整備はついついおろそかになり,結果と www.ruby-lang.org/.近年,Rubyは地球科学にお けるデータ解析,可視化,数値シミュレーションに してモデル本体の開発にも支障をきたすこととなる. 対しても活用されている.その例については, 電脳 Rubyプ ロ ジェク ト」http://ruby.gfd-dennou.org/ を参照されたい.<URL 参照日付2007/01/18> Document generation for numerical models by RDoc. Yasuhiro M ORIKAWA, 北海道大学理学院. morikawa@gfd-dennou.org 2 3 M asaki ISHIWATARI, 北海道大学地球環境科学研 究院. Takeshi HORINOUCHI, 京都大学生存圏研究所. M asatsugu ODAKA,Yoshi-Yuki HAYASHI,北海 4 道大学理学院. 5 Ⓒ 2007 日本気象学会 2007年 2月 「サ ン・マ イ ク ロ シ ス テ ム ズ-Java テ ク ノ ロ ジ」 http://jp.sun.com/java/<参照2007/01/18> 「RDoc:Ruby Standard Library Documentation」 http://www.ruby-doc.org/stdlib/libdoc/rdoc/ rdoc/<参照2007/01/18> 「Javadoc Tool Home Page」http://java.sun.com/ j2se/javadoc/<参照2007/01/18> 「Doxygen」http://www.doxygen.jp/<参 照2007/ 01/18> 77 186 RDoc を用いた数値モデルのドキュメント生成 いった構造を付与することで,見やすく いやすいド に,参照するモジュールへのハイパーリンクの作成, キュメントの提供を可能としている.また,ソース サブルーチンや関数の引数のデータ型,INTENT 属 コードの可読性を低下させないよう,文書に構造を付 性(授 受 特 性),引 数 キーワード(例: “call date 与するためのタグも簡素なものとなっている.上記以 )も and time(values=input)”に お け る“values” 外にも同種のライブラリやソフトウェアは数多く存在 自動的にドキュメントに反映する.しかし,コメント しており,現在この手法はリファレンスマニュアル管 に記述される内容は HTM L へ変換されても,ハイ 理の主流となりつつある. パーリンクや見出しや箇条書きといった構造を持たな これまでに気象学 野の数値モデルに用いられてき い文書となるため,リファレンスマニュアルとしては た 主 要 な 言 語 は Fortran 系 の 言 語 で あ り,近 年 は 不 である.他にも,Fortran 90/95の新機能である Fortran 90/95が主流である.Rubyによるドキュメ 多重定義を ント生成ライブラリ RDoc は,Rubyのみならず C や などの問題がある. 用したプログラムが正しく解析されない Fortran 90/95のソースコードを解析してドキュメン f90tohtml 8は,オクラホマ大学気象学講座の Brian トを生成することも可能である.しかし残念ながら Fiedler 氏ほかによって作成 さ れ た,Fortran 90/95 RDoc の Fortran 90/95解析機能には不十 ソースコードを HTML へ変換する Perl スクリプト な点が多 く,実用には耐えなかった.そこで我々はこの不十 である.このソフトウェアは大規模な数値モデルの な点を解決するべく,Fortran 90/95解析機能の改良, ソースコードを閲覧することを目的に開発され,現在 強 化 を 行 なった.以 下 で は,RDoc 以 外 の Fortran は ARPS,WRF,CAM において利用されている. 90/95プログラムのドキュメント生成方法について紹 f90tohtml は,USE 文中のモ ジュール 名 や CALL 文 介した後に,RDoc の特徴,および我々が施した改良 中のサブルーチン名を,該当するモジュールまたはサ 点について解説を行う.そして,この「RDoc For- ブルーチンのソースコードへのハイパーリンクに変換 tran 90/95ソース コード 解 析 機 能 強 化 版」(以 下, する.利用者はソースコードをブラウザで閲覧でき, RDoc 強化版)を用いたドキュメント生成の方法を実 プログラムが参照している別のモジュールやサブルー 例を チンへはハイパーリンクによって移動できる.しかし えて紹介する.ここで紹介する RDoc 強化版 はインターネット上に 開されており,現在その改良 ながら,このソフトウェアはサブルーチンや関数など 点がオリジナルの RDoc ライブラリ 3に取り込まれつ の機能や 用法を詳述したリファレンスマニュアルの つある.詳細な説明,最新の状況については当該ホー 作成を主目的とはしていないので,ソースコード内の ムページ 6をご覧いただきたい. コメント行を自動解析してこれを取り込み,その記述 をハイパーリンクや見出しや箇条書きなどの構造を 2.Fortran 90/95プログラムのドキュメント生成 持った HTM L 文書として生成する機能は有していな RDoc 以 外 に も,Fortran 90/95プ ロ グ ラ ム の ド い.また,PRIVATE 文によるモジュール中の言語 キュメント生成に関する試みはなされている.ここで 要素への参照不許可の指定や,構造データ型,多重定 は,f90doc と f90tohtml というソフトウェア お よ び 義などを用いたプログラムを正しく解析できないとい GFDL における取り組みについて紹介しておく. う問題もある. 7 f90doc は M IT の 計 算 科 学 グ ループ の Erik GFDL に お い て Isacc Held 氏 と Venkatramani Demaine 氏によって作成された Fortran 90/95用のド Balaji 氏が中心となって開発を行なっている気候モ キュメント自動生成 Perl スクリプトである.このソ デルの統合フレームワーク Flexible M odeling Sys- フ ト ウェア は Fortran 90/95ソース コード を 解 析 し tem(FMS)9では,ソースコード内のコメント行 に て,サブルーチンや関数の直前に記述されるコメント XM L 書式のドキュメントを埋め込むことで,ドキュ から HTM L 形式のドキュメントを生成す る.さ ら メントの作成と管理の手間を軽減している.HTML 6 「RDoc Fortran 90/95ソースコード解析機能強化版」 http://www.gfd-dennou.org/library/dcmodel/ rdoc-f95/<参照2007/01/18> 7 「f90doc homepage」http://theory.lcs.mit.edu/ edemaine/f90doc/<参照2007/01/18> 78 形式のドキュメントを生成する場合には,ソースコー 8 9 「f90tohtml Homepage」http://mensch.org/ f90tohtml/<参照2007/01/18> 「FM S:the flexible modeling system」http:// www.gfdl.noaa.gov/ fms/<参照2007/01/18> 〝天気" 54.2. RDoc を用いた数値モデルのドキュメント生成 187 ドから XM L 部 を抽出し,変換を行うようにしてい 簡単になる.2点目の特徴は,コメントとして記述す る.この手法 の 詳 細 は FMS プ ロ ジェク ト の ホーム る文書に簡素なタグを付加することで,箇条書きやハ 開されている 10.FM S で用いられてい イパーリンク等の文章構造を HTML ドキュメントに る手法では,ドキュメントを XM L で記述するため, 付与できることである.この機能により,ソースコー ドキュメントにハイパーリンクや箇条書きなどの構造 ドの可読性をさほど犠牲にすること無く, を持たせることが可能であるという利点がある.しか 良いドキュメントの作成が可能となる.3点目の特徴 し,コメント行に XM L タグを数多く記述する必要が はクロスリファレンスと呼ばれる機能を持つことであ あり,Fortran 90/95プログラムとしてのソースコー る.これは,複数のプログラムからドキュメントを生 ドが読みにくくなるという欠点がある.また現時点で 成する際に,コメント行に記述されたクラス名やメ は,ソース コード か ら XM L 部 ページ上に い勝手の を 抜 き 出 し, ソッド名を自動的にそのクラスやメソッドのドキュメ HTM L 形式のドキュメントを生成するソフトウェア ントへのハイパーリンクへと変換する機能である.本 は 開されておらず,この手法を誰でもがすぐに利用 来,ハイパーリンクを作成する際には,HTM L とし できるようにはなっていない. て表示する文字列およびリンク先の URL,そしてハ このように,気象学 野のモデルを含めた Fortran イパーリンクであることを示すタグを記述する必要が 90/95プログラムにおいても,他の言語と 同 様 に ド ある.クロスリファレンス機能により,これらの文字 キュメント作成と管理のための試みはなされつつあ 列とタグを記入すること無く,コメント行中にクラス る.しかし,Rubyや Java などの言語のように,プ 名やメソッド名を書いておくだけでハイパーリンクが ログラムとドキュメントを1つのファイルとして管理 自動作成される.これによって,コメントを記述する でき,かつプログラム中のコメント行に簡素なタグを 手間を減らすことができるだけでなく,ソースコード 付加することによってハイパーリンクや箇条書きなど の可読性の低下を防ぐこともできる. の構造を持つ HTML ドキュメントを自動生成できる RDoc は Rubyの み な ら ず,Fortran 90/95ソース ような手法は未だに確立されておらず,モデルのド コードの解析機能も有している.しかし,残念ながら キュメント整備のための手間の軽減は思うようには進 既存の RDoc ユーティリティーでは,Fortran 90/95 んでいない. プログラム中のファイルやモジュールやサブルーチン 以外のプログラム要素,すなわち関数や変数などを解 3.RDoc の特徴 析することができなかった.また Fortran 90/95プロ RDoc はプログラムを解析し,ソースコードから得 グラムのドキュメントとしては必須である,サブルー ら れ る 情 報 と,コ メ ン ト 行 に 記 述 さ れ た 文 書 か ら チンの引数の情報,すなわちデータ型,INTENT 属 HTM L 形 式(正 確 に は XHTM L 1.0 Transitional 性(授 受 特 性),引 数 キーワード な ど が 解 析 さ れ な 形式)のドキュメントを生成するライブラリである. かった.そしてコメントを解釈してドキュメントに取 RDoc が主に対象としているのはもちろん Rubyスク り込む機能も正しく働かないという問題があった. リプトであり,Rubyの標準ライブラリのドキュメン トの多くは RDoc によって作成されている. 4.RDoc Fortran 90/95解析機能の強化 RDoc の特徴として,以下の3点が挙げられる.1 我々は,前節で述べた問題点を解決するとともに, 点目は,Rubyのソースコードを解析することによっ より充実した情報を持つ Fortran 90/95プログラムの て,クラス名やメソッド名,クラス間の継承の関係な リファレンスマニュアル自動生成が可能となるよう どを自動的にドキュメントに反映することである.こ に,RDoc の Fortran 90/95ソースコード解析機能の の機能により,ソースコードに記述する内容をドキュ 改良,強化を行った.我々が改良を施した RDoc は, メントに再度記述する必要が無くなり,ソースコード Fortran 90/95ソースコードのほとんどの言語要素, の内容に すなわち主プログラム,モジュール,サブルーチン, った最新のドキュメントを整備することが 10 「The FMS M anual A developers guide to the GFDL Flexible M odeling System」http://www. gfdl.noaa.gov/ vb/FM SM anual/<参 照2007/01/ 18> 2007年 2月 関数,変数,定数,構造データ型,利用者定義演算 子,利用者定義代入,NAMELIST 文を解析するこ とができる.それらの言語要素の直後(行末もしくは 直後に続く行)に書かれたコメント行は,その言語要 79 188 RDoc を用いた数値モデルのドキュメント生成 素の解説文章として識別さ れる.この他にもモジュー ル間の依存関係, 称名を 用 い た 多 重 定 義, PRIVATE 文 に よ る モ ジュー ル中の言語要素の参照不許 可の指定なども解析可能で ある.サブルーチンや関数 に 関 し て は,そ の 引 数 の データ 型,INTENT 属 性 (授受特性),引数キーワー 第1図 例として用いる Fortran 90/95プログラム.(a)は主プログラム,(b) は主プログラムから参照されるモジュールを記述したファイルである. ドをソースコードから自動 的に解析すると共に,引数 の宣言文の直後に書かれたコメントをその引数に関す グラムを るドキュメントとして識別する. れたファイル,(b)は主プログラムから参照される Fortran 90/95のソースコード解析機能以外にもい くつかの改良を行なっている.オリジナルの RDoc える.(a)は主プログラム calc が記述さ モジュール integral が記述されたファイルである. (2) ドキュメントの生成 では実現できていない,ファイル名のクロスリファレ ドキュメント生成はコマンドライン上から行う.プ ンス機能を追加した.また,北海道大学数学専攻の黒 ログラムの置いてあるディレクトリへ移動した後,以 田 拓氏による Ruby用 MathML ライブラリ 11を組 下のようにコマンド入力する. み込む機能を RDoc に付加することで,TeX 形式の 数式をコメントに埋め込んだ場合,その数式を Math- % rdoc --ignore-case --inline-source これにより doc/というディレクトリが作成される. ML 形式に変換してドキュメントに反映するようにし doc/index.html をブラウザで閲覧すると,第2図に た. 示されるようなドキュメントが表示される.上部のフ 以上の試みは現在 RDoc のオリジナルライブラリ 3 に順次組み込まれつつある.詳細は我々の レーム に は ファイ ル( Files の 欄),モ ジュール 開ホーム (Classes の欄),サブルーチン,関数など(Methods ページ 6を参照していただくことにし,次節で具体例 の欄)のリストが表示される.下部のフレームにはサ を簡単に紹介することにする. ブルーチンや関数に関する情報が記載された,簡単な リファレンスマニュアルが表示される. 5.RDoc による数値モデルのドキュメント生成 (3) ドキュメント用文書の埋め込み ここでは RDoc 強化版を用いたドキュメントの生 上記のプログラムに実際にドキュメント用文書を埋 成方法を,実例を挙げて紹介する.RDoc 強化版は, め込んでみる.基本的にはサブルーチンや関数など, Rubyがインストールされている計算機環境なら容易 言語要素の宣言文の行末もしくは直後の行にコメント に導入することができる.具体的なインストール方法 を記載する.HTM L ドキュメントに箇条書きやハイ は RDoc 強化版ホームページ 6をご覧いただきたい. パーリンクなどの構造を持たせたい場合は,以下のタ (1) Fortran 90/95プログラムの作成 グを用いる. 例として,第1図に示す簡単な Fortran 90/95プロ 見 出 し:行 頭 に“=”,“==”,“===”, “====”を記述する.“=”の数が見出しの 11 「ひらくの工房-MathM L ライブラリ」http://www. hinet.mydns.jp/ hiraku/. MathM L とは XM L ベー スの数学用マークアップ言語であり,数式などの数 学的情報も HTM L のように Web 上で 開,受信, レベルに対応する. 箇条書き:行頭に“*” ,または“-”を記述する. 番号付き箇条書きは“1.” ,“2.” ,...,ア 処理することを目的としたものである.詳しくは ル ファベッ ト 付 き 箇 条 書 き は “ A. ”, 「W 3C Math Home」http://www.w3.org/M ath/を 参照されたい.<参照2007/01/18> “B.” ,...,を記述する.入れ子にする場合, 80 半角2文字 字下げして再度行頭に上記の文字 〝天気" 54.2. RDoc を用いた数値モデルのドキュメント生成 189 イルやクラスやメ ソッドのドキュメン ト へ の リ ン ク は, ファイル名やクラス 名やメソッド名をそ のまま記述する. 数式の MathM L 表示: TeX 書 式 の 数 式 を $∼$もしくは¥[ ∼¥]で括る. 文字の修飾:文字を斜体 で表示する場合は, “ word ”もしくは 第2図 RDoc を用いて作成した,第1図のプログラム群のドキュメント. “ < em> word< / ,太字で表示 em>” す る 場 合 は,“* word *”も し く は “ < b > wo r d < / ,等 幅 で 表 示 b>” す る 場 合 は“+ word+”も し く は “ < t t > wo r d < / tt>”と記述する. 第 1 図( b)の ソース コードにドキュメント用文 書を埋め込んだ具体例を第 3図に示す. これらのプログラムか ら,再 度 RDoc に よって ドキュメントを生成する. 今回示す例のようにコメン 第3図 第1図 b のソースコードのコメント行にドキュメント用文書を埋め 込んだもの. トに日本語を埋め込む場合 には,ファイルの文字コー ドに応じた引数オプション を 指 定 す る.下 記 で は を記述する. ラ ベ ル 付 き 箇 条 書 き:ラ ベ ル を 角 括 弧 で 括 る ( “[label]contents” ),またはラベルと内容を “::”で区切る(“label::contents”). “euc-jp”を指定している.また,TeX で記述した数 式を MathML で表示するために“--mathml”オプ ションも 用する. % rdoc --ignore-case --inline-source ¥ ハイパーリンク:表示する文字をリンク先の URL と同じにする場合は, “http://”などで始まる --charset euc-jp --mathml ここで“¥”は継続行を表す.doc/ディレクトリ URL をそのまま記述する.表示する文字とリ の内容が ン ク 先 の URL を 別 に す る 場 合 は,“{dis- ラウザで閲覧する.今度は trapezoid 関数の部 [URL]”と記述する.ファ played message} 第4図に示されるようなドキュメントが表示されるは 2007年 2月 新されるので,再度 doc/index.html をブ に, 81 19 0 RDoc を用いた数値モデルのドキュメント生成 ていただきたい. 6.おわりに この小論で紹介した RDoc 強化版はプログラム の規模によらず簡単に 用 することができる.また, プログラム中に全くコメン トが無くても第2図に示す 程度のドキュメントを生成 す る こ と は で き る.し た がって,ドキュメント整備 におけるプログラム開発者 の手間の軽減だけでなく, ドキュメントの用意されて いないプログラムの 用者 がプログラムを理解するた めの助けになることも期待 第4図 第3図に示した関数 trapezoid のドキュメント. できる.我々は,このライ ブラリの利 性と完成度を ずである.この図では,先ほどソースコードのコメン 高めるべく,今後も継続して改良を施していく予定で ト に 埋 め 込 ん だ 記 述(“===”や“*”,URL, ある.読者からのコメントや意見,情報などがあれ TeX の数式など)が HTM L における見出し,箇条 ば,筆者ら開発グループ宛(E-mail:dcmodel-rqst 書きなどへと変換されている.なお,M athM L を第 @gfd-dennou.org)にお寄せいただきたい. 4図のように表示するためには,ブラウザが MathML に対応している必要がある.対応ブラウザなどの このライブラリが,数値モデルに携わる方々の手助 けになれば幸いである. 情報に関しては RDoc 強化版ホームページ 6を参照し 82 〝天気" 54.2.