組み込みライブラリ

class Array

https://docs.ruby-lang.org/ja/latest/class/Array.html

.ancestors: Enumerable, Object, …

Examples:

[[:a, 3], [:b, 2], [:c, 1]].to_h #=> { a: 3, b: 2, c: 1 }

class Dir

https://docs.ruby-lang.org/ja/latest/class/Dir.html

ディレクトリ操作のためのクラス。

SYNOPSIS:

## path以下のファイルで.と..を除いたもの
Dir.children(path)
## カレントディレクトリ以下のファイルを再帰的に取得して配列で返す
Dir.glob('./**')

Dir.chdir(subdir) do
  # subdirにcdしてブロック内の処理を実行
  ...
end

class File

https://docs.ruby-lang.org/ja/latest/class/File.html

ファイルアクセスのためのクラス。

SYNOPSIS:

if File.exist?(path)
  :
end

File.open('foo.txt') do |file|
  # 1行ずつ読込み
  file.each_line do |line|
    fields = line.chomp.split(/,/)
    :
  end
end

## 1行ずつ処理する他のやり方
File.foreach('foo.txt') { |line| ... }
File.readlines('foo.txt').each { |line| ... }

## まとめて書き込んで閉じる
File.write('out.dat', data)

## 追記モードで開く
File.open('out.dat', File::WRONLY|File::CREAT|File::APPEND) do |file|
  # 排他ロック取得
  file.flock(File::LOCK_EX)
  # 1行ずつ書き込み
  contents.each_line do |line|
    file.puts(line)
  end
end

require 'pathname'
abs_path = Pathname.new(File.expand_path('.')).join(filename)

ファイルオープン時のモードについて:

参考:

class Hash

https://docs.ruby-lang.org/ja/latest/class/Hash.html

.ancestors: Enumerable, Object, …

Examples:

h = { a: 3, b: 2, c: 1 }
h.to_a #=> [[:a, 3], [:b, 2], [:c, 1]]

class Integer

https://docs.ruby-lang.org/ja/latest/class/Integer.html

整数クラス。
Ruby 2.4から、FixnumとBignumがIntegerに統合された。
いずれもIntegerのエイリアスとなっている。

参考:

class IO

https://docs.ruby-lang.org/ja/latest/class/IO.html

継承ツリー: IO < Enumerable < File::Constants < Object < Kernel < BasicObject

#read

https://docs.ruby-lang.org/ja/latest/method/IO/i/read.html

read(length = nil, outbuf = "") -> String | nil

lengthバイト読み込んで、その文字列を返す。

class Module

https://docs.ruby-lang.org/ja/latest/class/Module.html

.const_defined? , .const_get

定数定義を調べる。

NOTE:

  • 上の階層で定義された定数も参照できる。つまり、 Foo::Bar が存在する時、 Foo::Baz::Bar が存在しなくても、 Foo::Baz.const_defined?(:Bar) は true になる。
    • Foo::Baz.const_defined?(:Bar, false) は false
    • 詳しくは下記リンク先、または上のリファレンスマニュアルを参照

参考:

class Random

https://docs.ruby-lang.org/ja/latest/class/Random.html

擬似乱数生成クラス。

SYNOPSIS:

v = Random.rand # Kernel.#rand と同じ

rng = Random.new(Time.now.to_i) # 乱数ジェネレータを作る
rng.rand
rng.rand(10)
rng.rand(0..5)
rng.rand(1.0..3.0)

rng.seed # 乱数の種を返す

NOTES:

  • Random.rand や Kernel.#rand はデフォルトの乱数ジェネレータである Random::DEFAULT を使う。

class Regexp

https://docs.ruby-lang.org/ja/latest/class/Regexp.html

継承ツリー: Regexp < Object(以下略)

正規表現。

関連項目:

#match

https://docs.ruby-lang.org/ja/latest/method/Regexp/i/match.html

match(str, pos = 0) -> MatchData | nil
match(str, pos = 0) {|m| ... } -> object | nil

Examples:

p(/(.).(.)/.match("foobar", 3).captures)   # => ["b", "r"]
p(/(.).(.)/.match("foobar", -3).captures)  # => ["b", "r"]

class String

https://docs.ruby-lang.org/ja/latest/class/String.html

継承ツリー:

String < Comparable < Object < Kernel < BasicObject

文字列クラス。

#%

https://docs.ruby-lang.org/ja/latest/method/String/i/=25.html

self % args -> String

printfと同じ規則に従ってargsをフォーマットする

Examples:

p "i = %d" % 10       # => "i = 10"
p "i = %x" % 10       # => "i = a"
p "i = %o" % 10       # => "i = 12"

p "i = %#d" % 10      # => "i = 10"
p "i = %#x" % 10      # => "i = 0xa"
p "i = %#o" % 10      # => "i = 012"

p "%d" % 10           # => "10"
p "%d,%o" % [10, 10]  # => "10,12"

#gsub

https://docs.ruby-lang.org/ja/latest/method/String/i/gsub.html

gsub(pattern, replace) -> String

patternにマッチする部分全てを文字列replaceに置換した文字列を生成して返す。

Examples:

p 'abcdefg'.gsub(/def/, '!!')          # => "abc!!g"
p 'abcabc'.gsub(/b/, '<<\&>>')         # => "a<<b>>ca<<b>>c"
p 'xxbbxbb'.gsub(/x+(b+)/, 'X<<\1>>')  # => "X<<bb>>X<<bb>>"
p '2.5'.gsub('.', ',') # => "2,5"

NOTE:

  • 後方参照は「\1」「\2」…
  • 置換文字列に \ を使いたいときはエスケープが必要

#match

https://docs.ruby-lang.org/ja/latest/method/String/i/match.html

match(regexp, pos = 0) -> MatchData | nil
match(regexp, pos = 0) {|m| ... } -> object

regexp.match(self, pos) と同じ。
See Regexp#match

Examples:

'hello'.match('(.)\1')      # => #<MatchData "ll" 1:"l">
'hello'.match('(.)\1')[0]   # => "ll"
'hello'.match(/(.)\1/)[0]   # => "ll"
'hello'.match('xx')         # => nil

#split

https://docs.ruby-lang.org/ja/latest/method/String/i/split.html

split(sep = $;, limit = 0) -> [String]
split(sep = $;, limit = 0) {|s| ... } -> self

Specs:

  • 第1引数 sep で指定されたセパレータによって文字列を limit 個まで分割し、結果を文字列の配列で返す
  • ブロックを指定すると、配列を返す代わりに分割した文字列でブロックを呼び出す
  • sepがnilの場合は、前後の空白文字をstripした上で $; or 空白文字列で分割

Examples:

p "   a \t  b \n  c".split(/\s+/) # => ["", "a", "b", "c"]

p "   a \t  b \n  c".split(nil)   # => ["a", "b", "c"]
p "   a \t  b \n  c".split(' ')   # => ["a", "b", "c"]   # split(nil) と同じ
p "   a \t  b \n  c".split        # => ["a", "b", "c"]   # split(nil) と同じ

class Time

https://docs.ruby-lang.org/ja/latest/class/Time.html

.ancestors: Comparable, Object, …

SYNOPSIS:

Time.at(0)          #=> 1970-01-01 09:00:00 +0900
Time.at(1531046422) #=> 2018-07-08 19:40:22 +0900
Time.now            #=> 2018-07-08 19:40:22 +0900
Time.now.to_i       #=> 1531046422

参考:

module Enumerable

https://docs.ruby-lang.org/ja/latest/class/Enumerable.html

SYNOPSIS:

(1..3).to_a.include?(3) #=> true

## イテレーション
%w(foo bar baz).each_with_index do |s, i|
  puts "Index: #{i}, Value: #{s}"
end

## 配列操作
(0..9).to_a.reject { |n| n % 2 == 1 } #=> [1, 3, 5, 7, 9]

### sort
h = { a: 3, b: 2, c: 1 }
h.sort_by { |kv| kv[1] } #=> [[:c, 1], [:b, 2], [:a, 3]

NOTES:

  • #sort は安定ではない(=同じ要素が元の順序通りに並ばない)。また、比較処理が重い場合の性能が #sort_by より悪い。

module Kernel

https://docs.ruby-lang.org/ja/latest/class/Kernel.html

全てのクラスから参照できるメソッドを定義している。

.#open

https://docs.ruby-lang.org/ja/latest/method/Kernel/m/open.html

fileをオープンしてIO(File含む)オブジェクトを返す。

SYNOPSIS:

open(file) do |f|
  f.each_line { |l| ... }
end

open(file, 'w') do |f|
  f.write(content)
end

.#require

https://docs.ruby-lang.org/ja/latest/method/Kernel/m/require.html

require(feature) -> bool

Specs:

  • 拡張子補完を行う
  • 同じファイルの複数回ロードはしない

ロードするパスの追加方法

シェルでやる例:

ruby -I /path/to/lib foo.rb
RUBYLIB=/path/to/lib foo.rb

Rubyコード内でやる例:

$LOAD_PATH.push('/path/to/lib')

参考:

乱数

SYNOPSIS:

srand(Time.now.to_i) # UNIXタイムスタンプで乱数の種を生成
                     # ※やらなくても最初にrand等を実行したときにランダムに設定してくれる

rand            # [0, 1) の実数
rand(10)        # [0, 10) の整数
rand(5.5)       # rand(5)と同じ。[0, 5) の整数

rand(1..6)      # [1, 6] の整数
rand(0...10)    # [1, 10) の整数
rand(1.0..1.5)  # [1.0, 1.5] の実数
rand(1.0...1.5) # [1.0, 1.5) の実数
rand(1..0)      #=> nil

See also: https://docs.ruby-lang.org/ja/latest/class/Random.html

キャストっぽいメソッド

  • .Array … 配列に変換
  • .Float … 浮動小数点数に変換
  • .Hash … Hashに変換
  • .Integer … 整数を返す。
    • Integer(arg, base = 0) -> Integer
  • .Rational … 有理数(Rational)に変換
  • .String … 文字列に変換

Examples:

# .Integer
Integer(4) #=> 4
Integer(9.5) #=> 9

# 2進数
Integer("11", 2) #=> 3
# 10進数
Integer("10") #=> 10

module Math

https://docs.ruby-lang.org/ja/latest/class/Math.html

浮動小数点演算や各種数学関数。

Math.log(x)    # eを底とするxの対数
Math.log(x, y) # yを底とするxの対数