SlideShare una empresa de Scribd logo
1 de 24
Descargar para leer sin conexión
Rubyをちょっと理解しよう
UniStudy#1 @ シェアハウスコクリエ
Unicast Inc. Web Engineer          
疋田 駿
発表するひと
http://qiita.com/shunhikita
https://twitter.com/shunhikita
株式会社ユニキャスト セールスエンジニア
▷ 2015年入社の田舎暮らし新卒文系Webエンジニア(23
歳・経営学部卒)
▷ Ruby, Ruby on Rails, PHP, AngularJS, C#, Android
▷ Microservicesなサービス作り希望
話すこと
▷ オープンクラスとモンキーパッチ
▷ メソッドを呼び出すと何が起きる?
▷ Rubyにおけるselfキーワード
※私もRuby勉強中です。
オープンクラス
- リファクタリングをする場面 -
def to_alphanumeric(s)
s.gsub(/[^ws]/, ‘’)
end
全ての句読点や特殊文字を削除してアルファベットとス
ペースを残すようなもの
なんかオブエジェクト指向っぽくないですね。
sのオブジェクトがgsubメソッド持ってなかったら
… NoMethodError !!
“
外部メソッドに文字列オブジェクトを渡して
変換してもらうんじゃなくて、文字列自身に
変換してもらったほうがいいんじゃない?
“
でも、文字列って標準のStringクラスだし
AlphanumericStringみたいなクラスを作るの?
オープンクラスを使おう!
オープンクラス
- リファクタリングをする場面 -
class String
def to_alphanumeric
gsub(/[^ws]/, ‘’)
end
end
Stringクラスをオープン
してメソッドを追加。
Rubyでは1度定義したクラスをオープンして
好きなメソッドを追加できる。
“***UniStydy#1 ***”.to_alphanumeric
# => UniStudy1
実際にやってみる
クラスCを定義して
x メソッドを定義する
クラスCをオープンして
y メソッドを定義する
オブジェクトを作成してxを呼
ぶ。
yメソッドも呼んでみる
ちなみに...
Rubyではインスタンス変数
は値が代入されたときに初め
て出現します。
オブジェクトのクラスと
インスタンス変数につながり
はない
クラスとオブジェクトの関係
▷ オブジェクトにはインスタンス変数とクラスへの参照が
あるだけ
▷ クラスとインスタンス変数に繋がりはない
▷ メソッドはオブジェクトが持っているのではなくクラスが持ってい
る。
obj
@v = 1
MyClass
my_method()
クラス
メソッドインスタンス変数
オブジェクト クラス
オープンクラスの問題点
▷ 既存のメソッドを上書きできること
▷ 他のプログラムに影響を与えてしまう場合がある
=> このようなコードをモンキーパッチと呼ぶ
しっかりと管理でき、意図してモンキーパッチを
使うのであればよいが、それ以外は使わない方が
無難。
Refinementsという解決策
=> 今日はやりません
メソッドを呼び出すと何が起こる?
1. メソッドを探す
2. メソッドを実行する。
このプロセスは全てのオブジェクト指向で起きている。
メソッド探索
メソッドがレシーバのクラスに入り、
メソッドを見つけるまで継承チェーンを遡ること。
obj MySubClass
MyClass
my_method()
Object
Kernel
BasicObject
my_method()
発見!
継承チェーンにはモ
ジュールも含まれま
す
includeとprepend
include ・・・インクルードしたクラスの上に挿入される
prepend・・・インクルードしたクラスの下に挿入される
メソッドの実行
このメソッドを実行するにはRubyは2つの
ことを知らなければならない
1
@x が属しているオブジェクトはな
に?
2
my_other_methodが呼び出され
ているオブジェクトはなに?
=> どちらもレシーバに属している。
Rubyはメソッドが呼び出された時にレシーバの参照を
覚えておく必要がある。 => selfキーワード
selfキーワード
Rubyのコードには常にselfの役割を担う、カレントオブジェクトという
オブジェクトの参照を持っている。
▷ メソッドを呼び出すと、レシーバがselfになる
▷ レシーバを明示せずにメソッドを呼び出すと、selfに対するメ
ソッド呼び出しになる
▷ インスタンス変数は常にselfのインスタンス変数とみなされる
Rubyの達人になりたければ常にselfを意識してプログラミングせよ。
とのことです。
my_methodを呼び出した時
点でselfはobjの参照を持つ
▷ @xはselfの参照objのインスタンス変数を使用する
▷ my_other_methodも同様にobjのメソッドを呼び出すと理解
できる
じゃあ見てみよう
クラス、モジュール定義とself
▷ クラスやモジュール定義の内側(メソッドの外側)ではselfはク
ラスやモジュールそのものになる。
class MyClass
self # => MyClass
end
Rubyはすべてのインスタンス変数はselfに属するものと思ってい
る。
selfはMyClass
そのもの
selfはレシーバ
になる
クラスインスタンス変数と
インスタンス変数は別物!
間違えるな!
つまり、
クラスインスタンス変数@xはMyClassというClassクラスの
オブジェクトのインスタンス変数である。
一応補足 : クラスを紐解くと...
▷ MyClassというクラスはClassクラスのオブジェクト
▷ MyClassという名前はただの定数
MyClass = Class.new do
def my_method; “my_method”; end
end
class MyClass
def my_method; “my_method”; end
end
こう書き換えることも出来る
そんなとこで今日はおしまいです。
次回予告
Rubyのメタプログラミングに入門しよう

Más contenido relacionado

La actualidad más candente

Rails+Markdownでなにかつくる
Rails+MarkdownでなにかつくるRails+Markdownでなにかつくる
Rails+MarkdownでなにかつくるHirata Tomoko
 
MobiRubyでiOSアプリをつくろう
MobiRubyでiOSアプリをつくろうMobiRubyでiOSアプリをつくろう
MobiRubyでiOSアプリをつくろうJunya Murabe
 
Electronからはじめるnodejs
ElectronからはじめるnodejsElectronからはじめるnodejs
ElectronからはじめるnodejsHirata Tomoko
 
Railsのフロントエンド開発を考える
Railsのフロントエンド開発を考えるRailsのフロントエンド開発を考える
Railsのフロントエンド開発を考えるHirata Tomoko
 
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRubyKanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRubyShinichi Okada
 
Parse.comを使ってみた感想とまとめ
Parse.comを使ってみた感想とまとめParse.comを使ってみた感想とまとめ
Parse.comを使ってみた感想とまとめFumiya Sakai
 
VimとRubyのアツい関係
VimとRubyのアツい関係VimとRubyのアツい関係
VimとRubyのアツい関係Misao X
 
C#のやさしさを語る時間
C#のやさしさを語る時間C#のやさしさを語る時間
C#のやさしさを語る時間kamukiriri
 
Sinatra軽量Web開発 - LOUPE Study #1
Sinatra軽量Web開発 - LOUPE Study #1Sinatra軽量Web開発 - LOUPE Study #1
Sinatra軽量Web開発 - LOUPE Study #1Takuya Mukohira
 
Container view活用術とポイントになる部分
Container view活用術とポイントになる部分Container view活用術とポイントになる部分
Container view活用術とポイントになる部分Fumiya Sakai
 
Railsチュートリアル(second)を終えて
Railsチュートリアル(second)を終えてRailsチュートリアル(second)を終えて
Railsチュートリアル(second)を終えてHirata Tomoko
 
コードに基づくモデルによる IntelliCode
コードに基づくモデルによる IntelliCodeコードに基づくモデルによる IntelliCode
コードに基づくモデルによる IntelliCodem ishizaki
 
で、次は何がくるの? - 第2回 TIS Matsuri
で、次は何がくるの? - 第2回 TIS Matsuriで、次は何がくるの? - 第2回 TIS Matsuri
で、次は何がくるの? - 第2回 TIS MatsuriYoshitaka Kawashima
 
GopherJS + Nashorn
GopherJS + NashornGopherJS + Nashorn
GopherJS + NashornTakuya Ueda
 
Kids, Ruby, Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜
Kids,Ruby,Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜Kids,Ruby,Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜
Kids, Ruby, Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜宏治 高尾
 
非ガチ勢「よし、Coffee script使おう!」
非ガチ勢「よし、Coffee script使おう!」非ガチ勢「よし、Coffee script使おう!」
非ガチ勢「よし、Coffee script使おう!」Muyuu Fujita
 
TypeScript 入門してみる
TypeScript 入門してみるTypeScript 入門してみる
TypeScript 入門してみるKen Fukuyama
 
TypeScript + Express
TypeScript + ExpressTypeScript + Express
TypeScript + Expresskamiyam .
 

La actualidad más candente (20)

Rails+Markdownでなにかつくる
Rails+MarkdownでなにかつくるRails+Markdownでなにかつくる
Rails+Markdownでなにかつくる
 
MobiRubyでiOSアプリをつくろう
MobiRubyでiOSアプリをつくろうMobiRubyでiOSアプリをつくろう
MobiRubyでiOSアプリをつくろう
 
片手間JS on Rails
片手間JS on Rails片手間JS on Rails
片手間JS on Rails
 
Electronからはじめるnodejs
ElectronからはじめるnodejsElectronからはじめるnodejs
Electronからはじめるnodejs
 
Railsのフロントエンド開発を考える
Railsのフロントエンド開発を考えるRailsのフロントエンド開発を考える
Railsのフロントエンド開発を考える
 
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRubyKanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
Kanrk05 .Netでお仕事しているプログラマがスクリプト言語として使うRuby
 
Parse.comを使ってみた感想とまとめ
Parse.comを使ってみた感想とまとめParse.comを使ってみた感想とまとめ
Parse.comを使ってみた感想とまとめ
 
VimとRubyのアツい関係
VimとRubyのアツい関係VimとRubyのアツい関係
VimとRubyのアツい関係
 
C#のやさしさを語る時間
C#のやさしさを語る時間C#のやさしさを語る時間
C#のやさしさを語る時間
 
Sinatra軽量Web開発 - LOUPE Study #1
Sinatra軽量Web開発 - LOUPE Study #1Sinatra軽量Web開発 - LOUPE Study #1
Sinatra軽量Web開発 - LOUPE Study #1
 
Container view活用術とポイントになる部分
Container view活用術とポイントになる部分Container view活用術とポイントになる部分
Container view活用術とポイントになる部分
 
Railsチュートリアル(second)を終えて
Railsチュートリアル(second)を終えてRailsチュートリアル(second)を終えて
Railsチュートリアル(second)を終えて
 
コードに基づくモデルによる IntelliCode
コードに基づくモデルによる IntelliCodeコードに基づくモデルによる IntelliCode
コードに基づくモデルによる IntelliCode
 
で、次は何がくるの? - 第2回 TIS Matsuri
で、次は何がくるの? - 第2回 TIS Matsuriで、次は何がくるの? - 第2回 TIS Matsuri
で、次は何がくるの? - 第2回 TIS Matsuri
 
GopherJS + Nashorn
GopherJS + NashornGopherJS + Nashorn
GopherJS + Nashorn
 
Kids, Ruby, Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜
Kids,Ruby,Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜Kids,Ruby,Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜
Kids, Ruby, Fun! ぼくたち、 Rubyプログラミング少年団! 〜小学生からはじめる Ruby プログラミング〜
 
Vue.js ハンズオン資料
Vue.js ハンズオン資料Vue.js ハンズオン資料
Vue.js ハンズオン資料
 
非ガチ勢「よし、Coffee script使おう!」
非ガチ勢「よし、Coffee script使おう!」非ガチ勢「よし、Coffee script使おう!」
非ガチ勢「よし、Coffee script使おう!」
 
TypeScript 入門してみる
TypeScript 入門してみるTypeScript 入門してみる
TypeScript 入門してみる
 
TypeScript + Express
TypeScript + ExpressTypeScript + Express
TypeScript + Express
 

Destacado

ニコニコ超エンジニアミーティング Rubyの歩き方
ニコニコ超エンジニアミーティング Rubyの歩き方ニコニコ超エンジニアミーティング Rubyの歩き方
ニコニコ超エンジニアミーティング Rubyの歩き方tatsuo sakurai
 
桐島、Rubyやめるってよ
桐島、Rubyやめるってよ桐島、Rubyやめるってよ
桐島、RubyやめるってよNarihiro Nakamura
 
Rubyの仕事で食べていくために僕らは!
Rubyの仕事で食べていくために僕らは!Rubyの仕事で食べていくために僕らは!
Rubyの仕事で食べていくために僕らは!Ouka Yuka
 
RubyエンジニアがPythonをdisるためにPythonを勉強してみた
RubyエンジニアがPythonをdisるためにPythonを勉強してみたRubyエンジニアがPythonをdisるためにPythonを勉強してみた
RubyエンジニアがPythonをdisるためにPythonを勉強してみたYusuke Kon
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Rubymitim
 
Ruby で高速なプログラムを書く
Ruby で高速なプログラムを書くRuby で高速なプログラムを書く
Ruby で高速なプログラムを書くmametter
 

Destacado (6)

ニコニコ超エンジニアミーティング Rubyの歩き方
ニコニコ超エンジニアミーティング Rubyの歩き方ニコニコ超エンジニアミーティング Rubyの歩き方
ニコニコ超エンジニアミーティング Rubyの歩き方
 
桐島、Rubyやめるってよ
桐島、Rubyやめるってよ桐島、Rubyやめるってよ
桐島、Rubyやめるってよ
 
Rubyの仕事で食べていくために僕らは!
Rubyの仕事で食べていくために僕らは!Rubyの仕事で食べていくために僕らは!
Rubyの仕事で食べていくために僕らは!
 
RubyエンジニアがPythonをdisるためにPythonを勉強してみた
RubyエンジニアがPythonをdisるためにPythonを勉強してみたRubyエンジニアがPythonをdisるためにPythonを勉強してみた
RubyエンジニアがPythonをdisるためにPythonを勉強してみた
 
Start!! Ruby
Start!! RubyStart!! Ruby
Start!! Ruby
 
Ruby で高速なプログラムを書く
Ruby で高速なプログラムを書くRuby で高速なプログラムを書く
Ruby で高速なプログラムを書く
 

Similar a Rubyをちょっと理解しよう

RubyとRのおいしい関係
RubyとRのおいしい関係RubyとRのおいしい関係
RubyとRのおいしい関係sady_nitro
 
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由Kohei Taniguchi
 
小学生3年生から使えるRubyのビジュアルプログラミングエディタ「スモウルビー」と、それを活用した任意団体「Rubyプログラミング少年団」[第7回フクオカ...
小学生3年生から使えるRubyのビジュアルプログラミングエディタ「スモウルビー」と、それを活用した任意団体「Rubyプログラミング少年団」[第7回フクオカ...小学生3年生から使えるRubyのビジュアルプログラミングエディタ「スモウルビー」と、それを活用した任意団体「Rubyプログラミング少年団」[第7回フクオカ...
小学生3年生から使えるRubyのビジュアルプログラミングエディタ「スモウルビー」と、それを活用した任意団体「Rubyプログラミング少年団」[第7回フクオカ...宏治 高尾
 
Ruby on railsでlinebotを試した記録
Ruby on railsでlinebotを試した記録Ruby on railsでlinebotを試した記録
Ruby on railsでlinebotを試した記録Fumiya Sakai
 
PHPer のための Ruby 教室
PHPer のための Ruby 教室PHPer のための Ruby 教室
PHPer のための Ruby 教室higaki
 
Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発Koichi Shimozono
 
Swiftによる関数型プログラミング超入門
Swiftによる関数型プログラミング超入門Swiftによる関数型プログラミング超入門
Swiftによる関数型プログラミング超入門Hisakuni Fujimoto
 
20130615 組込みの仕事場でRubyを使う
20130615 組込みの仕事場でRubyを使う20130615 組込みの仕事場でRubyを使う
20130615 組込みの仕事場でRubyを使うRyo Nagai
 
Tokyurubykaigi05
Tokyurubykaigi05Tokyurubykaigi05
Tokyurubykaigi05yamanekko
 
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発Kazuaki Tanaka
 
これからはじめるための JavaScript 開発環境
これからはじめるための JavaScript 開発環境これからはじめるための JavaScript 開発環境
これからはじめるための JavaScript 開発環境Ryo Higashigawa
 
高専カンファレンス in 岐阜 基調講演2 @gabu
高専カンファレンス in 岐阜 基調講演2 @gabu高専カンファレンス in 岐阜 基調講演2 @gabu
高専カンファレンス in 岐阜 基調講演2 @gabuShoya Tsukada
 
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1Takuya Mukohira
 
Rubyを楽しくする第一歩!ブロックを理解する!
Rubyを楽しくする第一歩!ブロックを理解する!Rubyを楽しくする第一歩!ブロックを理解する!
Rubyを楽しくする第一歩!ブロックを理解する!Kanako Kobayashi
 
Rubyプログラミング教育に対する取り組みと事例紹介
Rubyプログラミング教育に対する取り組みと事例紹介Rubyプログラミング教育に対する取り組みと事例紹介
Rubyプログラミング教育に対する取り組みと事例紹介Yasushi Ishikawa
 
古き良きRailsプロジェクトに wepbackとvue.jsを導入した話
古き良きRailsプロジェクトに wepbackとvue.jsを導入した話古き良きRailsプロジェクトに wepbackとvue.jsを導入した話
古き良きRailsプロジェクトに wepbackとvue.jsを導入した話Yuya Taki
 
Rubyist started to learn Groovy - things important to leran new LL
Rubyist started to learn Groovy - things important to leran new LLRubyist started to learn Groovy - things important to leran new LL
Rubyist started to learn Groovy - things important to leran new LLUchio Kondo
 
Ruby and I at 神奈川Ruby会議01
Ruby and I at 神奈川Ruby会議01Ruby and I at 神奈川Ruby会議01
Ruby and I at 神奈川Ruby会議01Yutaka Tachibana
 

Similar a Rubyをちょっと理解しよう (20)

RubyとRのおいしい関係
RubyとRのおいしい関係RubyとRのおいしい関係
RubyとRのおいしい関係
 
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
オブジェクト指向プログラマが今関数型言語を学ばないといけない理由
 
小学生3年生から使えるRubyのビジュアルプログラミングエディタ「スモウルビー」と、それを活用した任意団体「Rubyプログラミング少年団」[第7回フクオカ...
小学生3年生から使えるRubyのビジュアルプログラミングエディタ「スモウルビー」と、それを活用した任意団体「Rubyプログラミング少年団」[第7回フクオカ...小学生3年生から使えるRubyのビジュアルプログラミングエディタ「スモウルビー」と、それを活用した任意団体「Rubyプログラミング少年団」[第7回フクオカ...
小学生3年生から使えるRubyのビジュアルプログラミングエディタ「スモウルビー」と、それを活用した任意団体「Rubyプログラミング少年団」[第7回フクオカ...
 
Rubyの話を少し
Rubyの話を少しRubyの話を少し
Rubyの話を少し
 
Ruby on railsでlinebotを試した記録
Ruby on railsでlinebotを試した記録Ruby on railsでlinebotを試した記録
Ruby on railsでlinebotを試した記録
 
PHPer のための Ruby 教室
PHPer のための Ruby 教室PHPer のための Ruby 教室
PHPer のための Ruby 教室
 
Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発
 
Swiftによる関数型プログラミング超入門
Swiftによる関数型プログラミング超入門Swiftによる関数型プログラミング超入門
Swiftによる関数型プログラミング超入門
 
20130615 組込みの仕事場でRubyを使う
20130615 組込みの仕事場でRubyを使う20130615 組込みの仕事場でRubyを使う
20130615 組込みの仕事場でRubyを使う
 
Tokyurubykaigi05
Tokyurubykaigi05Tokyurubykaigi05
Tokyurubykaigi05
 
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
ET2014資料: mruby プログラム言語Rubyによる組込みソト開発
 
これからはじめるための JavaScript 開発環境
これからはじめるための JavaScript 開発環境これからはじめるための JavaScript 開発環境
これからはじめるための JavaScript 開発環境
 
高専カンファレンス in 岐阜 基調講演2 @gabu
高専カンファレンス in 岐阜 基調講演2 @gabu高専カンファレンス in 岐阜 基調講演2 @gabu
高専カンファレンス in 岐阜 基調講演2 @gabu
 
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
 
Rubyを楽しくする第一歩!ブロックを理解する!
Rubyを楽しくする第一歩!ブロックを理解する!Rubyを楽しくする第一歩!ブロックを理解する!
Rubyを楽しくする第一歩!ブロックを理解する!
 
Rubyプログラミング教育に対する取り組みと事例紹介
Rubyプログラミング教育に対する取り組みと事例紹介Rubyプログラミング教育に対する取り組みと事例紹介
Rubyプログラミング教育に対する取り組みと事例紹介
 
古き良きRailsプロジェクトに wepbackとvue.jsを導入した話
古き良きRailsプロジェクトに wepbackとvue.jsを導入した話古き良きRailsプロジェクトに wepbackとvue.jsを導入した話
古き良きRailsプロジェクトに wepbackとvue.jsを導入した話
 
mruby for embedded systems
mruby for embedded systemsmruby for embedded systems
mruby for embedded systems
 
Rubyist started to learn Groovy - things important to leran new LL
Rubyist started to learn Groovy - things important to leran new LLRubyist started to learn Groovy - things important to leran new LL
Rubyist started to learn Groovy - things important to leran new LL
 
Ruby and I at 神奈川Ruby会議01
Ruby and I at 神奈川Ruby会議01Ruby and I at 神奈川Ruby会議01
Ruby and I at 神奈川Ruby会議01
 

Rubyをちょっと理解しよう