SlideShare a Scribd company logo
1 of 45
Download to read offline
2014年6月28日
PHPerのためのRuby教室
ひがき @ Ruby関西
Rubyとは
• まつもとゆきひろ氏が開発
• スクリプト言語
• オブジェクト指向言語
• Ruby on Railsが有名
Rubyの世界観
• 文法だけではない違い
– データ構造
– イディオム
– ライブラリ
– 開発環境
• 考え方に影響を与える
Rubyとは
• matz が考えた最強のプログラミング言語
• 性能よりも生産性
• 開発者に心地よい言語
Rubyをキメると
気持ちいい
PHPと Ruby
できることに違いはない
Rubyの数値
# $age = 49;
age = 49
# $price = 10000;
price = 10_000 # => 10000
# M_PI
Math::PI # => 3.141592653589793
Rubyの整数
2 ** 1024 # => 1797693134862315907729305
1907890247336179769789423065727343008115
7732675805500963132708477322407536021120
1138798713933576587897688144166224928474
3063947412437776789342486548527630221960
1246094119453082952085005768838150682342
4628814739131105408272371633505106845862
9823994724593847971630483535632962422413
7216
Rubyの文字列
# $name = ’matz’;
name = ’matz’
# "$name($age)";
"#{name}(#{age})" # => "matz(49)"
Rubyの配列
# $a = array(1, 2, 3);
a = [1, 2, 3]
a.class # => Array
# $h = array(’a’ => 1, ’b’ => 2);
h = {’a’ => 1, ’b’ => 2}
h.class # => Hash
Rubyの特徴 ブロック
a = [1, 2, 3]
a.each do |i|
puts i * i
end
# >> 1
# >> 4
# >> 9
Rubyの特徴 ブロック
a = [1, 2, 3]
a.each{|i| puts i * i}
# >> 1
# >> 4
# >> 9
PHPの foreach と何が違うの?
• each は Array のメソッド
• ブロックは each の引数
– 高階関数
高階関数
a = [1, 2, 3]
puts_square = Proc.new do |i|
puts i * i
end
a.each(&puts_square)
# >> 1
# >> 4
# >> 9
ファイル入出力とブロック
# $fp = fopen("data.txt", "r");
f = open("data.txt")
while buf = f.gets
# ... なにか ...
end
# fclose($fp);
f.close
ファイル入出力とブロック
# file_get_contents("data.txt");
open("data.txt"){|f| f.read}
# file("data.txt");
open("data.txt"){|f| f.readlines}
ファイル入出力とブロック
アプリケーション ブロック File
§
¦
¤
¥{|f| f.read}
-生成
-open
 呼出

close
×
制御構造ではなくメソッド
def verbose
yield
yield
end
verbose{puts ’こんにちは’}
#  こんにちは
#  こんにちは
Mix-in
• クラスにモジュールを取り込む機能
– モジュール: 実装の集合体
• Enumerable
– 繰り返しに関するモジュール
– each メソッドを持つクラスで利用可能
BasicObject
Object
Mix-in
Kernel
Mix-in
Enumerable
map
select
inject
Array
Hash
each
each
繰り返し Enumerable
a = [1, 2, 3, 5]
a.map{|i| i * i} # = [1, 4, 9, 25]
a.select{|i| i.odd?} # = [1, 3, 5]
a.inject{|s, i| s + i} # = 11
a.find{|i| i.odd?} # = 1
a.all?{|i| i.even?} # = false
a.any?{|i| i.even?} # = true
Rubyの特徴 オープンクラス
ruby.class # = String
ruby.upcase # = RUBY
ruby.compact
# ~ -:4:in ‘main’: undefined method
‘compact’ for ruby:String (NoMethodErro
class String
def compact
gsub(/r?n/, ’’)
end
end
s = No Ruby,
No Life.
s.compact # = No Ruby,No Life.
自分の足を撃つ自由
Rubyは君を信頼する。Rubyは君を分別のある
プログラマとして扱う。Rubyはメタプログラミ
ングのような強力な力を与える。
ただし、大いなる力には、大いなる責任が伴なう
ことを忘れてはいけない。
—メタプログラミングRuby 序文より
Rubyの特徴 DSL
• DSL (Domain Specific Language)
– ドメイン特化言語
∗ 高い抽象度
– Rubyは内部DSLを作りやすい
Rubyのクラス
class Person
def initialize name
@name = name
end
end
person = Person.new(’matz’)
person.name
# ~ -:7:in ‘main’: undefined method
‘name’ for #Person:0x007fe8409c8eb8 @nam
設定かプログラムか DSL
class Person
attr_accessor :name
end
person.name # = matz
person.name = ’MATZ’
person.name # = MATZ
代入もメソッド
class Person
def name
@name
end
def name= name
@name = name
end
end
Object
Module
attr accessor
Class Person:Class
メソッドを作るメソッド
def self.my_attr_accessor var
instance_eval do
define_method(var) do
instance_variable_get(@#{var})
end
define_method(#{var}=) do |val|
instance_variable_set(@#{var}, val)
end
end
end
DSLはつくれる
• 宣言的に記述する
• カッコを使わない
– ( ) メソッドの引数
– [ ] 配列
– { } ハッシュ、ブロック
Sinatra の例 DSL
require ’sinatra’
get ’/’ do
PHP Kansai
end
カッコを使うと……
require(’sinatra’)
get(’/’) {
PHP Kansai
}
配列の[ ]を取りたい
def sum(ary)
ary.inject{|s, i| s + i}
end
sum([1, 2, 3, 4, 5]) # = 15
sum [1, 2, 3, 4, 5] # = 15
可変長引数を使う
def sum(*ary)
ary.inject{|s, i| s + i}
end
sum 1, 2, 3, 4, 5 # = 15
ハッシュの{ }を取りたい
def max(hash)
hash.max{|a, b| a.last = b.last}
end
max({:AAPL=566.71,
:GOOG=605.23, :MSFT=31.16})
# = [:GOOG, 605.23]
最後の引数なら省略可
def max(hash)
hash.max{|a, b| a.last = b.last}
end
max :AAPL=566.71,
:GOOG=605.23, :MSFT=31.16
# = [:GOOG, 605.23]
ハッシュの => も取りたい
max :AAPL=566.71,
:GOOG=605.23, :MSFT=31.16
# = [:GOOG, 605.23]
max AAPL: 566.71,
GOOG: 605.23, MSFT: 31.16
# = [:GOOG, 605.23]
DSLを作ってみよう
class Page
def layout(name, *size, margin)
...
end
end
カッコを使うと……
page.layout(:A4, [210, 297],
{:top = 10,
:bottom = 20,
:left = 18,
:right = 24})
これは Rubyのコードです
page.layout :A4, 210, 297,
top: 10,
bottom: 20,
left: 18,
right: 24
なぜDSL
• 抽象度・表現力が高い
• 問題領域に集中できる
まとめ
• PHPも Rubyも、できることに違いはない
• Rubyの特徴
– ブロック
– Mix-in
– オープンクラス
– DSLを作りやすい
もしRubyに興味を持ったら
• コミュニティ
– Ruby関西
– Minami.rb
– amagasaki.rb
– Shinosaka.rb
– Kyoto.rb
– Nishiwaki.rb  Higashinada.rb
– Wakayama.rb
Rubyをキメると
気持ちいい

More Related Content

What's hot

Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発Koichi Shimozono
 
Middleman Guides & How to Learn
Middleman Guides & How to LearnMiddleman Guides & How to Learn
Middleman Guides & How to LearnYuya Matsushima
 
Rubymotion
RubymotionRubymotion
Rubymotionjewel12
 
Ruby Sapporo Night Vol.4
Ruby Sapporo Night Vol.4Ruby Sapporo Night Vol.4
Ruby Sapporo Night Vol.4Koji SHIMADA
 
関西の Ruby コミュニティ
関西の Ruby コミュニティ関西の Ruby コミュニティ
関西の Ruby コミュニティTomoya Kawanishi
 
Rubyボードハンズオン
RubyボードハンズオンRubyボードハンズオン
Rubyボードハンズオン三七男 山本
 
極小Rubyボードの紹介
極小Rubyボードの紹介極小Rubyボードの紹介
極小Rubyボードの紹介三七男 山本
 
Rubyの仕事で食べていくために僕らは!
Rubyの仕事で食べていくために僕らは!Rubyの仕事で食べていくために僕らは!
Rubyの仕事で食べていくために僕らは!Ouka Yuka
 
Rubykaigi2018共有会
Rubykaigi2018共有会Rubykaigi2018共有会
Rubykaigi2018共有会ogawatti
 
これからはじめるための JavaScript 開発環境
これからはじめるための JavaScript 開発環境これからはじめるための JavaScript 開発環境
これからはじめるための JavaScript 開発環境Ryo Higashigawa
 
やさしいGemパッチの作り方
やさしいGemパッチの作り方やさしいGemパッチの作り方
やさしいGemパッチの作り方Maki Toshio
 
Rk10trailer
Rk10trailerRk10trailer
Rk10trailermseki
 
コードに潜むC++の未定義動作達
コードに潜むC++の未定義動作達コードに潜むC++の未定義動作達
コードに潜むC++の未定義動作達Azaika At
 
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1耕平 谷口
 

What's hot (20)

Ruby with My Life
Ruby with My LifeRuby with My Life
Ruby with My Life
 
恋に落ちるRuby
恋に落ちるRuby恋に落ちるRuby
恋に落ちるRuby
 
Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発
 
Middleman Guides & How to Learn
Middleman Guides & How to LearnMiddleman Guides & How to Learn
Middleman Guides & How to Learn
 
Rubymotion
RubymotionRubymotion
Rubymotion
 
Ruby Sapporo Night Vol.4
Ruby Sapporo Night Vol.4Ruby Sapporo Night Vol.4
Ruby Sapporo Night Vol.4
 
関西の Ruby コミュニティ
関西の Ruby コミュニティ関西の Ruby コミュニティ
関西の Ruby コミュニティ
 
Rubyボードハンズオン
RubyボードハンズオンRubyボードハンズオン
Rubyボードハンズオン
 
Rubyの話を少し
Rubyの話を少しRubyの話を少し
Rubyの話を少し
 
極小Rubyボードの紹介
極小Rubyボードの紹介極小Rubyボードの紹介
極小Rubyボードの紹介
 
Rubyの仕事で食べていくために僕らは!
Rubyの仕事で食べていくために僕らは!Rubyの仕事で食べていくために僕らは!
Rubyの仕事で食べていくために僕らは!
 
Rubykaigi2018共有会
Rubykaigi2018共有会Rubykaigi2018共有会
Rubykaigi2018共有会
 
これからはじめるための JavaScript 開発環境
これからはじめるための JavaScript 開発環境これからはじめるための JavaScript 開発環境
これからはじめるための JavaScript 開発環境
 
やさしいGemパッチの作り方
やさしいGemパッチの作り方やさしいGemパッチの作り方
やさしいGemパッチの作り方
 
Rk10trailer
Rk10trailerRk10trailer
Rk10trailer
 
GR-CITRUSの紹介
GR-CITRUSの紹介GR-CITRUSの紹介
GR-CITRUSの紹介
 
コードに潜むC++の未定義動作達
コードに潜むC++の未定義動作達コードに潜むC++の未定義動作達
コードに潜むC++の未定義動作達
 
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1
 
Walking front end
Walking front endWalking front end
Walking front end
 
rake:money LT(2010/05/20)
rake:money LT(2010/05/20)rake:money LT(2010/05/20)
rake:money LT(2010/05/20)
 

Similar to PHPer のための Ruby 教室

名古屋Ruby会議02 LT:Ruby中級への道
名古屋Ruby会議02 LT:Ruby中級への道名古屋Ruby会議02 LT:Ruby中級への道
名古屋Ruby会議02 LT:Ruby中級への道Shigeru UCHIYAMA
 
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1Takuya Mukohira
 
emruby: ブラウザで動くRuby
emruby: ブラウザで動くRubyemruby: ブラウザで動くRuby
emruby: ブラウザで動くRubymametter
 
第1部「一時間で覚えるruby」
第1部「一時間で覚えるruby」第1部「一時間で覚えるruby」
第1部「一時間で覚えるruby」Hiromu Shioya
 
Shinjuku.rb #61 RubyKaigi2018予習
Shinjuku.rb #61 RubyKaigi2018予習Shinjuku.rb #61 RubyKaigi2018予習
Shinjuku.rb #61 RubyKaigi2018予習treby
 
The Essence of Using Ruby on Rails in Corporations
The Essence of Using Ruby on Rails in CorporationsThe Essence of Using Ruby on Rails in Corporations
The Essence of Using Ruby on Rails in CorporationsKoichiro Ohba
 
2017年3月13日勉強会発表資料
2017年3月13日勉強会発表資料2017年3月13日勉強会発表資料
2017年3月13日勉強会発表資料shogo yamada
 
Reudy on Ruby1.9
Reudy on Ruby1.9Reudy on Ruby1.9
Reudy on Ruby1.9Glass_saga
 
K ruby community_plan (2) (2)
K ruby community_plan (2) (2)K ruby community_plan (2) (2)
K ruby community_plan (2) (2)Kosuke Masumitsu
 
K ruby community_plan (2) (2)
K ruby community_plan (2) (2)K ruby community_plan (2) (2)
K ruby community_plan (2) (2)Kosuke Masumitsu
 
Integration Technology of Ruby and DB.
Integration Technology of Ruby and DB.Integration Technology of Ruby and DB.
Integration Technology of Ruby and DB.Tamotsu Furuya
 
#027 tddのさわり
#027 tddのさわり#027 tddのさわり
#027 tddのさわり森下 智裕
 
Ruby City Matsue
Ruby City MatsueRuby City Matsue
Ruby City MatsueTetsuo NODA
 
Ruby Introduction
Ruby IntroductionRuby Introduction
Ruby IntroductionYushiroDodo
 
Ruby と C# をつなぐ
Ruby と C# をつなぐRuby と C# をつなぐ
Ruby と C# をつなぐ107steps
 
Ruby Enterprise Environment
Ruby Enterprise EnvironmentRuby Enterprise Environment
Ruby Enterprise EnvironmentTomoya Kawanishi
 
Rubyをちょっと理解しよう
Rubyをちょっと理解しようRubyをちょっと理解しよう
Rubyをちょっと理解しようShun Hikita
 
Hyper → Highspeed → Development
Hyper → Highspeed → DevelopmentHyper → Highspeed → Development
Hyper → Highspeed → Developmentaktsk
 
Ruby on RedHat Enterprise Linux
Ruby on RedHat Enterprise LinuxRuby on RedHat Enterprise Linux
Ruby on RedHat Enterprise LinuxTomoya Kawanishi
 

Similar to PHPer のための Ruby 教室 (20)

名古屋Ruby会議02 LT:Ruby中級への道
名古屋Ruby会議02 LT:Ruby中級への道名古屋Ruby会議02 LT:Ruby中級への道
名古屋Ruby会議02 LT:Ruby中級への道
 
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
 
emruby: ブラウザで動くRuby
emruby: ブラウザで動くRubyemruby: ブラウザで動くRuby
emruby: ブラウザで動くRuby
 
第1部「一時間で覚えるruby」
第1部「一時間で覚えるruby」第1部「一時間で覚えるruby」
第1部「一時間で覚えるruby」
 
Shinjuku.rb #61 RubyKaigi2018予習
Shinjuku.rb #61 RubyKaigi2018予習Shinjuku.rb #61 RubyKaigi2018予習
Shinjuku.rb #61 RubyKaigi2018予習
 
The Essence of Using Ruby on Rails in Corporations
The Essence of Using Ruby on Rails in CorporationsThe Essence of Using Ruby on Rails in Corporations
The Essence of Using Ruby on Rails in Corporations
 
2017年3月13日勉強会発表資料
2017年3月13日勉強会発表資料2017年3月13日勉強会発表資料
2017年3月13日勉強会発表資料
 
Reudy on Ruby1.9
Reudy on Ruby1.9Reudy on Ruby1.9
Reudy on Ruby1.9
 
K ruby community_plan (2) (2)
K ruby community_plan (2) (2)K ruby community_plan (2) (2)
K ruby community_plan (2) (2)
 
K ruby community_plan (2) (2)
K ruby community_plan (2) (2)K ruby community_plan (2) (2)
K ruby community_plan (2) (2)
 
Integration Technology of Ruby and DB.
Integration Technology of Ruby and DB.Integration Technology of Ruby and DB.
Integration Technology of Ruby and DB.
 
#027 tddのさわり
#027 tddのさわり#027 tddのさわり
#027 tddのさわり
 
Ruby City Matsue
Ruby City MatsueRuby City Matsue
Ruby City Matsue
 
Ruby Introduction
Ruby IntroductionRuby Introduction
Ruby Introduction
 
Summary of Ruby
Summary of RubySummary of Ruby
Summary of Ruby
 
Ruby と C# をつなぐ
Ruby と C# をつなぐRuby と C# をつなぐ
Ruby と C# をつなぐ
 
Ruby Enterprise Environment
Ruby Enterprise EnvironmentRuby Enterprise Environment
Ruby Enterprise Environment
 
Rubyをちょっと理解しよう
Rubyをちょっと理解しようRubyをちょっと理解しよう
Rubyをちょっと理解しよう
 
Hyper → Highspeed → Development
Hyper → Highspeed → DevelopmentHyper → Highspeed → Development
Hyper → Highspeed → Development
 
Ruby on RedHat Enterprise Linux
Ruby on RedHat Enterprise LinuxRuby on RedHat Enterprise Linux
Ruby on RedHat Enterprise Linux
 

More from higaki

Ruby初級者向けレッスン 56回 ─── ブロック
Ruby初級者向けレッスン 56回 ─── ブロックRuby初級者向けレッスン 56回 ─── ブロック
Ruby初級者向けレッスン 56回 ─── ブロックhigaki
 
Ruby初級者向けレッスン KOF2015 出張版
Ruby初級者向けレッスン KOF2015 出張版Ruby初級者向けレッスン KOF2015 出張版
Ruby初級者向けレッスン KOF2015 出張版higaki
 
Ruby初級者向けレッスン 55回 ─── 例外
Ruby初級者向けレッスン 55回 ─── 例外Ruby初級者向けレッスン 55回 ─── 例外
Ruby初級者向けレッスン 55回 ─── 例外higaki
 
Ruby初級者向けレッスン 54回 ─── クラス
Ruby初級者向けレッスン 54回 ─── クラスRuby初級者向けレッスン 54回 ─── クラス
Ruby初級者向けレッスン 54回 ─── クラスhigaki
 
Ruby初級者向けレッスン 53回 ─── Array と Hash
Ruby初級者向けレッスン  53回 ─── Array と HashRuby初級者向けレッスン  53回 ─── Array と Hash
Ruby初級者向けレッスン 53回 ─── Array と Hashhigaki
 
初級者向けレッスン 52回 ─── 文字列
初級者向けレッスン 52回 ─── 文字列初級者向けレッスン 52回 ─── 文字列
初級者向けレッスン 52回 ─── 文字列higaki
 
初級者向けレッスン 51回 ─── 例外
初級者向けレッスン 51回 ─── 例外初級者向けレッスン 51回 ─── 例外
初級者向けレッスン 51回 ─── 例外higaki
 
Ruby初級者向けレッスン 50回 ─── ブロック
Ruby初級者向けレッスン 50回 ─── ブロックRuby初級者向けレッスン 50回 ─── ブロック
Ruby初級者向けレッスン 50回 ─── ブロックhigaki
 
Ruby 初級者向けレッスン 49回───クラス
Ruby 初級者向けレッスン 49回───クラスRuby 初級者向けレッスン 49回───クラス
Ruby 初級者向けレッスン 49回───クラスhigaki
 
Ruby初級者向けレッスン 48回 ─── Array と Hash
Ruby初級者向けレッスン 48回 ─── Array と HashRuby初級者向けレッスン 48回 ─── Array と Hash
Ruby初級者向けレッスン 48回 ─── Array と Hashhigaki
 
Ruby初級者向けレッスン 47回 ─── 文字列
Ruby初級者向けレッスン 47回 ─── 文字列Ruby初級者向けレッスン 47回 ─── 文字列
Ruby初級者向けレッスン 47回 ─── 文字列higaki
 
Ruby初級者向けレッスン 第46回 ─── Test::Unit
Ruby初級者向けレッスン 第46回 ─── Test::UnitRuby初級者向けレッスン 第46回 ─── Test::Unit
Ruby初級者向けレッスン 第46回 ─── Test::Unithigaki
 
ジュンク堂書店の方から来ました
ジュンク堂書店の方から来ましたジュンク堂書店の方から来ました
ジュンク堂書店の方から来ましたhigaki
 
Ruby初級者向けレッスン 45回 ─── 例外
Ruby初級者向けレッスン 45回 ─── 例外Ruby初級者向けレッスン 45回 ─── 例外
Ruby初級者向けレッスン 45回 ─── 例外higaki
 

More from higaki (14)

Ruby初級者向けレッスン 56回 ─── ブロック
Ruby初級者向けレッスン 56回 ─── ブロックRuby初級者向けレッスン 56回 ─── ブロック
Ruby初級者向けレッスン 56回 ─── ブロック
 
Ruby初級者向けレッスン KOF2015 出張版
Ruby初級者向けレッスン KOF2015 出張版Ruby初級者向けレッスン KOF2015 出張版
Ruby初級者向けレッスン KOF2015 出張版
 
Ruby初級者向けレッスン 55回 ─── 例外
Ruby初級者向けレッスン 55回 ─── 例外Ruby初級者向けレッスン 55回 ─── 例外
Ruby初級者向けレッスン 55回 ─── 例外
 
Ruby初級者向けレッスン 54回 ─── クラス
Ruby初級者向けレッスン 54回 ─── クラスRuby初級者向けレッスン 54回 ─── クラス
Ruby初級者向けレッスン 54回 ─── クラス
 
Ruby初級者向けレッスン 53回 ─── Array と Hash
Ruby初級者向けレッスン  53回 ─── Array と HashRuby初級者向けレッスン  53回 ─── Array と Hash
Ruby初級者向けレッスン 53回 ─── Array と Hash
 
初級者向けレッスン 52回 ─── 文字列
初級者向けレッスン 52回 ─── 文字列初級者向けレッスン 52回 ─── 文字列
初級者向けレッスン 52回 ─── 文字列
 
初級者向けレッスン 51回 ─── 例外
初級者向けレッスン 51回 ─── 例外初級者向けレッスン 51回 ─── 例外
初級者向けレッスン 51回 ─── 例外
 
Ruby初級者向けレッスン 50回 ─── ブロック
Ruby初級者向けレッスン 50回 ─── ブロックRuby初級者向けレッスン 50回 ─── ブロック
Ruby初級者向けレッスン 50回 ─── ブロック
 
Ruby 初級者向けレッスン 49回───クラス
Ruby 初級者向けレッスン 49回───クラスRuby 初級者向けレッスン 49回───クラス
Ruby 初級者向けレッスン 49回───クラス
 
Ruby初級者向けレッスン 48回 ─── Array と Hash
Ruby初級者向けレッスン 48回 ─── Array と HashRuby初級者向けレッスン 48回 ─── Array と Hash
Ruby初級者向けレッスン 48回 ─── Array と Hash
 
Ruby初級者向けレッスン 47回 ─── 文字列
Ruby初級者向けレッスン 47回 ─── 文字列Ruby初級者向けレッスン 47回 ─── 文字列
Ruby初級者向けレッスン 47回 ─── 文字列
 
Ruby初級者向けレッスン 第46回 ─── Test::Unit
Ruby初級者向けレッスン 第46回 ─── Test::UnitRuby初級者向けレッスン 第46回 ─── Test::Unit
Ruby初級者向けレッスン 第46回 ─── Test::Unit
 
ジュンク堂書店の方から来ました
ジュンク堂書店の方から来ましたジュンク堂書店の方から来ました
ジュンク堂書店の方から来ました
 
Ruby初級者向けレッスン 45回 ─── 例外
Ruby初級者向けレッスン 45回 ─── 例外Ruby初級者向けレッスン 45回 ─── 例外
Ruby初級者向けレッスン 45回 ─── 例外
 

PHPer のための Ruby 教室