はじめてのRuby
2009 年 11 月 4 日 by 山平色々と気になる言語だったRubyをそろそろ覚えてみようかな、と重い腰を上げてみました。
訳あってRubyの使える環境でgemが使えないという制約があったため、気になるライブラリから順に遊びながら覚えるという方法が取れませんでした。
じゃあ、使えるライブラリは何?というところから入ることになりました。
ライブラリを読み込むパスはどこを見ているのかというと、$LOAD_PATHという組み込みの変数にあるとのこと。
組み込み変数 – Rubyリファレンスマニュアル # $LOAD_PATH
この中に入っているライブラリが標準的に使えるもの、という理解でよいようです。
で、中身を見てみると。。。
p $LOAD_PATH => ["/usr/local/lib/site_ruby/1.8", "/usr/local/lib/site_ruby/1.8/i686-linux-lp", "/usr/local/lib/site_ruby/1.8/i386-linux", "/usr/local/lib/site_ruby", "/usr/lib/ruby/1.8", "/usr/lib/ruby/1.8/i686-linux-lp", "/usr/lib/ruby/1.8/i386-linux", "."]
これはパスなので、何が入っているのかは1つずつ見ていかないとダメなようです。
…がしかし、ほとんどが存在しないディレクトリや空っぽのディレクトリで、正解はどれだっけ?と探すのが非常に面倒です。
じゃあ複数のパスの中身を表示するプログラムをRubyで書いてみることにします。
$LOAD_PATH.each{|path| puts `ls -F #{path}`} => 〜中略〜 zlib.so ls: cannot access /usr/lib/ruby/1.8/i386-linux: No such file or directory 〜中略〜 Desktop/ Document/ Download/ Image/ Music/ Template/ Video/ インド風バターチキンカレー
あらっ、~/(ユーザディレクトリ)の内容も見えちゃってる、と思ったら$LOAD_PATHの最後に”.”(カレントディレクトリ)が入っていました。これはいらないから出力対象から外したいですね。
Rubyは配列同士の引き算ができるようです。
珍しい、そして便利そうな機能なので早速使ってみます。
あと、存在しないディレクトリののエラーも不細工なので出さないようにしてみます。
perlでお馴染みのif修飾子が使えました。
Array – Rubyリファレンスマニュアル # self – other
制御構造 – Rubyリファレンスマニュアル # if 修飾子
($LOAD_PATH-['.']).each {|path| puts `ls -F #{path}` if File.directory?(path) } => i686-linux-lp/ 1.8/ English.rb Env.rb abbrev.rb base64.rb 〜中略〜 version.h zlib.so
最後に$LOAD_PATHの中身が表示されるのはirbだからのようです。
libdirs.rbというファイルにして実行すると表示されません。
このファイルの出力結果を他のコマンドに渡すと、簡単なインストール済みのライブラリ検索が実現できます。
$ ./libdirs.rb | grep -i web
webrick/
webrick.rb
$
引っかかったライブラリがどんなものかを調べるときはriやrdocコマンドを使う…はずなんですが。。。
なんだかうまくいかない。。。
Rubyで、gem installした後、ざっとドキュメントを見たいとき、どうするのが良いでしょうか?→gem serverで解決
今日はここまでにします。