April 29, 2005

JavaなRuby

最近Rubyでcgiを書いています。で、Rubyで外部モジュールを読み込む方法について思うことがあるので記事にしてみます。

Rubyでは外部ファイルを読み込む方法がrequireautoloadの2通りあります。requireは

require 'external.rb'
のように外部ファイルを指定してするだけなのに対し、autoloadは
autoload('External', 'external.rb')
のように読み込むクラス・モジュール(以下まとめてクラスと呼びます)と読み込むべきファイルの2つを指定します。大きな違いはrequireは指定された時点でそのファイルを読みに行くのに対し、autoloadは指定したクラス(先ほどの例でいうとExternal)がでてきた時点ではじめて外部ファイル(external.rb)を読みに行きます。

クラス・モジュールが最終的にいっぱいできたとしても、cgiなんかだと状態遷移の過程でその全てを使うということは少ないのではないかと思います。そこでautoloadを活用し効率的に外部ファイルを読みにいってはどうだろうかと思いました。

考えた方法は、ファイル名とそのファイル内で定義するクラスの間に命名規則を設け(例えばExternal.rbにはExternalというクラスが定義されている、これがJava的たる所以)、autoloadを指定しておくというのはどうでしょうか。
具体的には

AUTOLOADABLE_DIR = "autoloadable"
Dir.open(AUTOLOADABLE_DIR).each{|file|
    if file =~ /(.+)\.rb$/ then autoload($1, "#{AUTOLOADABLE_DIR}/#{file}") end
}
こんなコードを書いて、autoloadさせるファイルをAUTOLOADABLE_DIR下に配置すればよいと思います。
これで無駄なクラスを読み込むことなく、かつ気軽にコーディングできると思います。どうでしょう?

23:36 fenrir が投稿 : 固定リンク | | このエントリーを含むはてなブックマーク | トラックバック
このエントリーのトラックバックURL: https://fenrir.naruoka.org/mt/mt-tb.cgi/389
コメント
コメントする









名前、アドレスを登録しますか?
(次回以降コメント入力が楽になります)
  • 匿名でのコメントは受け付けておりません。
  • 名前(ハンドル名可)とメールアドレスは必ず入力してください。
  • メールアドレスを表示されたくないときはURLも必ず記入してください。
  • コメント欄でHTMLタグは使用できません。
  • コメント本文に日本語(全角文字)がある程度多く含まれている必要があります。
  • コメント欄内のURLと思われる文字列は自動的にリンクに変換されます。