ruby-reference-manual:156
From: Minero Aoki <aamine@l...>
Date: Mon, 23 Oct 2006 20:12:23 +0900 (JST)
Subject: [ruby-reference-manual:156] 第 2 段階の作業方法 #2
青木です。
前回のはわかりにくかったようなので、作業方法をより細かくしました。
それから、bc-rdoc.rb の仕様も変わってます。--list とか --diff
がオプションからサブコマンドになりました。
== 作業手順の概要
第 2 段階ではテンプレートとして rdoc (ri) を使います。
rdoc はソースコードを見てメソッドの存在を判定するので、確実にすべてのメソッドの
エントリが揃っています。そこで、rdoc のデータベースと BitClust のデータベースを
比較して、足りないメソッドを検出します。
rdoc と BitClust のデータベースを比較するツール bc-rdoc.rb を用意しました。メン
バーは bc-rdoc.rb を使って、各ファイルに足りないメソッドを発見し、エントリを書
いてください。
以下、具体的に説明します。
== 前準備
まず、BitClust データベースが必要になるので、以下のコマンドを打って BitClust デ
ータベースをビルドしておいてください。
~/c/rubydoc/refm/api $ bitclust -d ./db init version=1.8.5 encoding=euc-jp
~/c/rubydoc/refm/api $ bitclust -d ./db update --stdlibtree=src
それから、できるだけ多くのバージョンの ri データベースを作ります。 1.8.0 〜
1.8.5、それからできれば 1.8 HEAD と CVS trunk HEAD のソースコードをダウンロード
して展開してください (コンパイルする必要はありません)。ここでは、仮に ~/src/
ruby-VERSION (VERSION は 1.8.0 〜 1.9.0) に展開したとします。
展開が済んだら、以下のコマンドを打って rdoc データベースを作ります。
~/c/rubydoc/refm/api $ rdoc --ri --op ris/1.8.0 ~/src/ruby-1.8.0
~/c/rubydoc/refm/api $ rdoc --ri --op ris/1.8.1 ~/src/ruby-1.8.1
~/c/rubydoc/refm/api $ rdoc --ri --op ris/1.8.2 ~/src/ruby-1.8.2
~/c/rubydoc/refm/api $ rdoc --ri --op ris/1.8.3 ~/src/ruby-1.8.3
~/c/rubydoc/refm/api $ rdoc --ri --op ris/1.8.4 ~/src/ruby-1.8.4
~/c/rubydoc/refm/api $ rdoc --ri --op ris/1.8.5 ~/src/ruby-1.8.5
~/c/rubydoc/refm/api $ rdoc --ri --op ris/1.8 ~/src/ruby-1.8 # 1.8 HEAD
~/c/rubydoc/refm/api $ rdoc --ri --op ris/1.9.0 ~/src/ruby-1.9.0 # trunk HEAD
シェルの for 文や、バッチファイルを使うと楽に実行できます。
なお、rdoc を実行する ruby のバージョンと rdoc の相性があるようです。とりあえず、
現在の ruby 1.9.0 は rdoc がまともに動きません。 1.8 HEAD もどうも怪しげです。
1.8.4 以上のリリース版を使いましょう。
== リファレンスの編集
次に、第 1 段階と同じように、レポジトリの ASSIGN ファイルの、「OWNER」欄に自分
のアカウントを書き込んでコミットします。これでそのファイルの排他的編集権を得た
ものとします。
続いて、足りないエントリをチェックします。例えば String クラスをチェックしたい
ときは以下のように打ちます。
~/c/rubydoc/refm/api % bc-rdoc diff --bc=db --ri=ris/1.8.5
+ String#<
+ String#<=
+ String#>
+ String#clone
+ String#dup
+ String#each
+ String#to_d
+ String#~
- String.yaml_new
- String#_expand_ch
- String#_regex_quote
- String#block_scanf
- String#bytes
- String#chr
- String#end_regexp
- String#end_with?
- String#expand_ch_hash
- String#initialize_copy
- String#is_binary_data?
- String#is_complex_yaml?
- String#lines
- String#ord
- String#original_succ
- String#original_succ!
- String#quote
- String#rpartition
- String#start_with?
- String#to_yaml
- String#toutf32
すると、このように、BitClust だけにあるメソッドが「+」、 rdoc だけにあるメソッ
ドには「-」が前置されてリストされます。これを見て、足りないメソッドがあることが
わかったら、次のように -c (--content) オプションを追加して実行します。
~/c/rubydoc/refm/api % bc-rdoc diff --bc=./db --ri=ris/1.8.5 String -c
#@# bc-rdoc: detected missing name: bytes
--- str.bytes => anEnumerator
Returns an enumerator that gives each byte in the string.
"hello".bytes.to_a #=> [104, 101, 108, 108, 111]
#@# bc-rdoc: detected missing name: chr
--- string.chr -> string
Returns a one-character string at the beginning of the string.
a = "abcde"
a.chr #=> "a"
(以下略)
するとこのように、足りないメソッドの rdoc だけがまとめて出力されます。これを既
存のファイルにリダイレクトなどで追加してください。プロジェクトの第 2 段階ではエ
ントリが揃えばいいので、ドキュメントを書く必要はありません (書きたければ書いて
も構いません)。
さて、すべてのエントリを追加しおわったら、まずファイルをコミットします。続いて
ASSIGN ファイルの「STATUS」欄を「done」にして、こちらもコミットします。これで編
集完了です。
== 注意点
bc-rdoc.rb diff で出力されたエントリをすべて追加すべきとは限りません。
例えば上記の例で言うと、 yaml_new や original_succ は追加すべきではありません。
yaml_new は yaml ライブラリが追加するメソッドなので _builtin/String に書くのは
不適切ですし、 original_succ は (おそらく) jcode ライブラリが一時的に作成する
alias で、一般ユーザが呼び出すことを意図しているとは思えません。
また、特定の Ruby バージョンにしかないメソッドもあります。上記の例では chr,
ord, bytes, lines あたりは Ruby 1.9 にしかありません。メソッドのエントリを追加
するときは、以上の点に注意する必要があります。
メソッドがいつから存在するのか確認するときにも bc-rdoc.rb が使えます。以下のよ
うに bc-rdoc history コマンドを使うと、指定したクラスの全メソッドについて、どの
バージョンで rdoc が存在するかどうかが一覧できます。
~/c/bitclust % ./bin/bc-rdoc.rb history --ri=ris FileUtils
180 181 182 183 184 185 190
FileUtils#cd o o o o o o o
FileUtils#chdir o o o o o o o
FileUtils#chmod o o o o o o o
FileUtils#chmod_R - - - o o o o
FileUtils#chown - - - o o o o
FileUtils#chown_R - - - o o o o
FileUtils#cmp o o o o o o o
FileUtils#compare_file o o o o o o o
FileUtils#compare_stream o o o o o o o
FileUtils#copy o o o o o o o
FileUtils#copy_entry - - o o o o o
FileUtils#copy_file o o o o o o o
FileUtils#copy_stream o o o o o o o
FileUtils#cp o o o o o o o
FileUtils#cp_r o o o o o o o
FileUtils#fu_have_symlink? - - - o o o o
FileUtils#fu_world_writable? - - - o o o -
FileUtils#getwd o o o o o o o
FileUtils#identical? o o o o o o o
FileUtils#install o o o o o o o
FileUtils#link o o o o o o o
FileUtils#ln o o o o o o o
FileUtils#ln_s o o o o o o o
FileUtils#ln_sf o o o o o o o
FileUtils#makedirs o o o o o o o
FileUtils#mkdir o o o o o o o
FileUtils#mkdir_p o o o o o o o
FileUtils#mkpath o o o o o o o
FileUtils#move o o o o o o o
FileUtils#mv o o o o o o o
FileUtils#pwd o o o o o o o
FileUtils#remove o o o o o o o
FileUtils#remove_dir - - - o o o o
FileUtils#remove_entry - - - o o o o
FileUtils#remove_entry_secure - - - o o o o
FileUtils#remove_file - - - o o o o
FileUtils#rm o o o o o o o
FileUtils#rm_f o o o o o o o
FileUtils#rm_r o o o o o o o
FileUtils#rm_rf o o o o o o o
FileUtils#rmdir o o o o o o o
FileUtils#rmtree o o o o o o o
FileUtils#safe_unlink o o o o o o o
FileUtils#symlink o o o o o o o
FileUtils#touch o o o o o o o
FileUtils#uptodate? o o o o o o o
「o」が表示されているバージョンには rdoc が存在し、「-」と表示されているバージ
ョンには rdoc が存在しないことを示します。
ただし、このコマンドもあくまでも「rdoc があるかどうか」を示しているだけで、その
メソッドが本当に存在するかどうかはわかりません。特に 1.8.0 と 1.8.1 の rdoc は
非常に怪しいので、あまり信用しないほうがいいでしょう。
どのバージョンから追加されたのかわからないときは……
いろいろ書きましたが、この段階で一番重要なのは、次の安定版リリースである 1.8.6
のメソッドをきっちり揃えることです。「そのメソッドがいつ追加されたか」というの
は追加的な情報にすぎません。どのバージョンから追加されたのかよくわからないとき
は、「#@# 追加されたバージョンは不明」とでもコメントを書いておいて、次のファイ
ルに進みましょう。たぶんそのうち誰かが調べます。
作業手順のまとめ
1. 編集するファイルを決める。仮に _builtin/String.rd とする。
2. ASSIGN ファイルの _builtin/String の「OWNER」欄に自分のアカウントを書き込む
。
3. ASSIGN ファイルをコミットする。
4. bc-rdoc.rb diff を使って、BitClust データベースに入っていないメソッドをチェ
ックする。
5. bc-rdoc.rb diff -c を使って、BitClust データベースに入っていないメソッドを
追加する。
6. _builtin/String.rd を編集する。
7. _builtin/String.rd をコミットする。
8. ASSIGN ファイルの _builtin/String の「STATUS」欄に「done」と書き込む。
9. ASSIGN ファイルをコミットする。
今回も同じドキュメントが
http://doc.loveruby.net/wiki/Phase2WorkingScheme.html
に書いてあります。
--
青木峰郎
--
ML: ruby-reference-manual@m...
使い方: http://QuickML.com/
-> 156 2006-10-23 13:12 [aamine@l... ] 第 2 段階の作業方法 #2 162 2006-10-26 16:33 ┗[sheepman@s... ] 166 2006-10-27 18:05 ┗[aamine@l... ]