Submit Search
Upload
PHPer のための Ruby 教室
•
5 likes
•
2,775 views
higaki
Follow
PHPカンファレンス関西2014
Read less
Read more
Software
Report
Share
Report
Share
1 of 45
Download now
Download to read offline
Recommended
Ruby programmer silverの取得に向けて
Ruby programmer silverの取得に向けて
善弘 植木
Ruby 風シンタックスな静的言語 Crystal の紹介
Ruby 風シンタックスな静的言語 Crystal の紹介
Kazuki Matsushita
Ruby本から読み解くRuby考古学 - Ruby Archaeology from the Ruby Book
Ruby本から読み解くRuby考古学 - Ruby Archaeology from the Ruby Book
Tadashi Saito
RubyからC#を扱う
RubyからC#を扱う
107steps
Rubyの実装をRubiniusで便利
Rubyの実装をRubiniusで便利
Yutaka Tachibana
Rubinius Under a Microscope
Rubinius Under a Microscope
高広 内山
RubyではじめるIoT(Wakayama.rb活動報告)
RubyではじめるIoT(Wakayama.rb活動報告)
三七男 山本
Mrubyについて 第16回 岡山ruby, ruby on rails勉強会
Mrubyについて 第16回 岡山ruby, ruby on rails勉強会
Masaya Konishi
Recommended
Ruby programmer silverの取得に向けて
Ruby programmer silverの取得に向けて
善弘 植木
Ruby 風シンタックスな静的言語 Crystal の紹介
Ruby 風シンタックスな静的言語 Crystal の紹介
Kazuki Matsushita
Ruby本から読み解くRuby考古学 - Ruby Archaeology from the Ruby Book
Ruby本から読み解くRuby考古学 - Ruby Archaeology from the Ruby Book
Tadashi Saito
RubyからC#を扱う
RubyからC#を扱う
107steps
Rubyの実装をRubiniusで便利
Rubyの実装をRubiniusで便利
Yutaka Tachibana
Rubinius Under a Microscope
Rubinius Under a Microscope
高広 内山
RubyではじめるIoT(Wakayama.rb活動報告)
RubyではじめるIoT(Wakayama.rb活動報告)
三七男 山本
Mrubyについて 第16回 岡山ruby, ruby on rails勉強会
Mrubyについて 第16回 岡山ruby, ruby on rails勉強会
Masaya Konishi
Ruby with My Life
Ruby with My Life
Hiroshi SHIBATA
恋に落ちるRuby
恋に落ちるRuby
Yuuka Tomomatsu
Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発
Koichi Shimozono
Middleman Guides & How to Learn
Middleman Guides & How to Learn
Yuya Matsushima
Rubymotion
Rubymotion
jewel12
Ruby Sapporo Night Vol.4
Ruby Sapporo Night Vol.4
Koji SHIMADA
関西の Ruby コミュニティ
関西の Ruby コミュニティ
Tomoya Kawanishi
Rubyボードハンズオン
Rubyボードハンズオン
三七男 山本
Rubyの話を少し
Rubyの話を少し
Fumitake Taniguchi
極小Rubyボードの紹介
極小Rubyボードの紹介
三七男 山本
Rubyの仕事で食べていくために僕らは!
Rubyの仕事で食べていくために僕らは!
Ouka Yuka
Rubykaigi2018共有会
Rubykaigi2018共有会
ogawatti
これからはじめるための JavaScript 開発環境
これからはじめるための JavaScript 開発環境
Ryo Higashigawa
やさしいGemパッチの作り方
やさしいGemパッチの作り方
Maki Toshio
Rk10trailer
Rk10trailer
mseki
GR-CITRUSの紹介
GR-CITRUSの紹介
三七男 山本
コードに潜むC++の未定義動作達
コードに潜むC++の未定義動作達
Azaika At
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1
耕平 谷口
Walking front end
Walking front end
Hirata Tomoko
rake:money LT(2010/05/20)
rake:money LT(2010/05/20)
masayoshi takahashi
名古屋Ruby会議02 LT:Ruby中級への道
名古屋Ruby会議02 LT:Ruby中級への道
Shigeru UCHIYAMA
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
Takuya Mukohira
More Related Content
What's hot
Ruby with My Life
Ruby with My Life
Hiroshi SHIBATA
恋に落ちるRuby
恋に落ちるRuby
Yuuka Tomomatsu
Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発
Koichi Shimozono
Middleman Guides & How to Learn
Middleman Guides & How to Learn
Yuya Matsushima
Rubymotion
Rubymotion
jewel12
Ruby Sapporo Night Vol.4
Ruby Sapporo Night Vol.4
Koji SHIMADA
関西の Ruby コミュニティ
関西の Ruby コミュニティ
Tomoya Kawanishi
Rubyボードハンズオン
Rubyボードハンズオン
三七男 山本
Rubyの話を少し
Rubyの話を少し
Fumitake Taniguchi
極小Rubyボードの紹介
極小Rubyボードの紹介
三七男 山本
Rubyの仕事で食べていくために僕らは!
Rubyの仕事で食べていくために僕らは!
Ouka Yuka
Rubykaigi2018共有会
Rubykaigi2018共有会
ogawatti
これからはじめるための JavaScript 開発環境
これからはじめるための JavaScript 開発環境
Ryo Higashigawa
やさしいGemパッチの作り方
やさしいGemパッチの作り方
Maki Toshio
Rk10trailer
Rk10trailer
mseki
GR-CITRUSの紹介
GR-CITRUSの紹介
三七男 山本
コードに潜むC++の未定義動作達
コードに潜むC++の未定義動作達
Azaika At
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1
耕平 谷口
Walking front end
Walking front end
Hirata Tomoko
rake:money LT(2010/05/20)
rake:money LT(2010/05/20)
masayoshi takahashi
What's hot
(20)
Ruby with My Life
Ruby with My Life
恋に落ちるRuby
恋に落ちるRuby
Ruby on Rails を用いたWEBアプリケーションの開発
Ruby on Rails を用いたWEBアプリケーションの開発
Middleman Guides & How to Learn
Middleman Guides & How to Learn
Rubymotion
Rubymotion
Ruby Sapporo Night Vol.4
Ruby Sapporo Night Vol.4
関西の Ruby コミュニティ
関西の Ruby コミュニティ
Rubyボードハンズオン
Rubyボードハンズオン
Rubyの話を少し
Rubyの話を少し
極小Rubyボードの紹介
極小Rubyボードの紹介
Rubyの仕事で食べていくために僕らは!
Rubyの仕事で食べていくために僕らは!
Rubykaigi2018共有会
Rubykaigi2018共有会
これからはじめるための JavaScript 開発環境
これからはじめるための JavaScript 開発環境
やさしいGemパッチの作り方
やさしいGemパッチの作り方
Rk10trailer
Rk10trailer
GR-CITRUSの紹介
GR-CITRUSの紹介
コードに潜むC++の未定義動作達
コードに潜むC++の未定義動作達
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1
C,Javaと比較しながらRubyに入門する話 - e-ZUKA Rails拡大号vol1
Walking front end
Walking front end
rake:money LT(2010/05/20)
rake:money LT(2010/05/20)
Similar to PHPer のための Ruby 教室
名古屋Ruby会議02 LT:Ruby中級への道
名古屋Ruby会議02 LT:Ruby中級への道
Shigeru UCHIYAMA
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
Takuya Mukohira
emruby: ブラウザで動くRuby
emruby: ブラウザで動くRuby
mametter
第1部「一時間で覚えるruby」
第1部「一時間で覚えるruby」
Hiromu Shioya
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 Corporations
Koichiro Ohba
2017年3月13日勉強会発表資料
2017年3月13日勉強会発表資料
shogo yamada
Reudy on Ruby1.9
Reudy on Ruby1.9
Glass_saga
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)
Kosuke Masumitsu
Integration Technology of Ruby and DB.
Integration Technology of Ruby and DB.
Tamotsu Furuya
#027 tddのさわり
#027 tddのさわり
森下 智裕
Ruby City Matsue
Ruby City Matsue
Tetsuo NODA
Ruby Introduction
Ruby Introduction
YushiroDodo
Summary of Ruby
Summary of Ruby
Tamotsu Furuya
Ruby と C# をつなぐ
Ruby と C# をつなぐ
107steps
Ruby Enterprise Environment
Ruby Enterprise Environment
Tomoya Kawanishi
Rubyをちょっと理解しよう
Rubyをちょっと理解しよう
Shun Hikita
Hyper → Highspeed → Development
Hyper → Highspeed → Development
aktsk
Ruby on RedHat Enterprise Linux
Ruby on RedHat Enterprise Linux
Tomoya Kawanishi
Similar to PHPer のための Ruby 教室
(20)
名古屋Ruby会議02 LT:Ruby中級への道
名古屋Ruby会議02 LT:Ruby中級への道
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
苫小牧高専 ソフトウェアテクノロジー部 Rubyで遊ぼう 1
emruby: ブラウザで動くRuby
emruby: ブラウザで動くRuby
第1部「一時間で覚えるruby」
第1部「一時間で覚えるruby」
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 Corporations
2017年3月13日勉強会発表資料
2017年3月13日勉強会発表資料
Reudy 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)
Integration Technology of Ruby and DB.
Integration Technology of Ruby and DB.
#027 tddのさわり
#027 tddのさわり
Ruby City Matsue
Ruby City Matsue
Ruby Introduction
Ruby Introduction
Summary of Ruby
Summary of Ruby
Ruby と C# をつなぐ
Ruby と C# をつなぐ
Ruby Enterprise Environment
Ruby Enterprise Environment
Rubyをちょっと理解しよう
Rubyをちょっと理解しよう
Hyper → Highspeed → Development
Hyper → Highspeed → Development
Ruby on RedHat Enterprise Linux
Ruby on RedHat Enterprise Linux
More from higaki
Ruby初級者向けレッスン 56回 ─── ブロック
Ruby初級者向けレッスン 56回 ─── ブロック
higaki
Ruby初級者向けレッスン KOF2015 出張版
Ruby初級者向けレッスン KOF2015 出張版
higaki
Ruby初級者向けレッスン 55回 ─── 例外
Ruby初級者向けレッスン 55回 ─── 例外
higaki
Ruby初級者向けレッスン 54回 ─── クラス
Ruby初級者向けレッスン 54回 ─── クラス
higaki
Ruby初級者向けレッスン 53回 ─── Array と Hash
Ruby初級者向けレッスン 53回 ─── Array と Hash
higaki
初級者向けレッスン 52回 ─── 文字列
初級者向けレッスン 52回 ─── 文字列
higaki
初級者向けレッスン 51回 ─── 例外
初級者向けレッスン 51回 ─── 例外
higaki
Ruby初級者向けレッスン 50回 ─── ブロック
Ruby初級者向けレッスン 50回 ─── ブロック
higaki
Ruby 初級者向けレッスン 49回───クラス
Ruby 初級者向けレッスン 49回───クラス
higaki
Ruby初級者向けレッスン 48回 ─── Array と Hash
Ruby初級者向けレッスン 48回 ─── Array と Hash
higaki
Ruby初級者向けレッスン 47回 ─── 文字列
Ruby初級者向けレッスン 47回 ─── 文字列
higaki
Ruby初級者向けレッスン 第46回 ─── Test::Unit
Ruby初級者向けレッスン 第46回 ─── Test::Unit
higaki
ジュンク堂書店の方から来ました
ジュンク堂書店の方から来ました
higaki
Ruby初級者向けレッスン 45回 ─── 例外
Ruby初級者向けレッスン 45回 ─── 例外
higaki
More from higaki
(14)
Ruby初級者向けレッスン 56回 ─── ブロック
Ruby初級者向けレッスン 56回 ─── ブロック
Ruby初級者向けレッスン KOF2015 出張版
Ruby初級者向けレッスン KOF2015 出張版
Ruby初級者向けレッスン 55回 ─── 例外
Ruby初級者向けレッスン 55回 ─── 例外
Ruby初級者向けレッスン 54回 ─── クラス
Ruby初級者向けレッスン 54回 ─── クラス
Ruby初級者向けレッスン 53回 ─── Array と Hash
Ruby初級者向けレッスン 53回 ─── Array と Hash
初級者向けレッスン 52回 ─── 文字列
初級者向けレッスン 52回 ─── 文字列
初級者向けレッスン 51回 ─── 例外
初級者向けレッスン 51回 ─── 例外
Ruby初級者向けレッスン 50回 ─── ブロック
Ruby初級者向けレッスン 50回 ─── ブロック
Ruby 初級者向けレッスン 49回───クラス
Ruby 初級者向けレッスン 49回───クラス
Ruby初級者向けレッスン 48回 ─── Array と Hash
Ruby初級者向けレッスン 48回 ─── Array と Hash
Ruby初級者向けレッスン 47回 ─── 文字列
Ruby初級者向けレッスン 47回 ─── 文字列
Ruby初級者向けレッスン 第46回 ─── Test::Unit
Ruby初級者向けレッスン 第46回 ─── Test::Unit
ジュンク堂書店の方から来ました
ジュンク堂書店の方から来ました
Ruby初級者向けレッスン 45回 ─── 例外
Ruby初級者向けレッスン 45回 ─── 例外
PHPer のための Ruby 教室
1.
2014年6月28日 PHPerのためのRuby教室 ひがき @ Ruby関西
2.
Rubyとは • まつもとゆきひろ氏が開発 • スクリプト言語 •
オブジェクト指向言語 • Ruby on Railsが有名
3.
Rubyの世界観 • 文法だけではない違い – データ構造 –
イディオム – ライブラリ – 開発環境 • 考え方に影響を与える
4.
Rubyとは • matz が考えた最強のプログラミング言語 •
性能よりも生産性 • 開発者に心地よい言語
5.
Rubyをキメると 気持ちいい
6.
PHPと Ruby できることに違いはない
7.
Rubyの数値 # $age =
49; age = 49 # $price = 10000; price = 10_000 # => 10000 # M_PI Math::PI # => 3.141592653589793
8.
Rubyの整数 2 ** 1024
# => 1797693134862315907729305 1907890247336179769789423065727343008115 7732675805500963132708477322407536021120 1138798713933576587897688144166224928474 3063947412437776789342486548527630221960 1246094119453082952085005768838150682342 4628814739131105408272371633505106845862 9823994724593847971630483535632962422413 7216
9.
Rubyの文字列 # $name =
’matz’; name = ’matz’ # "$name($age)"; "#{name}(#{age})" # => "matz(49)"
10.
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
11.
Rubyの特徴 ブロック a =
[1, 2, 3] a.each do |i| puts i * i end # >> 1 # >> 4 # >> 9
12.
Rubyの特徴 ブロック a =
[1, 2, 3] a.each{|i| puts i * i} # >> 1 # >> 4 # >> 9
13.
PHPの foreach と何が違うの? •
each は Array のメソッド • ブロックは each の引数 – 高階関数
14.
高階関数 a = [1,
2, 3] puts_square = Proc.new do |i| puts i * i end a.each(&puts_square) # >> 1 # >> 4 # >> 9
15.
ファイル入出力とブロック # $fp =
fopen("data.txt", "r"); f = open("data.txt") while buf = f.gets # ... なにか ... end # fclose($fp); f.close
16.
ファイル入出力とブロック # file_get_contents("data.txt"); open("data.txt"){|f| f.read} #
file("data.txt"); open("data.txt"){|f| f.readlines}
17.
ファイル入出力とブロック アプリケーション ブロック File § ¦ ¤ ¥{|f|
f.read} -生成 -open 呼出 close ×
18.
制御構造ではなくメソッド def verbose yield yield end verbose{puts ’こんにちは’} #
こんにちは # こんにちは
19.
Mix-in • クラスにモジュールを取り込む機能 – モジュール:
実装の集合体 • Enumerable – 繰り返しに関するモジュール – each メソッドを持つクラスで利用可能
20.
BasicObject Object Mix-in Kernel Mix-in Enumerable map select inject Array Hash each each
21.
繰り返し 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
22.
Rubyの特徴 オープンクラス ruby.class #
= String ruby.upcase # = RUBY ruby.compact # ~ -:4:in ‘main’: undefined method ‘compact’ for ruby:String (NoMethodErro
23.
class String def compact gsub(/r?n/,
’’) end end s = No Ruby, No Life. s.compact # = No Ruby,No Life.
24.
自分の足を撃つ自由 Rubyは君を信頼する。Rubyは君を分別のある プログラマとして扱う。Rubyはメタプログラミ ングのような強力な力を与える。 ただし、大いなる力には、大いなる責任が伴なう ことを忘れてはいけない。 —メタプログラミングRuby 序文より
25.
Rubyの特徴 DSL • DSL
(Domain Specific Language) – ドメイン特化言語 ∗ 高い抽象度 – Rubyは内部DSLを作りやすい
26.
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
27.
設定かプログラムか DSL class Person attr_accessor
:name end person.name # = matz person.name = ’MATZ’ person.name # = MATZ
28.
代入もメソッド class Person def name @name end def
name= name @name = name end end
29.
Object Module attr accessor Class Person:Class
30.
メソッドを作るメソッド 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
31.
DSLはつくれる • 宣言的に記述する • カッコを使わない –
( ) メソッドの引数 – [ ] 配列 – { } ハッシュ、ブロック
32.
Sinatra の例 DSL require
’sinatra’ get ’/’ do PHP Kansai end
33.
カッコを使うと…… require(’sinatra’) get(’/’) { PHP Kansai }
34.
配列の[ ]を取りたい def sum(ary) ary.inject{|s,
i| s + i} end sum([1, 2, 3, 4, 5]) # = 15 sum [1, 2, 3, 4, 5] # = 15
35.
可変長引数を使う def sum(*ary) ary.inject{|s, i|
s + i} end sum 1, 2, 3, 4, 5 # = 15
36.
ハッシュの{ }を取りたい 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]
37.
最後の引数なら省略可 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]
38.
ハッシュの => も取りたい 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]
39.
DSLを作ってみよう class Page def layout(name,
*size, margin) ... end end
40.
カッコを使うと…… page.layout(:A4, [210, 297], {:top
= 10, :bottom = 20, :left = 18, :right = 24})
41.
これは Rubyのコードです page.layout :A4,
210, 297, top: 10, bottom: 20, left: 18, right: 24
42.
なぜDSL • 抽象度・表現力が高い • 問題領域に集中できる
43.
まとめ • PHPも Rubyも、できることに違いはない •
Rubyの特徴 – ブロック – Mix-in – オープンクラス – DSLを作りやすい
44.
もしRubyに興味を持ったら • コミュニティ – Ruby関西 –
Minami.rb – amagasaki.rb – Shinosaka.rb – Kyoto.rb – Nishiwaki.rb Higashinada.rb – Wakayama.rb
45.
Rubyをキメると 気持ちいい
Download now