[前][次][番号順一覧][スレッド一覧]

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...         ]