Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Rubyについてあれこれ / About Ruby
Search
とみたまさひろ
July 20, 2019
Technology
770
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Rubyについてあれこれ / About Ruby
Nagano.rb #2 で発表したスライド
とみたまさひろ
July 20, 2019
More Decks by とみたまさひろ
See All by とみたまさひろ
MySQLとPostgreSQLのコレーション / Collation of MySQL and PostgreSQL
tmtms
1
1.9k
文字列の並び順 / Unicode Collation
tmtms
4
1.2k
夢の印税生活 / Life on Royalties
tmtms
0
660
文字列の並び順 / String Collation
tmtms
1
270
日本MySQLユーザ会ができるまで / making MyNA
tmtms
1
1.1k
Ruby on Browser - RubyWorld Conference 2024
tmtms
1
1.7k
Ruby on Browser
tmtms
1
2.4k
私のRSpecの書き方 / How I write RSpec
tmtms
5
2.3k
ショートカットと端末 / shortcut & terminal
tmtms
2
1.1k
Other Decks in Technology
See All in Technology
深夜のクラウド懺悔室 1:29:300 or 1:0:0
kazzpapa3
1
240
Claude Code本って、 読む必要あるの?
oikon48
2
420
20260906 「AWS運用入門」著者が教える、運用業務への生成AI活用入門
masaruogura
0
260
DEFCON34-Write-up_HYCu-MYCu
daikiokazaki
0
150
全員がプロダクトへ向き合う組織を持続成長させるために——組織づくりのフライホイールと4象限 / The Flywheel Model and Four Quadrants for Organizational Design
hiro_torii
4
980
あるけみー式LTスライド作成術
alchemy1115
1
200
Code4Lib JAPANカンファレンス2026 開会挨拶 / Code4Lib JAPAN Conference 2026: Opening Remarks
ykiyota
0
340
Screen Lens - 今見てる画面を翻訳する
komagata
0
260
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
3
480
20260912_スクフェス三河
kgnkhkr
0
310
データ界隈LT祭 第1回LT登壇
taromatsui_cccmkhd
0
190
From Vanilla Kubernetes to a Batteries-Included Platform: Developer Experience at 1,300+ Clusters
yosshi_
0
690
Featured
See All Featured
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
510
Documentation Writing (for coders)
carmenintech
77
5.5k
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.1k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
470
How to Talk to Developers About Accessibility
jct
2
540
What's in a price? How to price your products and services
michaelherold
247
13k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
590
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
6
1.2k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Transcript
Rubyについてあれこれ Rubyについてあれこれ とみたまさひろ 2019-07-20 nagano.rb #2 1
自己紹介 自己紹介 とみたまさひろ 長野在住 / 去年から東京に単身赴任 富士通クラウドテクノロジーズ 日本MySQLユーザ会 得意技: 文字化け
@tmtms https://tmtms.hatenablog.com 2
OSS貢献者賞 2013 3
書籍執筆 2000-2011 / 2007 / 2006 4
雑誌寄稿 201509 / 201606 / 201609 / 201612 / 201707
5
Ruby Ruby 第一言語 Ruby歴20数年 Ruby/MySQL作成(1998〜) 今はもう使われてない ほぼ一年Ruby書いてない… 6
Ruby Ruby 7
日本発 日本発 スクリプト言語 スクリプト言語 オブジェクト指向言語 オブジェクト指向言語 動的言語 動的言語 8
日本発 日本発 スクリプト言語 スクリプト言語 オブジェクト指向言語 オブジェクト指向言語 動的言語 動的言語 9
作者が日本人 広く世界で使われている言語で 作者が日本人というのはあんまりない 10
日本人利用者も多い 国内に地域Rubyコミュニティが多い なんとか.rb なんとかruby 日本語のドキュメントが多い コミッターにも日本人が多い 日本語で質問できる 11
RubyKaigi RubyKaigi 世界最大の国際Rubyカンファレンス 国内で国際カンファレンスに参加できる 2016年から地方開催 2016 京都市 2017 広島市 2018
仙台市 2019 福岡市 http://rubykaigi.org 12
RubyKaigi 2020 RubyKaigi 2020 4/9 - 11 松本市で開催 ㊗ 松本市で開催
㊗ https://rubykaigi.org/2020 13
RubyKaigi 2020 RubyKaigi 2020 4/9 - 11 松本市で開催 ㊗ 松本市で開催
㊗ 初の県庁所在地以外開催 https://rubykaigi.org/2020 13
RubyKaigi 2020 RubyKaigi 2020 4/9 - 11 松本市で開催 ㊗ 松本市で開催
㊗ 初の県庁所在地以外開催 長野市涙目 (;_;) https://rubykaigi.org/2020 13
何故松本? 何故松本? 名前繋がりという噂 名前繋がりという噂 14
RubyKaigi 2020 RubyKaigi 2020 2019福岡ではなんと県知事が登壇 長野県どーする!? アルクマ来ないかな http://www.pref.fukuoka.lg.jp/contents/rubykaigi2019.html 15
日本発 日本発 スクリプト言語 スクリプト言語 オブジェクト指向言語 オブジェクト指向言語 動的言語 動的言語 16
スクリプト言語 スクリプト言語 スクリプト言語とは、プログラミング 言語のうち、プログラムの記述や実行 を比較的簡易に行うことができる言語 の総称である。 https://www.weblio.jp/content/スクリプト言語 17
スクリプト言語 スクリプト言語 要するにプログラムを書いてサクッと実行できる インタプリタ 逐次実行 コンパイル 実行時に内部的にコンパイルされてから実行 明にコンパイル作業が必要なものはスクリプトとは呼ばない(たぶん) 18
インタプリタ インタプリタ 文法エラーがあっても途中まで実行される echo 123 echo 456 > # error
echo 789 % bash hoge.sh 123 hoge.sh: 行 3: 予期しないトークン `newline' 周辺に構文エラーがあります hoge.sh: 行 3: `echo 456 > # error' 19
Rubyはコンパイルしてから実行 Rubyはコンパイルしてから実行 文法エラーがあったら実行されない p 123 p 456 _ # error
p 789 % ruby hoge.rb hoge.rb:2: syntax error, unexpected tIDENTIFIER, expecting end- p 456 _ # error 20
日本発 日本発 スクリプト スクリプト オブジェクト指向 オブジェクト指向 動的 動的 21
オブジェクト指向とは、コンピュータ プログラムの設計や実装についての考 え方の一つで、互いに密接に関連する データと手続き(処理手順)をオブジ ェクト(object)と呼ばれる一つのま とまりとして定義し、様々なオブジェ クトを組み合わせて関連性や相互作用 を記述していくことによりシステム全 体を構築していく手法。 http://e-words.jp/w/オブジェクト指向.html
22
オブジェクト自身ができることを知っている オブジェクト自身ができることを知っている C: オブジェクト指向でない Ruby: オブジェクト指向 Rubyの「オブジェクト指向」は これくらいの理解でいいような気がする strlen("HOGE"); //=>
4 "HOGE".length #=> 4 23
Rubyプログラムの例 Rubyプログラムの例 # クラス定義 class Hoge # 初期化 def initialize(arg)
@arg = arg # インスタンス変数に引数を記憶 end # 初期化時に渡された引数を表示 def fuga puts @arg end end hoge = Hoge.new("abc") # Hogeクラスのオブジェクト生成 hoge.fuga # "abc"が出力される 24
言語仕様としての命名規則 言語仕様としての命名規則 変数の1文字目 大文字: 定数(クラスも定数) 「$」: グローバル変数 「@」: インスタンス変数 小文字や記号以外の文字:
ローカル変数 / メソッド 25
メソッド名の末尾に「!」「?」を使用可 メソッド名の末尾に「!」「?」を使用可 hoge! ちょっと注意が必要 破壊的メソッドとか hoge? 真偽値を返す 他の言語でisHoge()みたいな 強制ではないけど倣っといた方が無難 26
Rubyでは値はすべてがオブジェクト Rubyでは値はすべてがオブジェクト 数値 / 文字列 / シンボル / 配列 ture
/ false / nil 等々 オブジェクトではない基本型(プリミティブ型) というものは無い 27
オブジェクトの真偽値 オブジェクトの真偽値 false, nil だけが偽 その他の値(オブジェクト)はすべて真 0, 空文字列, 空配列等も真 28
クラスを調べる クラスを調べる 123.class #=> Integer "Hoge".class #=> String :sym.class #=>
Symbol [1,2,3].class #=> Array true.class #=> TrueClass false.class #=> FalseClass nil.class #=> NilClass 29
クラスもオブジェクト クラスもオブジェクト クラスはClassクラスのオブジェクト class B < A end B.class #=>
Class B.superclass #=> A 30
Class.new でクラスを作れる Class.new でクラスを作れる ↑と↓は同じ B = Class.new(A) class B
< A; end 31
メソッドはオブジェクトではない メソッドはオブジェクトではない 残念 def hoge end hoge # …として参照するとメソッド呼び出し 32
オブジェクト化もできる オブジェクト化もできる methodメソッドはメソッドをMethodオブジェクト化する m = method(:hoge) p m #=> #<Method:
main.hoge> 33
演算子もメソッド 演算子もメソッド ↑は↓と同じ 1 + 2 * 3 #=> 7
1.+(2.*(3)) #=> 7 34
ブロック ブロック # 各要素に対して繰り返し array.each do |e| ... end #
指定回数繰り返し 5.times do |i| ... end # ブロック終了時にファイルをクローズ File.open("filename.txt") do |f| f.read ... end 35
ブロックを受け取る側 ブロックを受け取る側 def each yield(x) # ブロックを引数xで実行 end # ブロックをオブジェクトとして受け取る
def each(&block) block.call(x) # ブロックを引数xで実行 sub(&block) # 他のメソッドに渡す block.class #=> Proc end 36
Procオブジェクトの作成 Procオブジェクトの作成 a = proc{|a, b| ... } # 引数省略可
b = lambda{|a, b| ... } # 引数省略不可 c = ->(a, b){ ... } # lambda{|a, b| ... } と同じ 5.times(&a) 37
日本発 日本発 スクリプト スクリプト オブジェクト指向 オブジェクト指向 動的 動的 38
動的型つけ 動的型つけ 変数 / 引数 / メソッドの戻り値に型がない def hoge var
= 123 var = "hoge" if rand > 0.5 return var end 39
既存のクラスにメソッド追加 既存のクラスにメソッド追加 class Integer def hoge "hoge" * self end
end 5.hoge #=> "hogehogehogehogehoge" 40
既存のメソッドを変更 既存のメソッドを変更 5 + 10 #=> 15 class Integer def
+(other) self * other end end 5 + 10 #=> 50 41
class Integer alias orig_plus + def +(other) if rand >
0.5 self.orig_plus(other) else self * other end end end 5 + 10 #=> 15 5 + 10 #=> 50 5 + 10 #=> 15 5 + 10 #=> 15 5 + 10 #=> 50 42
クラス/メソッド定義が動的 クラス/メソッド定義が動的 動的にメソッド定義 ↑と↓は同じ メソッド名を動的に定義できる class Hoge def hoge(p1, p2)
end end class Hoge define_method(:hoge) do |p1, p2| end end 43
メソッドが見つからなかった時に動くメソッド メソッドが見つからなかった時に動くメソッド class Hoge def method_missing(name, *args) super if name
== :hoge # hogeメソッドはエラー puts "#{name} が引数 #{args.inspect} で呼ばれた" end end Hoge.new.fuga(1, 2, 3) #=> fuga が引数 [1, 2, 3] で呼ばれた Hoge.new.hoge #=> NoMethodError (undefined method `hoge' for #<Hoge: 44
究極の動的実行 eval 究極の動的実行 eval 文字列をRubyプログラムとしてその場で評価 str = "def hoge(a, b);
end" eval str 45
その他 その他 46
文字コードまわり 文字コードまわり CSI - Code Set Independent オブジェクトごとに異なる文字コード 文字コードまわりはRuby組み込み OSやライブラリに依存しない
Unicode 12.1 対応 (Ruby 2.6.3) " ㋿".unicode_normalize(:nfkd) #=> "令和" 47
楽しさ重視 楽しさ重視 Rubyの言語仕様策定において最も重視 しているのはストレスなくプログラミ ングを楽しむことである (enjoy programming) https://ja.wikipedia.org/wiki/Ruby 48
「やり方はひとつじゃない」 「やり方はひとつじゃない」 TMTOWTDI There’s More Than One Way To Do
It. Perlのスローガン 同じことをするのに複数の方法がある Rubyで明に言われているわけではない 49
同じ動きをする別の名前のメソッド 同じ動きをする別の名前のメソッド Object#to_enum, #enum_for Object#is_a?, #kind_of? Array#push, #append Array#length, #size
Enumerable#map - #collect Enumerable#select - #find_all Enumerable#reduce - #inject などなど 50
好きなように書ける 好きなように書ける 51
読みにくく書くこともできる 読みにくく書くこともできる 52
自由度が高い 自由度が高い 「自分の足を撃つ自由」 53
自由を制約したい? 自由を制約したい? Rubocop 静的チェックツール 主にスタイルチェック Metrixとかセキュリティのチェックとかも http://docs.rubocop.org 54
Ruby 3 Ruby 3 55
Ruby 3x3 Ruby 3x3 「Ruby 3 は Ruby 2.0 より3倍速くする」
RubyKaigi 2015 で Matz が宣言 56
静的型チェック 静的型チェック なにかしらの型チェック機構が入りそう RubyKaigi 2019 でもいくつか発表 57
Ruby 3 Ruby 3 2020/12/25 リリース (たぶん) 58
おわり おわり 59