Menu
Coddy logo textTech

Ruby チートシート

最終更新

Hello World とコードの実行

Ruby は定型コードが不要で、1 行で動きます。

操作構文
改行付きで出力puts "Hello, World!"
改行なしで出力print "Hello"
値を確認 (inspect)p [1, 2, 3]
文字列補間puts "Hi #{name}"
コメント# this is a comment
複数行コメント=begin ... =end
ファイルを実行ruby app.rb
対話シェルirb

変数と型

Ruby は動的型付けで、すべてがオブジェクトです。

操作構文
ローカル変数age = 30
定数PI = 3.14
インスタンス変数@name = "Ada"
グローバル変数$count = 0
シンボル:status
nil / 真偽値nil, true, false
型を調べる42.classInteger を返す
型を変換"42".to_i, 42.to_s, "3.5".to_f

文字列

文字列は変更可能なオブジェクトで、豊富なメソッドを持ちます。

操作構文
長さ"hello".length
大文字 / 小文字s.upcase, s.downcase
空白を除去s.strip
置換s.gsub("a", "b")
配列に分割"a,b,c".split(",")
部分文字列を含むs.include?("ell")
文字を切り出すs[0..2]
連結"foo" + "bar", s << "!"
繰り返し"ab" * 3
書式設定format("%05d", 42)

配列

順序があり、整数でインデックスされるコレクション。

操作構文
作成nums = [1, 2, 3]
インデックスでアクセスnums[0], nums[-1]
末尾に追加nums.push(4), nums << 4
末尾から削除nums.pop
長さnums.length
mapnums.map { |n| n * 2 }
フィルタnums.select { |n| n.even? }
reducenums.reduce(0) { |sum, n| sum + n }
ソートnums.sort
文字列に連結nums.join(", ")

ハッシュ

キーと値のコレクションで、しばしばシンボルをキーにします。

操作構文
作成user = { name: "Ada", age: 30 }
値にアクセスuser[:name]
値を設定user[:email] = "a@x.com"
キーを確認user.key?(:name)
キーを削除user.delete(:age)
キー / 値user.keys, user.values
反復user.each { |k, v| puts "#{k}: #{v}" }
デフォルト値Hash.new(0)
マージh1.merge(h2)

制御フロー

条件分岐とループ。Ruby の後置修飾子に注目してください。

操作構文
if / elsif / elseif x > 0 ... elsif x < 0 ... else ... end
後置の if (修飾子)puts "hi" if ready
unlessunless done ... end
三項演算子x > 0 ? "pos" : "neg"
case / whencase n; when 1 then ...; else ...; end
while ループwhile i < 10 ... end
until ループuntil done ... end
times5.times { |i| puts i }
範囲の反復(1..5).each { |i| puts i }
break / nextbreak, next

メソッド

最後の式が暗黙的に返されます。

操作構文
メソッドを定義def add(a, b) ... end
暗黙の returndef square(x) x * x end
デフォルト引数def greet(name = "World") ... end
キーワード引数def box(w:, h:) ... end
スプラット (可変長)def sum(*nums) ... end
? で終わるメソッドdef valid? ... end
! で終わるメソッドdef normalize! ... end
かっこなしで呼び出すgreet "Ada"

ブロック、Proc、ラムダ

ブロックはメソッドに渡されるコードのまとまりで、Proc とラムダはそれらを格納します。

操作構文
ブロック (波かっこ)[1, 2].each { |n| puts n }
ブロック (do/end)[1, 2].each do |n| puts n end
ブロックに yielddef run; yield; end
ブロックの有無を確認block_given?
ブロックを引数として捕捉def run(&blk); blk.call; end
Proc を作成square = proc { |x| x * x }
ラムダを作成square = ->(x) { x * x }
Proc / ラムダを呼び出すsquare.call(3), square.(3)

クラスとモジュール

クラスは状態と振る舞いを持ち、モジュールは共有メソッドをミックスインします。

操作構文
クラスを定義class Point ... end
コンストラクタdef initialize(x, y) @x = x; @y = y; end
インスタンスメソッドdef dist ... end
アクセサのショートカットattr_accessor :x, :y
インスタンスを生成p = Point.new(1, 2)
継承class Circle < Shape ... end
クラスメソッドdef self.origin ... end
モジュールを定義module Drawable ... end
モジュールをミックスインinclude Drawable
super を呼ぶsuper(args)

最もよく使う Ruby の構文を 1 ページにまとめました。この Ruby チートシートは、言語の中核のクイックリファレンスです。変数と型、文字列、配列とハッシュ、制御フロー、メソッド、そして Ruby を表現力豊かにするブロック、Proc、ラムダを収録しています。

ここに載っているものはすべて素の Ruby で、標準的なインタープリタなら動きます。必要なものをコピーするか、Ruby プレイグラウンドですべてのスニペットをその場で試してみてください。インストールは不要です。

Ruby チートシート よくある質問

この Ruby チートシートは無料ですか?
はい。この Ruby チートシートは完全に無料で、登録も不要です。ブックマークしておけば、文字列メソッドやハッシュ操作、ブロックの構文を調べたいときにいつでも戻ってこられます。
ブロック、Proc、ラムダの違いは何ですか?
ブロックは { ... }do ... end でメソッドに渡される無名のコードのまとまりで、それ自体はオブジェクトではありません。proc はブロックを、格納したり渡したりできる呼び出し可能なオブジェクトに包みます。lambda は特別な proc で、引数の数を厳密にチェックし、return をラムダ自身からの return として扱います。一方、素の proc は囲んでいるメソッドから return します。
Ruby のシンボルとは何ですか?
:name のようなシンボルは、不変で再利用される識別子です。同じシンボルは常にメモリ上の同じオブジェクトを指すため、ハッシュのキーやメソッド名のような用途では、シンボルは文字列より高速でメモリ効率も良くなります。だからこそ、ハッシュが { name: "Ada" } のように書かれているのをよく見かけるのです。
Ruby をオンラインで練習できますか?
はい。Ruby プレイグラウンドを開けば、このチートシートのどのスニペットもブラウザ上で実行できます。Ruby のインストールは不要です。体系的に学びたいときは、Coddy の無料インタラクティブ Ruby コースが、変数と文字列からブロック、クラスまで段階的に導いてくれます。
このチートシートは初心者に向いていますか?
はい。最もよく使うトピック (変数、文字列、制御フロー) から高度なもの (ブロック、Proc、クラス) へと並べてあるので、初日から上のセクションを使い、残りには慣れながら進めます。
Coddy programming languages illustration

CoddyでRubyを学ぼう

始める