Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
PHPerさんのためのRuby勉強会 2014年01月31日(金) @tdakak
Slide 2
Slide 2 text
ふだん PHP で開発しているひとが Ruby の学習を通して Ruby や PHP となかよくなること。 みんなでやればこわくない。 この勉強会の目的
Slide 3
Slide 3 text
* 株式会社コノルです * Ruby と PHP で開発しています * iOS / Android アプリ開発もやってます * 電子工作等もやってます * お手洗いは1Fです * 飲食はそれなりに自由です 会場について
Slide 4
Slide 4 text
* なぜ Ruby を学ぶのか * Ruby について知ろう * Ruby と PHP の記述例 * Ruby の勉強を 続けていくために 今日やることリスト
Slide 5
Slide 5 text
* プログラミングそのものの基礎 * PHP dis やらないことリスト
Slide 6
Slide 6 text
なぜRubyを学ぶのか?
Slide 7
Slide 7 text
ポジティブ * オブジェクト指向となかよくなりたい * 達人プログラマ的な心がけ 「毎年新しい言語をひとつ以上学習する」 * 楽しそう * モテそう なぜRubyを学ぶのか
Slide 8
Slide 8 text
ネガティブ * 将来への不安 * PHP つらい なぜRubyを学ぶのか
Slide 9
Slide 9 text
* 言語仕様がかわいくない… → 仕方がない、好みの問題 * 上記以外の場合 → 言語以前の問題である可能性も高い PHP もかわいいよ(´・ω・`) なぜRubyを学ぶのか
Slide 10
Slide 10 text
なぜRubyを学ぶのか PHP Dis や将来への不安などで つらくなったときにぜひどうぞ。 http://koriym.github.io/2011/12/php-dis-is-it/
Slide 11
Slide 11 text
Ruby はオブジェクト指向言語。 言語自体がもうオブジェクト指向。 なぜRubyを学ぶのか
Slide 12
Slide 12 text
PHP でもオブジェクト指向の概念は大事なので Ruby の学習で得た知識や体験は PHP での開発にも還元できる …ような気がする。 なぜRubyを学ぶのか
Slide 13
Slide 13 text
Ruby のことを知ろう
Slide 14
Slide 14 text
* PHP と同じスクリプト言語 * 言語そのものがオブジェクト指向 * RubyGems, gem * Bundler * Ruby on Rails, Padrino, Sinatra Rubyのこと、世界観
Slide 15
Slide 15 text
言語そのものがオブジェクト指向
Slide 16
Slide 16 text
Ruby はオブジェクト指向言語。 オブジェクト指向についてちょっとおさらい。 オブジェクト指向言語
Slide 17
Slide 17 text
* プログラムの処理の対象を「データ」ではなく 「オブジェクト」として考える * データ構造を組み合わせて複雑な情報を表現 * データをプログラム上で表現することで いろいろな操作が可能になる 「たのしいRuby」より オブジェクト指向とは
Slide 18
Slide 18 text
PHP で文字列の長さを取得する場合 strlen 関数に文字列 “hoge” を渡す。 PHPで文字列の長さを取得する
Slide 19
Slide 19 text
Ruby で文字列の長さを取得する場合 文字列 “hoge” 自身に対して 「あなたの長さは?」 と問いかける感じ。 Rubyで文字列の長さを取得する
Slide 20
Slide 20 text
多態性、多相性、多様性。 同名のメソッドなどをオブジェクトの種類ごとに 使い分けることができる性質のこと。 ポリモーフィズム
Slide 21
Slide 21 text
* String.length で文字列の長さを取得できる * Array.length では配列の長さを取得できる * Hash.length ではハッシュの長さを取得できる ポリモーフィズム
Slide 22
Slide 22 text
ポリモーフィズム
Slide 23
Slide 23 text
"If it walks like a duck and quacks like a duck, it must be a duck" もしもそれがアヒルのように歩き アヒルのように鳴くのなら、 それはアヒルである ダックタイピング
Slide 24
Slide 24 text
オブジェクトを特徴付けるのは 実際の種類(クラス)ではなく、 そのオブジェクトがどのように振る舞うか (どんなメソッドを持っているか)である 「たのしいRuby」より ダックタイピング
Slide 25
Slide 25 text
同じ操作を行えるならば、 実際は違うものであっても その違いを気にしない。 ダックタイピング
Slide 26
Slide 26 text
実際は違うものであっても、 同じ操作のできるものは 処理を共通化することができる。 ダックタイピング
Slide 27
Slide 27 text
Ruby だとすべての変数がオブジェクト。 すべてのオブジェクトの元になっているのが Object クラス。 Objectクラス
Slide 28
Slide 28 text
このクラスに定義されているメソッドは 上書きしたり未定義にしない限り すべてのオブジェクトで使用可能。 Objectクラス
Slide 29
Slide 29 text
RubyGems
Slide 30
Slide 30 text
Ruby 用のパッケージ管理システム。 よく gem (じぇむ) と呼ばれる。 gem を配布するサーバも提供している。 http://rubygems.org/ PHP でいうところの Packagist (たぶん) RubyGems
Slide 31
Slide 31 text
$ gem install <パッケージ名> $ gem list *** LOCAL GEMS *** libxml-ruby (2.6.0) Nokogiri (1.5.6) RubyGems
Slide 32
Slide 32 text
Bundler
Slide 33
Slide 33 text
アプリケーションで利用する gem を定義して 依存関係を解決するための仕組みが Bundler ( ばんどらー )。 http://bundler.io/ PHP だと Composer に相当するもの。 Bundler
Slide 34
Slide 34 text
Composer と同じように、 Gemfle, Gemfle.lock というファイルで管理。 $ bundle install $ bundle update Bundler
Slide 35
Slide 35 text
# Gemfle source 'https://rubygems.org' gem 'rails', '4.0.0' gem 'pg' gem 'cofee-rails', '~> 4.0.0' Bundler
Slide 36
Slide 36 text
フレームワーク
Slide 37
Slide 37 text
Ruby のフレームワークでは Ruby on Rails がデファクトスタンダード。 よくも悪くも PHP のような選択肢はない。 フレームワーク
Slide 38
Slide 38 text
Rails > Padrino > Sinatra ←重い 軽い→ Rails が Symfony 的ポジションとするなら、 Sinatra は Silex に相当するイメージ。 フレームワーク
Slide 39
Slide 39 text
irb
Slide 40
Slide 40 text
Interactive Ruby の略。 Ruby の式をかんたんに実行できる。 Ruby インストール済みのUnix 系 OS なら 下記コマンドで irb を呼び出せる。 $ irb irb
Slide 41
Slide 41 text
黒魔術・イディオムなど
Slide 42
Slide 42 text
メタプログラミングしやすい。 組み込みライブラリのメソッドを オーバーライドすることも可能。 黒魔術
Slide 43
Slide 43 text
お約束的なこと 同じメソッド名で オブジェクトの内容を変更する破壊的メソッドと そうでないメソッドが存在する場合、 破壊的メソッドの方は メソッド名の最後に ! をつける。
Slide 44
Slide 44 text
お約束的なこと true / false を返すメソッドは メソッド名の最後に ? をつける。
Slide 45
Slide 45 text
お約束的なこと return を省略することが多い。 def greeting “Hello world!” end greeting #=> “Hello world!”
Slide 46
Slide 46 text
お約束的なこと ブロック内の処理が1行で済むときは {} で書く。 [“foo”, “bar”].each {|v| p v } 複数行になるときは do 〜 end で書く。 [“foo”, “bar”].each do |v| … end
Slide 47
Slide 47 text
お約束的なこと ハッシュのキーなどは文字列ではなく シンボル ( :hogehoge の形式 ) を使う。 { :apple => 1, :banana => 2 }
Slide 48
Slide 48 text
シンボル シンボルは任意の文字列と 一対一に対応するオブジェクト。 * 文字列と比べると効率がよく、比較も高速。 * immutable で安心。 http://docs.ruby-lang.org/ja/2.1.0/class/Symbol.html
Slide 49
Slide 49 text
シンボル 同じ文字列に見えるけど実は別のオブジェクト p “hoge”.object_id #=> 70151131105020 p “hoge”.object_id #=> 70151131132280 シンボルは同じオブジェクト p :hoge.object_id #=> 516648 p :hoge.object_id #=> 516648
Slide 50
Slide 50 text
メソッドのカッコを省略できる。 引数がひとつの場合は省略することが多い。 puts(“hoge”) puts “hoge” イディオム
Slide 51
Slide 51 text
値が nil だったら空の配列にしたいときなど、 ||= を使う。 hoge ||= [] イディオム
Slide 52
Slide 52 text
文字列の配列を作りたいときは %w が便利。 [“hoge”, “fuga”, “piyo”] %w(hoge fuga piyo) イディオム
Slide 53
Slide 53 text
ブロックの中でメソッドを呼びたいとき &: だけで表現できる。 fruits = [[“apple”, 0], [“banana”, 1], [“orange”, 2]] fruits.map{|v| v.frst } fruits.map(&:frst) イディオム
Slide 54
Slide 54 text
複雑な条件でなければ一行で済ませたい。 p “1は奇数です” if 1.odd? p “2は奇数ではありません” unless 2.odd? 10.times{|n| p n if n.odd? } ワンライナーで書きたい
Slide 55
Slide 55 text
RubyとPHPの記述例
Slide 56
Slide 56 text
PHP echo “Hello world!”; Ruby p “Hello world!” print / echo
Slide 57
Slide 57 text
PHP $hoge = null; Ruby hoge = nil NULL / NIL
Slide 58
Slide 58 text
PHP $hoge === “piyo” Ruby hoge == “piyo” 比較(型チェック含む)
Slide 59
Slide 59 text
PHP $hoge == “piyo” Ruby hoge === “piyo” 比較(ゆるい)
Slide 60
Slide 60 text
PHP is_null($hoge) Ruby hoge.nil? NULL / NILかどうか調べる
Slide 61
Slide 61 text
PHP $fruits = [“lemon”, “apple”, “banana”]; sort($fruits); Ruby fruits = [“lemon”, “apple”, “banana”] fruits.sort! 配列をソートする
Slide 62
Slide 62 text
PHP preg_match(“/^piyo/”, $hoge); Ruby $hoge =~ /^piyo/ 正規表現
Slide 63
Slide 63 text
PHP false, null, 0, 空文字列, 空配列 Ruby false, nil false 扱いになるもの
Slide 64
Slide 64 text
Rubyの勉強を続けていくために
Slide 65
Slide 65 text
おすすめサイト
Slide 66
Slide 66 text
公式のリファレンスマニュアル http://docs.ruby-lang.org/ja/2.1.0/doc/index.html PHP における php.net みたいな位置づけ。 分からなくなったらとりあえずここ。 Rubyのことなら
Slide 67
Slide 67 text
Railsチュートリアル http://railstutorial.jp/ やってみるとしあわせになれそうな気がする。 TDD なども一緒に学べる。 Railsを勉強したいときは
Slide 68
Slide 68 text
おすすめ書籍
Slide 69
Slide 69 text
パーフェクトRuby ひととおり書いてある。 いろいろ書いてある。 とにかく書いてある。 いろいろ知りたい人向け
Slide 70
Slide 70 text
メタプログラミングRuby 黒魔術な話。 付録のイディオム集も便利。 黒魔術を習得したい人向け
Slide 71
Slide 71 text
コミュニティ・勉強会など
Slide 72
Slide 72 text
* Twitter とかで聞く * Ruby書いてる人と知り合いになる * Ruby好きな人の集まりに顔を出す ひとりだとくじけがち…
Slide 73
Slide 73 text
* なんとか.rb * なんとか Ruby 会議 * Rails 勉強会, TOKYO Rails meetup * Rails Girls Tokyo Ruby系のコミュニティ・勉強会
Slide 74
Slide 74 text
* 大抵「地域名.rb」で集まっている * 定期的に開催されていることが多い (毎週何曜日とか、毎月第何何曜日とか) * 「自分以外はほぼ全員知り合い」みたいな 状況もありえるけどたぶん大丈夫 なんとか.rb
Slide 75
Slide 75 text
* 東京都 Asakusa.rb, Ginza.rb, Tokyu.rb Sendagaya.rb, Shinjuku.rb, Shibuya.rb * 神奈川県 Yokohama.rb, Kawasaki.rb なんとか.rb(エリア別)
Slide 76
Slide 76 text
* がっつり → Asakusa.rb, Shibuya.rb * こつこつ → Sendagaya.rb * 読んだり聞いたりしたい → Yokohama.rb * コードとか読みたい → Ginza.rb * コードとか書きたい → Shinjuku.rb * いろんな人と話したい → Tokyu.rb ※個人の偏見です。くわしい方フォローお願いします… なんとか.rb(雰囲気別)
Slide 77
Slide 77 text
* コミュニティ活動がさかんなので、 横のつながりは結構強い(知り合いが多い) * 内輪っぽい空気を感じることがあるかも しれないけどあんまり気にしない * PHP / PHPer を dis る人も ときどきいるけどあんまり気にしない (みんな PHPer にもやさしいよ) Rubyの勉強会もこわくない
Slide 78
Slide 78 text
まとめ
Slide 79
Slide 79 text
まとめ * Ruby のことを知ると PHP もたのしい * Ruby 書いてみるとたのしい * Ruby のコミュニティに参加するとたのしい * Ruby かわいい * PHP かわいい!!!!!!
Slide 80
Slide 80 text
お疲れ様でした!