Rubyはとても 
「人間的」 
2014年11月8日 第97回 IWDD 
株式会社ハートレイルズ 芹沢和洋
自己紹介 
@seri_k 
Kazuhiro Serizawa 
web engineer
Work at 
http://www.heartrails.com/
Remote 
Worker
概要 
• Rubyとの出会い 
• Ruby is 人間的言語
Rubyとの出会い 
http://anond.hatelabo.jp/20100916072052
当時の認識 
Ruby.is_ネタ言語? #true
Rubyに興味を持った 
エントリー 
残念ながら現在はリンク切れ… 
うろ覚えですがRubyは楽しく人間的に書ける! 
という内容だった気がする…
Rubyに興味を持った 
エントリー 
当時の私のはてブコメント
times 
for (i = 0; i < 10; i ++){ hoge() } 
while(true){ if(i => 10)break; hoge(); i++; } 
10.times {hoge()}
どっちが分かりやすい? 
for (i = 0; i < 10; i ++){ 
hoge() 
10回hoge()を } 
実行したい 
10.times { hoge() }
因みに 
• 1から10まで順番に引数を渡して実行する 
→ 1.upto(10) { |i| hoge(i) } 
• 10から1まで順番に引数を渡して実行する 
→10.downto { |i| hoge(i) } 
• 1..10の範囲で実行する 
→(1..10).each{ hoge() }
これを見て自分は 
こう思ったッス 
Rubyは人間的だ!
人間的とは 
• 人間が「こうしたい」と思う「こうしたい」の文脈をその 
まま実装に落とせるので「人間的」と思った 
(私がそう思っただけで一般的な名称ではありませんw) 
• プログラミング言語の都合に合わせて変換する手間が少な 
い 
• 人間は「同じ処理を10回やりたい」と思った時に「1回 
処理を実行する度に数値を0から1ずつ増やして数値が9 
になるまで繰り返す」とは考えない
Arrayも人間的 
• 要素の順番を 
ひっくり返したい! 
• 指定の要素が 
含まれているか 
知りたい! 
• 重複を排除したい! 
Array#reverse 
Array#include?({要素}) 
Array#uniq
Arrayも人間的 
[1,2,3,4,5].reverse #=> [5,4,3,2,1] 
[1,2,3,4,5].include?(1) #=> true 
[1,1,1,2,3,4].uniq #=> [1,2,3,4]
Rubyの便利ライブラリ 
ActiveSupportの例 
• Time#today? 
→今日だったらtrue, そうじゃなかったらfalse 
• Time#next_week→来週の月曜日の0:00分のTimeオ 
ブジェクトを返す 
• Time#weeks_ago(week) / Time#days_ago(day) 
→X週間前、X日前の日付のTimeオブジェクトを返す
結果 
自主規制w 
まつもとゆきひろ氏(Ruby作者)曰く 
「Rubyをキメると気持ちいい!」
他にも人間的に書ける要素 
• 他の言語と比べてカッコをかなり省略できる 
print(‘Hello world’) print ‘Hello world’ 
def say(message) 
def say message 
print(message) 
print message 
end 
end
他にも人間的に書ける要素 
• カッコを省略すると自然言語っぽい! 
print ‘Hello world’ 
『「Hello World」と表示しろ!』 
と言っているように読めません? 
『「ふなっしー!」と言え!』 
と言っているように読めません? 
say ‘ふなっしー!’
自然言語のように読める!ということで 
DSLを定義するに使われる事が多い 
• 例:chefのレシピ 
# /tmp/dirの権限とオーナーを変更する 
remote_directory "/tmp/dir" do 
source "tmpdir" 
owner "apache" 
group "apache" 
mode "0755" 
end
Ruby on Railsの例 
class Product < ActiveRecord::Base 
has_many :product_categories 
end 
• “has_many”は内部的にはDBの 
リレーションを定義する為のメソッド 
• has_many {テーブル名}と書くことでproductsとい 
うテーブルがproduct_categoriesというテーブル 
を複数所有している関係(has-many)だと読める
まとめ 
• Rubyはとても人間的で書いてて気持ちいい言語 
• 「Rubyをキメると気持ちいい!」はマジだった 
• なのでRubyやりましょう!

Rubyはとても「人間的」