SlideShare a Scribd company logo
1 of 23
Download to read offline
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やりましょう!

More Related Content

Viewers also liked

これからはじめるCoda2とSublime Text 2
これからはじめるCoda2とSublime Text 2これからはじめるCoda2とSublime Text 2
これからはじめるCoda2とSublime Text 2masaaki komori
 
new Objctive-C literal syntax
new Objctive-C literal syntaxnew Objctive-C literal syntax
new Objctive-C literal syntaxWataru Kimura
 
blogサービスの全文検索の話 - #groonga を囲む夕べ
blogサービスの全文検索の話 - #groonga を囲む夕べblogサービスの全文検索の話 - #groonga を囲む夕べ
blogサービスの全文検索の話 - #groonga を囲む夕べMasahiro Nagano
 
Ruby1.9のfiberのかっこいい使い方
Ruby1.9のfiberのかっこいい使い方Ruby1.9のfiberのかっこいい使い方
Ruby1.9のfiberのかっこいい使い方Kindai University
 
本格的に始めるzsh
本格的に始めるzsh本格的に始めるzsh
本格的に始めるzshHideaki Miyake
 
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪Kunihiro TANAKA
 
Google borg と コンテナベース分散システムデザインパターン
Google borg と コンテナベース分散システムデザインパターンGoogle borg と コンテナベース分散システムデザインパターン
Google borg と コンテナベース分散システムデザインパターンktateish
 
プログラマとして仕事をするために勉強すること
プログラマとして仕事をするために勉強することプログラマとして仕事をするために勉強すること
プログラマとして仕事をするために勉強することなおき きしだ
 
Code as data as code.
Code as data as code.Code as data as code.
Code as data as code.Mike Fogus
 
受託開発時におけるAWSクラウド活用術
受託開発時におけるAWSクラウド活用術受託開発時におけるAWSクラウド活用術
受託開発時におけるAWSクラウド活用術Hiroshi Koyama
 
ARC環境で メモリリークを起こす 7つの方法
ARC環境で メモリリークを起こす 7つの方法ARC環境で メモリリークを起こす 7つの方法
ARC環境で メモリリークを起こす 7つの方法ushiostarfish _
 
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略Teppei Sato
 
Mobage を支える Ruby の技術 ~ 複数DB編 ~
Mobage を支える Ruby の技術 ~ 複数DB編 ~Mobage を支える Ruby の技術 ~ 複数DB編 ~
Mobage を支える Ruby の技術 ~ 複数DB編 ~Naotoshi Seo
 
ChefConf 2013: Beginner Chef Antipatterns
ChefConf 2013: Beginner Chef AntipatternsChefConf 2013: Beginner Chef Antipatterns
ChefConf 2013: Beginner Chef AntipatternsJulian Dunn
 
Scala 初めての人が Heroku で Web アプリを公開するまで
Scala 初めての人が Heroku で Web アプリを公開するまでScala 初めての人が Heroku で Web アプリを公開するまで
Scala 初めての人が Heroku で Web アプリを公開するまでHideaki Miyake
 

Viewers also liked (20)

Sinatraのススメ
SinatraのススメSinatraのススメ
Sinatraのススメ
 
これからはじめるCoda2とSublime Text 2
これからはじめるCoda2とSublime Text 2これからはじめるCoda2とSublime Text 2
これからはじめるCoda2とSublime Text 2
 
new Objctive-C literal syntax
new Objctive-C literal syntaxnew Objctive-C literal syntax
new Objctive-C literal syntax
 
blogサービスの全文検索の話 - #groonga を囲む夕べ
blogサービスの全文検索の話 - #groonga を囲む夕べblogサービスの全文検索の話 - #groonga を囲む夕べ
blogサービスの全文検索の話 - #groonga を囲む夕べ
 
Ruby1.9のfiberのかっこいい使い方
Ruby1.9のfiberのかっこいい使い方Ruby1.9のfiberのかっこいい使い方
Ruby1.9のfiberのかっこいい使い方
 
本格的に始めるzsh
本格的に始めるzsh本格的に始めるzsh
本格的に始めるzsh
 
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
いまさら聞けないDocker - 第5回コンテナ型仮想化の情報交換会@大阪
 
Google borg と コンテナベース分散システムデザインパターン
Google borg と コンテナベース分散システムデザインパターンGoogle borg と コンテナベース分散システムデザインパターン
Google borg と コンテナベース分散システムデザインパターン
 
プログラマとして仕事をするために勉強すること
プログラマとして仕事をするために勉強することプログラマとして仕事をするために勉強すること
プログラマとして仕事をするために勉強すること
 
Project Lambdaの基礎
Project Lambdaの基礎Project Lambdaの基礎
Project Lambdaの基礎
 
Code as data as code.
Code as data as code.Code as data as code.
Code as data as code.
 
受託開発時におけるAWSクラウド活用術
受託開発時におけるAWSクラウド活用術受託開発時におけるAWSクラウド活用術
受託開発時におけるAWSクラウド活用術
 
ARC環境で メモリリークを起こす 7つの方法
ARC環境で メモリリークを起こす 7つの方法ARC環境で メモリリークを起こす 7つの方法
ARC環境で メモリリークを起こす 7つの方法
 
ES6 at PayPal
ES6 at PayPalES6 at PayPal
ES6 at PayPal
 
Eclipse活用術
Eclipse活用術Eclipse活用術
Eclipse活用術
 
Storm Anatomy
Storm AnatomyStorm Anatomy
Storm Anatomy
 
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
 
Mobage を支える Ruby の技術 ~ 複数DB編 ~
Mobage を支える Ruby の技術 ~ 複数DB編 ~Mobage を支える Ruby の技術 ~ 複数DB編 ~
Mobage を支える Ruby の技術 ~ 複数DB編 ~
 
ChefConf 2013: Beginner Chef Antipatterns
ChefConf 2013: Beginner Chef AntipatternsChefConf 2013: Beginner Chef Antipatterns
ChefConf 2013: Beginner Chef Antipatterns
 
Scala 初めての人が Heroku で Web アプリを公開するまで
Scala 初めての人が Heroku で Web アプリを公開するまでScala 初めての人が Heroku で Web アプリを公開するまで
Scala 初めての人が Heroku で Web アプリを公開するまで
 

More from Kazuhiro Serizawa

第八回 #渋谷Java 最近のjava PaaS事情
第八回 #渋谷Java 最近のjava PaaS事情第八回 #渋谷Java 最近のjava PaaS事情
第八回 #渋谷Java 最近のjava PaaS事情Kazuhiro Serizawa
 
第六回 #渋谷java Javaを書き始めて 1年半が経って思うこと
第六回 #渋谷java Javaを書き始めて 1年半が経って思うこと第六回 #渋谷java Javaを書き始めて 1年半が経って思うこと
第六回 #渋谷java Javaを書き始めて 1年半が経って思うことKazuhiro Serizawa
 
第四回 #渋谷java オープニング
第四回 #渋谷java オープニング第四回 #渋谷java オープニング
第四回 #渋谷java オープニングKazuhiro Serizawa
 
Juzu Frameworkを使ってみた @第四回 渋谷java
Juzu Frameworkを使ってみた @第四回 渋谷javaJuzu Frameworkを使ってみた @第四回 渋谷java
Juzu Frameworkを使ってみた @第四回 渋谷javaKazuhiro Serizawa
 
第3回渋谷javaオープニング
第3回渋谷javaオープニング第3回渋谷javaオープニング
第3回渋谷javaオープニングKazuhiro Serizawa
 
第二回渋谷Java Opening #渋谷Java
第二回渋谷Java Opening #渋谷Java第二回渋谷Java Opening #渋谷Java
第二回渋谷Java Opening #渋谷JavaKazuhiro Serizawa
 
じっくりコトコト煮込んだJavaスープ
じっくりコトコト煮込んだJavaスープじっくりコトコト煮込んだJavaスープ
じっくりコトコト煮込んだJavaスープKazuhiro Serizawa
 
PHPerがJava屋になるために乗り越えたこと
PHPerがJava屋になるために乗り越えたことPHPerがJava屋になるために乗り越えたこと
PHPerがJava屋になるために乗り越えたことKazuhiro Serizawa
 
第一回Shibuya.javaオープニング
第一回Shibuya.javaオープニング第一回Shibuya.javaオープニング
第一回Shibuya.javaオープニングKazuhiro Serizawa
 

More from Kazuhiro Serizawa (10)

Introduction to Retrofit
Introduction to RetrofitIntroduction to Retrofit
Introduction to Retrofit
 
第八回 #渋谷Java 最近のjava PaaS事情
第八回 #渋谷Java 最近のjava PaaS事情第八回 #渋谷Java 最近のjava PaaS事情
第八回 #渋谷Java 最近のjava PaaS事情
 
第六回 #渋谷java Javaを書き始めて 1年半が経って思うこと
第六回 #渋谷java Javaを書き始めて 1年半が経って思うこと第六回 #渋谷java Javaを書き始めて 1年半が経って思うこと
第六回 #渋谷java Javaを書き始めて 1年半が経って思うこと
 
第四回 #渋谷java オープニング
第四回 #渋谷java オープニング第四回 #渋谷java オープニング
第四回 #渋谷java オープニング
 
Juzu Frameworkを使ってみた @第四回 渋谷java
Juzu Frameworkを使ってみた @第四回 渋谷javaJuzu Frameworkを使ってみた @第四回 渋谷java
Juzu Frameworkを使ってみた @第四回 渋谷java
 
第3回渋谷javaオープニング
第3回渋谷javaオープニング第3回渋谷javaオープニング
第3回渋谷javaオープニング
 
第二回渋谷Java Opening #渋谷Java
第二回渋谷Java Opening #渋谷Java第二回渋谷Java Opening #渋谷Java
第二回渋谷Java Opening #渋谷Java
 
じっくりコトコト煮込んだJavaスープ
じっくりコトコト煮込んだJavaスープじっくりコトコト煮込んだJavaスープ
じっくりコトコト煮込んだJavaスープ
 
PHPerがJava屋になるために乗り越えたこと
PHPerがJava屋になるために乗り越えたことPHPerがJava屋になるために乗り越えたこと
PHPerがJava屋になるために乗り越えたこと
 
第一回Shibuya.javaオープニング
第一回Shibuya.javaオープニング第一回Shibuya.javaオープニング
第一回Shibuya.javaオープニング
 

Rubyはとても「人間的」