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

お疲れ様でした!