Ruby入門
谷口耕平 @ran_tan
ハウインターナショナル
でRuby on Railsを使って
大学向けの教育サービスを
作ってます。
自己紹介
発表の内容
• CやJavaと比較しながらRubyを紹介します。
• 前提:どの言語を使うかは適材適所。利用シー
ンの定義無しに言語の優劣は語れない。
• 最初にざっくりとRubyの特徴を説明します。
• 次にC、Javaと比較しながら基本的な構文を紹
介します。
• 最後にRubyの書籍を紹介します。
発表の内容
• CやJavaと比較しながらRubyを紹介します。
• 前提:どの言語を使うかは適材適所。利用シー
ンの定義無しに言語の優劣は語れない。
• 最初にざっくりとRubyの特徴を説明します。
• 次にC、Javaと比較しながら基本的な構文を紹
介します。
• 最後にRubyの書籍を紹介します。
!Rubyとは?
• 島根県松江市在住の まつもとゆきひろ さん

(通称 Matz)を中心に開発されているOSSのプ
ログラミング言語
• Rubyは今年で23歳くらい
• 最新バージョンは v2.3.0
• 日本人のコミッターが多く、国内のRubyコ
ミュニティは非常に活発。
Rubyを動かそう!
• RubyInstallerを使う (僕が普段windows使ってないので、詳しいことはわかりません><)
• RubyInstaller http://rubyinstaller.org/
• 自分でビルドする場合は以下の電子書籍が参考になるらしい。
• Ruby環境構築講座 Windows編 http://tatsu-zine.com/books/winrubybuild
"

$
Windows
OS X
Linux
• 最初から入ってる。
• 本格的に使うなら rvm や rbenv の様な Ruby のバージョン管理ツールを使ってインストールす
るのがオススメ。複数バージョンの Ruby をインストールし、切り替え可能。
• 日本だと rbenv の方がよく使われている印象。僕も rbenv 使ってます。
• rbenv https://github.com/rbenv/rbenv
• rvm https://rvm.io/
• OS X と同様に rbenv や rvm を使ってインストールするのがオススメ。
参考: Rubyist Magazine - Rubyの歩き方 http://magazine.rubyist.net/?FirstStepRuby
Rubyのここが好き
Rubyは楽しい!
Rubyは
「読みやすい」かつ
「書きやすい」ので
「作りたいものに集中出来る」
そして、作る事は楽しい。
短く言うと「Rubyは楽しい」
「Rubyは楽しい!」を支えるもの
• 全てが「オブジェクト」である
• 充実した組み込みライブラリ
• ブロック構文
• 黒魔術(メタプログラミング)
全てが「オブジェクト」である
• 数値も文字列も配列もオブジェクトなので直感
的なコードが書ける
10.times do
puts 'Hello, World!'
end
'Hello, World!'.upcase # => "HELLO, WORLD!"
# 1文字ずらすシーザー暗号の例
'Hello, World!'.each_char.map {|c| c.next }.join
# => Ifmmp-!Xpsme"
['Ruby', 'Matz', 'eZUKA Rails'].select do |i|
i.include?('R')
end
# => ["Ruby", "eZUKA Rails"]
充実した組み込みライブラリ
• ドキュメント http://docs.ruby-lang.org/ja/
• 特に、String, Array, Hashなどよく使うクラ
スのメソッドが充実しているので、いろんな処
理がさくっと書ける。
Rubyで使えるライブラリ
!
Ruby
組み込みライブラリ
標準添付ライブラリ
Rubyをインストールすると入るもの
+ + RubyGems
OSSの gem を

gem コマンドでインストール可能
RubyGems.org には様々なライブラリ( gem )がある
z
z
沢山ある
https://rubygems.org/ で探せる。
https://www.ruby-toolbox.com/ で探すのもオススメ。
ブロック構文
• こういうの。
• メソッドの引数に処理の固まりを渡すことが出
来る。
• Cだと関数ポインタ使うと似たような事できる
けど、冗長になる。JavaでもLambda使うと
良いけど、比べると若干冗長。
10.times do
puts 'Hello, World!'
end
Cの例
#include <stdio.h>
void times(int times , void (*func)(int));
void myfunc(int i);
int main() {
times(10, &myfunc);
return 0;
}
void times(int times , void (*func)(int)) {
for(int i = 0; i < times; i++) {
func(i);
}
}
void myfunc(int i) {
printf("%i: Hello, World!n", i);
}
Javaの例
黒魔術(メタプログラミング)
• 下手に使うとダークサイドに落ちてしまうので、
通常の構文に慣れるまでは置いておきましょう。
• Rubyに新しい仕様を追加しているかのように
見えるほどの、非常に強い拡張性をRubyに与
えている。便利な分、使い方を誤ると暗黒面に
堕ちてしまう。
• DSLの作成にもよく使われるテクニック
発表の内容
• CやJavaと比較しながらRubyを紹介します。
• 前提:どの言語を使うかは適材適所。利用シー
ンの定義無しに言語の優劣は語れない。
• 最初にざっくりとRubyの特徴を説明します。
• 次にC、Javaと比較しながら基本的な構文を紹
介します。
• 最後にRubyの書籍を紹介します。
done!
発表の内容
• CやJavaと比較しながらRubyを紹介します。
• 前提:どの言語を使うかは適材適所。利用シー
ンの定義無しに言語の優劣は語れない。
• 最初にざっくりとRubyの特徴を説明します。
• 次にC、Javaと比較しながら基本的な構文を紹
介します。
• 最後にRubyの書籍を紹介します。
done!
ここからはRubyの基本構文
を見ていきましょう。
Hello, World!
class Hello {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
#include <stdio.h>
int main() {
printf("Hello, World!n");
return 0;
}
puts 'Hello, World!'
変数宣言
int num = 1;
num = 1
• Rubyの変数には型がない。整数を入れた変数
に、後から文字列を代入することも出来る。
条件分岐
# if
if num.even?
puts '偶数だよ'
elsif num.odd?
puts '奇数だよ'
else
puts 'ほげー'
end
# unless
unless num.even?
puts '奇数だよ'
else
puts '偶数だよ'
end
# 後置
puts '偶数だよ' if num.even?
puts '奇数だよ' unless num.even?
if (num % 2 == 0) {
printf("偶数だよn");
} else if (num % 2 != 0) {
printf("奇数だよn");
}
JavaはCとほとんど同じなので省略
ループ
array = [1, 2, 3, 4, 5]
array.each do |i|
puts i
end
int array[] = {1, 2, 3, 4, 5};
for(int i : array) {
System.out.println(i);
}
int array[] = {1, 2, 3, 4, 5};
int array_length = sizeof array /sizeof array[0];
for(int i = 0; i < array_length; i++) {
printf("%in", array[i]);
}
Rubyのループ
• while, for, loopといった構文もあるが、余り
使われない。
• eachメソッドを使うのが基本。
• Arrayなどの繰り返し処理の対象となるクラス
はEnumerableモジュールがmixinされており、
mapやreduceと言ったメソッドも使える。
(長くなるので、割愛)
ここからはOOPに関して、
RubyとJavaを比較していきます。
RubyとJavaはどちらもオブジェクト指向プログラ
ミング(OOP)言語だけど、微妙に違ったアプローチ
を取っている。
型へのアプローチ
ここにRubyとJavaの思想の違いが現れている。
Rubyはプログラマの書きやすさを壊さない範囲で性能面の最適化をやっている。
Javaははじめからパフォーマンスを考慮して、プリミティブ型を導入し、オブ
ジェクト指向の世界を歪めている。
!
%
純粋なオブジェクト指向言語とは言いがたい
• 全てがオブジェクトというわけではない
• プリミティブ型がある
Ruby
Java
純粋なオブジェクト指向言語
• 全てがオブジェクト
型付けへのアプローチ
!
% 静的型付け
• 変数やメソッドの宣言時に型を宣言する
Ruby
Java
動的型付け
• 変数やメソッド作成時に型を宣言しない。
• ダックタイピング
• 外から見た振る舞いが同じなら、同じ型と

見なす
多重継承へのアプローチ
!
%
Interface
• APIが宣言された Interface をクラスに追加

し実装することで、クラスを拡張する。
• Java8からインターフェースが実装を持てる

ようになったため、RubyのMixinと同じこ

とが出来るようになった??
• 参考: http://equj65.net/tech/java8mixin/
Ruby
Java
Mixin
• 機能が定義されたそれだけではインスタンス

を生成できないModuleをクラスに追加し、

拡張する。
private, protectedの違い
!
%
• クラス内のみアクセス可能
• クラス内、同一パッケージ、サブクラスから

アクセス可
Ruby
Java
• レシーバ無しでしか呼び出せない
• そのメソッドを持つオブジェクトが self である

コンテキスト(メソッド定義式や instance_eval

)でのみ呼び出せる
参考: Ruby ¦ Ruby の private と protected 。歴史と使い分け - Qiita http://qiita.com/tbpgr/items/6f1c0c7b77218f74c63e
違うと言う事だけは覚えておきましょう。
発表の内容
• CやJavaと比較しながらRubyを紹介します。
• 前提:どの言語を使うかは適材適所。利用シー
ンの定義無しに言語の優劣は語れない。
• 最初にざっくりとRubyの特徴を説明します。
• 次にC、Javaと比較しながら基本的な構文を紹
介します。
• 最後にRubyの書籍を紹介します。
done!
done!
発表の内容
• CやJavaと比較しながらRubyを紹介します。
• 前提:どの言語を使うかは適材適所。利用シー
ンの定義無しに言語の優劣は語れない。
• 最初にざっくりとRubyの特徴を説明します。
• 次にC、Javaと比較しながら基本的な構文を紹
介します。
• 最後にRubyの書籍を紹介します。
done!
done!
Ruby入門書籍
たのしいRuby
• 他のプログラミング言語の経験やOOPへの理解

に自身が無い方にオススメ。
• 丁寧な説明でじっくり学べます。
初めてのRuby
• 他の言語の経験があり、OOPも理解されている

方にオススメ。
• 簡潔な説明で、厚みも薄いので読みやすい。
パーフェクトRuby
• 網羅的で良いらしいです。(僕は読んでないです、、)
• rubyの構文や組み込みライブラリはもちろんメタプログラ

ミングからgemの作り方までおさえてあります。
もっとRubyを使いこなすための書籍
まつもとゆきひろコードの世界
• Rubyの思想的なところが理解できます。
• オブジェクト指向の話も多い。
プログラミング言語Ruby
• Rubyの仕様がわかる本。詳細に書いてある。
• 手元に1冊あると心強い。
メタプログラミングRuby
• メタプログラミングの理解は脱Ruby初心者の条件!?
• 1週間でメタプログラミングをマスター出来る構成になって

ます。Rails内部のメタプログラミングについての解説もあ

ります。
もっとRubyを使いこなすための書籍
Effective Ruby
• Rubyをもっと効果的に、効率的に使うための

ノウハウが詰まってます。良書。
• こちらも脱初心者のための必読書。
Rubyのしくみ
• Rubyの中身が解説してある数少ない内の1冊
• 知的好奇心を満足させるためにも良い本。

(僕はまだ読めてないんですが、、)
発表の内容
• CやJavaと比較しながらRubyを紹介します。
• 前提:どの言語を使うかは適材適所。利用シー
ンの定義無しに言語の優劣は語れない。
• 最初にざっくりとRubyの特徴を説明します。
• 次にC、Javaと比較しながら基本的な構文を紹
介します。
• 最後にRubyの書籍を紹介します。
done!
done!
done!
発表の内容
• CやJavaと比較しながらRubyを紹介します。
• 前提:どの言語を使うかは適材適所。利用シー
ンの定義無しに言語の優劣は語れない。
• 最初にざっくりとRubyの特徴を説明します。
• 次にC、Javaと比較しながら基本的な構文を紹
介します。
• 最後にRubyの書籍を紹介します。
done!
done!
done!
楽しいRubyistライフを
お過ごしください!

C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1