Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PHPer.rb
Search
tdak
February 02, 2014
Technology
610
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
PHPer.rb
2014/1/31に開催した「PHPerさんのためのRuby勉強会」の発表資料です。
参加者の皆様から補足してもらったことや、話題に上ったことなどを追記しています。
tdak
February 02, 2014
More Decks by tdak
See All by tdak
1周回って、 辿り着いた技術コミュニティの話 / kichijoji.pm #26 tech community
tdak
0
1.4k
Ruby on Rails 最初の一歩
tdak
5
5k
tqrk10
tdak
1
1.1k
BEAR.Sunday meet up#2
tdak
0
370
オブジェクト指向と設計の話
tdak
4
4.1k
Ruby * Scratch * CoderDojo
tdak
0
1.9k
Rubyをはじめたときにつまずいたこと
tdak
0
2.3k
ゆるかわLinux
tdak
15
3.6k
Other Decks in Technology
See All in Technology
貴方はどのエンジニアリングを磨くのか
hatyibei
0
130
AI Coding Agent時代のcdk-nagガードレール 〜組織ルールを強制CIで守り抜く設計の挑戦〜
mhrtech
3
160
ヘルスケア領域における AI 活用と その安全性担保のための取り組み (Leveraging AI in Healthcare and Our Efforts to Ensure Its Safety) - Google I/O Extended Tokyo 2026, July 11, 2026
zettaittenani
0
370
「最後に責任を取るのはチーム」— 人間のPRレビューを最小化してアップデートしたメンタルモデル
jnishime_dresscode
0
690
DatabricksにおけるMCPソリューション
taka_aki
1
250
Empower GenAI with Agile - あなたのアジャイルが生成AIのバフになる仕組み
hageyahhoo
1
180
あなたの『Site』はどこですか? — xREという考え方
miyamu
0
1.2k
しぶいSRE: サーバから見えない障害にどう向き合うか。ラストワンマイルのデバッグ実践 / Shibui SRE
kanny
13
6.2k
End-to-Endで考える信頼性 —LINEアプリにおけるクライアント開発×SRE連携の実践
maruloop
4
4.2k
人を動かすのは時間ではなく、納得感 〜新任EMが入社3ヶ月、組織を2回変えた話〜
kakehashi
PRO
3
220
関数型の考えを TypeScript に持ち込んで、テストしやすい純粋関数を増やす / Pure at the Core, Effects at the Edge: Bringing Functional Thinking into TypeScript
kaminashi
1
120
最適な自走を最小限の支援で — M&Aで拡大する組織で少人数SREが挑んだ1年 / SRE NEXT 2026
genda
0
1.2k
Featured
See All Featured
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.6k
Paper Plane
katiecoart
PRO
2
52k
The Cult of Friendly URLs
andyhume
79
6.9k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
2
330
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.2k
Navigating Team Friction
lara
192
16k
Marketing to machines
jonoalderson
1
5.6k
A Soul's Torment
seathinner
6
3.1k
Visualization
eitanlees
152
17k
Transcript
PHPerさんのためのRuby勉強会 2014年01月31日(金) @tdakak
ふだん PHP で開発しているひとが Ruby の学習を通して Ruby や PHP となかよくなること。 みんなでやればこわくない。
この勉強会の目的
* 株式会社コノルです * Ruby と PHP で開発しています * iOS /
Android アプリ開発もやってます * 電子工作等もやってます * お手洗いは1Fです * 飲食はそれなりに自由です 会場について
* なぜ Ruby を学ぶのか * Ruby について知ろう * Ruby と
PHP の記述例 * Ruby の勉強を 続けていくために 今日やることリスト
* プログラミングそのものの基礎 * PHP dis やらないことリスト
なぜRubyを学ぶのか?
ポジティブ * オブジェクト指向となかよくなりたい * 達人プログラマ的な心がけ 「毎年新しい言語をひとつ以上学習する」 * 楽しそう * モテそう
なぜRubyを学ぶのか
ネガティブ * 将来への不安 * PHP つらい なぜRubyを学ぶのか
* 言語仕様がかわいくない… → 仕方がない、好みの問題 * 上記以外の場合 → 言語以前の問題である可能性も高い
PHP もかわいいよ(´・ω・`) なぜRubyを学ぶのか
なぜRubyを学ぶのか PHP Dis や将来への不安などで つらくなったときにぜひどうぞ。 http://koriym.github.io/2011/12/php-dis-is-it/
Ruby はオブジェクト指向言語。 言語自体がもうオブジェクト指向。 なぜRubyを学ぶのか
PHP でもオブジェクト指向の概念は大事なので Ruby の学習で得た知識や体験は PHP での開発にも還元できる …ような気がする。 なぜRubyを学ぶのか
Ruby のことを知ろう
* PHP と同じスクリプト言語 * 言語そのものがオブジェクト指向 * RubyGems, gem * Bundler
* Ruby on Rails, Padrino, Sinatra Rubyのこと、世界観
言語そのものがオブジェクト指向
Ruby はオブジェクト指向言語。 オブジェクト指向についてちょっとおさらい。 オブジェクト指向言語
* プログラムの処理の対象を「データ」ではなく 「オブジェクト」として考える * データ構造を組み合わせて複雑な情報を表現 * データをプログラム上で表現することで いろいろな操作が可能になる 「たのしいRuby」より
オブジェクト指向とは
PHP で文字列の長さを取得する場合 strlen 関数に文字列 “hoge” を渡す。 PHPで文字列の長さを取得する
Ruby で文字列の長さを取得する場合 文字列 “hoge” 自身に対して 「あなたの長さは?」 と問いかける感じ。 Rubyで文字列の長さを取得する
多態性、多相性、多様性。 同名のメソッドなどをオブジェクトの種類ごとに 使い分けることができる性質のこと。 ポリモーフィズム
* String.length で文字列の長さを取得できる * Array.length では配列の長さを取得できる * Hash.length ではハッシュの長さを取得できる ポリモーフィズム
ポリモーフィズム
"If it walks like a duck and quacks like a
duck, it must be a duck" もしもそれがアヒルのように歩き アヒルのように鳴くのなら、 それはアヒルである ダックタイピング
オブジェクトを特徴付けるのは 実際の種類(クラス)ではなく、 そのオブジェクトがどのように振る舞うか (どんなメソッドを持っているか)である 「たのしいRuby」より ダックタイピング
同じ操作を行えるならば、 実際は違うものであっても その違いを気にしない。 ダックタイピング
実際は違うものであっても、 同じ操作のできるものは 処理を共通化することができる。 ダックタイピング
Ruby だとすべての変数がオブジェクト。 すべてのオブジェクトの元になっているのが Object クラス。 Objectクラス
このクラスに定義されているメソッドは 上書きしたり未定義にしない限り すべてのオブジェクトで使用可能。 Objectクラス
RubyGems
Ruby 用のパッケージ管理システム。 よく gem (じぇむ) と呼ばれる。 gem を配布するサーバも提供している。 http://rubygems.org/ PHP
でいうところの Packagist (たぶん) RubyGems
$ gem install <パッケージ名> $ gem list *** LOCAL GEMS
*** libxml-ruby (2.6.0) Nokogiri (1.5.6) RubyGems
Bundler
アプリケーションで利用する gem を定義して 依存関係を解決するための仕組みが Bundler ( ばんどらー )。 http://bundler.io/ PHP
だと Composer に相当するもの。 Bundler
Composer と同じように、 Gemfle, Gemfle.lock というファイルで管理。 $ bundle install $ bundle
update Bundler
# Gemfle source 'https://rubygems.org' gem 'rails', '4.0.0' gem 'pg' gem
'cofee-rails', '~> 4.0.0' Bundler
フレームワーク
Ruby のフレームワークでは Ruby on Rails がデファクトスタンダード。 よくも悪くも PHP のような選択肢はない。 フレームワーク
Rails > Padrino > Sinatra ←重い 軽い→ Rails が Symfony 的ポジションとするなら、
Sinatra は Silex に相当するイメージ。 フレームワーク
irb
Interactive Ruby の略。 Ruby の式をかんたんに実行できる。 Ruby インストール済みのUnix 系 OS なら
下記コマンドで irb を呼び出せる。 $ irb irb
黒魔術・イディオムなど
メタプログラミングしやすい。 組み込みライブラリのメソッドを オーバーライドすることも可能。 黒魔術
お約束的なこと 同じメソッド名で オブジェクトの内容を変更する破壊的メソッドと そうでないメソッドが存在する場合、 破壊的メソッドの方は メソッド名の最後に ! をつける。
お約束的なこと true / false を返すメソッドは メソッド名の最後に ? をつける。
お約束的なこと return を省略することが多い。 def greeting “Hello world!” end greeting #=>
“Hello world!”
お約束的なこと ブロック内の処理が1行で済むときは {} で書く。 [“foo”, “bar”].each {|v| p v }
複数行になるときは do 〜 end で書く。 [“foo”, “bar”].each do |v| … end
お約束的なこと ハッシュのキーなどは文字列ではなく シンボル ( :hogehoge の形式 ) を使う。 { :apple
=> 1, :banana => 2 }
シンボル シンボルは任意の文字列と 一対一に対応するオブジェクト。 * 文字列と比べると効率がよく、比較も高速。 * immutable で安心。 http://docs.ruby-lang.org/ja/2.1.0/class/Symbol.html
シンボル 同じ文字列に見えるけど実は別のオブジェクト p “hoge”.object_id #=> 70151131105020 p “hoge”.object_id #=> 70151131132280
シンボルは同じオブジェクト p :hoge.object_id #=> 516648 p :hoge.object_id #=> 516648
メソッドのカッコを省略できる。 引数がひとつの場合は省略することが多い。 puts(“hoge”) puts “hoge” イディオム
値が nil だったら空の配列にしたいときなど、 ||= を使う。 hoge ||= [] イディオム
文字列の配列を作りたいときは %w が便利。 [“hoge”, “fuga”, “piyo”] %w(hoge fuga piyo) イディオム
ブロックの中でメソッドを呼びたいとき &: だけで表現できる。 fruits = [[“apple”, 0], [“banana”, 1], [“orange”,
2]] fruits.map{|v| v.frst } fruits.map(&:frst) イディオム
複雑な条件でなければ一行で済ませたい。 p “1は奇数です” if 1.odd? p “2は奇数ではありません” unless 2.odd? 10.times{|n|
p n if n.odd? } ワンライナーで書きたい
RubyとPHPの記述例
PHP echo “Hello world!”; Ruby p “Hello world!” print /
echo
PHP $hoge = null; Ruby hoge = nil NULL /
NIL
PHP $hoge === “piyo” Ruby hoge == “piyo” 比較(型チェック含む)
PHP $hoge == “piyo” Ruby hoge === “piyo” 比較(ゆるい)
PHP is_null($hoge) Ruby hoge.nil? NULL / NILかどうか調べる
PHP $fruits = [“lemon”, “apple”, “banana”]; sort($fruits); Ruby fruits =
[“lemon”, “apple”, “banana”] fruits.sort! 配列をソートする
PHP preg_match(“/^piyo/”, $hoge); Ruby $hoge =~ /^piyo/ 正規表現
PHP false, null, 0, 空文字列, 空配列 Ruby false, nil false
扱いになるもの
Rubyの勉強を続けていくために
おすすめサイト
公式のリファレンスマニュアル http://docs.ruby-lang.org/ja/2.1.0/doc/index.html PHP における php.net みたいな位置づけ。 分からなくなったらとりあえずここ。 Rubyのことなら
Railsチュートリアル http://railstutorial.jp/ やってみるとしあわせになれそうな気がする。 TDD なども一緒に学べる。 Railsを勉強したいときは
おすすめ書籍
パーフェクトRuby ひととおり書いてある。 いろいろ書いてある。 とにかく書いてある。 いろいろ知りたい人向け
メタプログラミングRuby 黒魔術な話。 付録のイディオム集も便利。 黒魔術を習得したい人向け
コミュニティ・勉強会など
* Twitter とかで聞く * Ruby書いてる人と知り合いになる * Ruby好きな人の集まりに顔を出す ひとりだとくじけがち…
* なんとか.rb * なんとか Ruby 会議 * Rails 勉強会, TOKYO
Rails meetup * Rails Girls Tokyo Ruby系のコミュニティ・勉強会
* 大抵「地域名.rb」で集まっている * 定期的に開催されていることが多い (毎週何曜日とか、毎月第何何曜日とか) * 「自分以外はほぼ全員知り合い」みたいな 状況もありえるけどたぶん大丈夫 なんとか.rb
* 東京都 Asakusa.rb, Ginza.rb, Tokyu.rb Sendagaya.rb, Shinjuku.rb, Shibuya.rb * 神奈川県
Yokohama.rb, Kawasaki.rb なんとか.rb(エリア別)
* がっつり → Asakusa.rb, Shibuya.rb * こつこつ → Sendagaya.rb *
読んだり聞いたりしたい → Yokohama.rb * コードとか読みたい → Ginza.rb * コードとか書きたい → Shinjuku.rb * いろんな人と話したい → Tokyu.rb ※個人の偏見です。くわしい方フォローお願いします… なんとか.rb(雰囲気別)
* コミュニティ活動がさかんなので、 横のつながりは結構強い(知り合いが多い) * 内輪っぽい空気を感じることがあるかも しれないけどあんまり気にしない * PHP
/ PHPer を dis る人も ときどきいるけどあんまり気にしない (みんな PHPer にもやさしいよ) Rubyの勉強会もこわくない
まとめ
まとめ * Ruby のことを知ると PHP もたのしい * Ruby 書いてみるとたのしい *
Ruby のコミュニティに参加するとたのしい * Ruby かわいい * PHP かわいい!!!!!!
お疲れ様でした!