RubyGemsってツールで使われてる、Rubyのツールやライブラリをひとまとめにしたパッケージだよ。
最近では、新しいツールやライブラリをインストールするときには、まずgemからインストール! っていうのが定番になってきてるね。
- 参考:
- ライブラリ - Ruby公式サイト
http://pd.appbank.net/m206
をインストールするためのツールで、Ruby 1.9からはRubyに標準で組み込まれてるよ。詳しくはの説明を見てね。
Rubyに標準添付されてるライブラリの1つで、ファイル操作系の便利メソッドをたくさん集めたライブラリだよ。
cd, cp, cp_r, install, ln, mv, などなど……この辺のメソッド名を見たら、Linuxを使ってる人はどんな機能かピンとくるんじゃないかな?
- 参考:
- FileUtilsモジュール - Rubyリファレンスマニュアル
Ruby 1.9.1よりも前、たとえばRuby 1.8ではこのエンコーディング宣言は必要なかったんだよ。だからRuby 1.8だけを使うのならこの宣言もいらないんだけど、先のことを考えるならつけておいたほうが○、ってとこだね。
rakeはRuby 1.8にも対応してるんだけど、ruby本体に標準添付されるようになったのは、基本的にRuby 1.9.1以降なんだ。
ただし、Windows環境でActiveScriptRubyやRumixを使ってrubyをインストールしたのであれば、もしかしたらもうrakeも入ってるかもしれないね。
試しに、コマンドラインでrake
って打ってみると分かるかも。
rakeの最新版はRubyGemsで入手できるから、RubyGemsが入ってる(gemコマンドが実行できる)環境なら、gem install rake
コマンドの実行でOKだよ。
desc 'Create hello-rake.txt'
task :testfile do
open('hello-rake.txt', 'w'){|f|
f.write('Hello Rake world.')
}
end
interactive rubyの略で、小さなRubyコードをサクッと実行できるツール(対話式シェル)だよ。Ruby初心者から上級者まで、みんながお世話になるツールの1つじゃないかな?
最近ではpryっていう強化版も出てるね。
- 参考:
- irb - Rubyリファレンスマニュアル
Rakeの最新版は0.9.2.2なんだけど、最新版があるのはRubyGems.orgだけで、RubyForgeの方にはRake 0.8.7までしか置かれてないよ。
これはgemの標準ダウンロード先が、RubyForgeからRubyGems.orgに移行したからみたい。
- 参考:
- rake | RubyGems.org
パート1でも少しだけ話題に出したけど、ruby 1.8系と1.9系では文字エンコーディングの扱いが大きく違うから、ruby 1.8系と1.9系の両方に対応させようとすると、けっこう面倒な書き方をしないといけないんだよね。
というわけで、ここではサンプルとしての利便性を優先して、ruby1.8系に限定したスクリプトにしてるよ。あしからずご了承ください。
- 参考:
- Ruby 1.9.1の歩き方 - Rubyist Magazine
SQLを実行してデータをとってくるのはeachメソッドもallメソッドも同じなんだけど、eachメソッドではデータベースから1行ずつデータを読みこんで処理するのに対して、allメソッドでは一度に全行のデータを読み込んで、配列の中に格納することになる。
その結果、たとえばデータを一度に10万行も取得したとすると……10万件分のデータをいったんメモリに読み込むallメソッドでは、どうしても分が悪いんだ。
裏で何をやってるのかよくわからないコードだったり、コードをパッと見ただけでは中の動きが想像もつかないくらい複雑だったりするコードに対して、「黒魔術」って呼び方をすることがあるんだ。
とくにRubyは、動的言語で自由度もかなり高いから、いろいろな黒魔術的コードの余地があるし、実際にRailsなんかでは黒魔術的コードが多い(もしくは昔は多かった)ってよく言われるね。
method_missingは黒魔術の入り口。
- 参考:
- Rubyの黒魔術
- Rubyのmethod_missingを使って黒魔術を実装する
を使ってインストールしたは、じつはRubyのバージョンごとに別々に管理されているんだよ。
たとえば、ruby 2.0.0でインストールしたgemは、あくまでruby 2.0.0用にインストールされているだけで、ruby 2.1.0にバージョンアップしたときはもう1回インストールし直さないといけなくなっちゃったりする。なぜかというと、ruby 2.0.0用のgemとruby 2.1.0用のgemが別々に管理されてるから。
ただ、ruby 2.1.0→2.1.3 のように、大きなバージョンの変更がない場合であれば、入れ直さなくて済む場合もあるよ。