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.class は Integer を返す |
| 型を変換 | "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 |
| map | nums.map { |n| n * 2 } |
| フィルタ | nums.select { |n| n.even? } |
| reduce | nums.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 / else | if x > 0 ... elsif x < 0 ... else ... end |
| 後置の if (修飾子) | puts "hi" if ready |
| unless | unless done ... end |
| 三項演算子 | x > 0 ? "pos" : "neg" |
| case / when | case n; when 1 then ...; else ...; end |
| while ループ | while i < 10 ... end |
| until ループ | until done ... end |
| times | 5.times { |i| puts i } |
| 範囲の反復 | (1..5).each { |i| puts i } |
| break / next | break, next |
メソッド
最後の式が暗黙的に返されます。
| 操作 | 構文 |
|---|---|
| メソッドを定義 | def add(a, b) ... end |
| 暗黙の return | def 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 |
| ブロックに yield | def 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、クラス) へと並べてあるので、初日から上のセクションを使い、残りには慣れながら進めます。