すがブロ

sugamasaoのhatenablogだよ

Webアプリエンジニア養成読本ではあまり説明できなかったRubyの便利なヤーツ

Webアプリエンジニア養成読本 Advent Calendar 2014 - Qiita の21日目です。ガチで書くことがなくなってきました!恐縮です。

Webアプリエンジニア養成読本[しくみ、開発、環境構築・運用…全体像を最新知識で最初から! ] (Software Design plus)

Webアプリエンジニア養成読本[しくみ、開発、環境構築・運用…全体像を最新知識で最初から! ] (Software Design plus)

擬似変数たち

本書ではあまり触れていませんでしたが、Rubyでは擬似変数と呼ばれる、変数のような値がいくつか存在します。例えば、truefalseもそれに該当します。

それ以外で面白いものとして、__FILE____LINE__等があります。これらは実行した時点でのファイルのパスや行数を取得することができます。

ちなみに、Ruby 2.0.0からは__dir__ というメソッド(これは特殊変数ではないのだった)も追加されていて、これを使うと File.dirname(__FILE__) 相当……つまり、該当のファイルが格納されているディレクトリ部分を取得できます。

こんな感じのコードで試してみましょう。

cat hoge.rb
puts "start:hoge"
puts __FILE__
puts __LINE__
puts __dir__
puts "end:hoge"

これを実行してみると

$ ruby hoge.rb
start:hoge
hoge.rb
3
/private/tmp
end:hoge

こんな感じで取得できます。

詳しくは 変数と定数 を見てください。

その他によく使うもの

擬似変数のようなくくりではありませんが、例えばコマンドライン引数を扱うための値として、ARGVやARGFがあります。

ARGV.each do |arg|
  puts arg
end

これを引数付きで実行するとこんな感じになります。

$ ruby sample.rb foo bar baz
foo
bar
baz

ARGFを使うと、引数の値をファイルパスとみなして、内容を読み込むことができます。詳しくは constant Object::ARGVobject ARGF を参照してください。

ここらへんのオブジェクトなどを利用できるようになると、ちょっとしたコマンドラインツールを作るときに役に立ちますね。

おまけ

Rubyではputs等のレシーバを指定しないメソッドはおおよそKernelに定義されているものです。 module Kernel あたりを見ると、例えば exitsleep 等のメソッドが定義されているのがわかります。ちょっとしたコードを書くときに知っておくと便利なヤーツがあるので、ここらへんのメソッド・特殊変数は抑えておくと良いでしょう。

書かなくてはいけない宣伝

今回のエントリで書いたようなことは書けていませんが、書店などで見つけたらぜひ立ち読みでもしてみて、あわよくば購入してみてくださいね。

Webアプリエンジニア養成読本[しくみ、開発、環境構築・運用…全体像を最新知識で最初から! ] (Software Design plus)

Webアプリエンジニア養成読本[しくみ、開発、環境構築・運用…全体像を最新知識で最初から! ] (Software Design plus)

enjoy!