19
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Rubyのハッシュ、キーはシンボル?文字列?

Posted at

はじめに

Rubyでは頻繁に使われるハッシュ(Hash)ですが、キーの書き方に2種類あるのをご存じでしょうか?

# シンボル風
{ name: "Alice", age: 30 }

# ロケット記法
{ "name" => "Alice", "age" => 30 }

この2つ、パッと見は似ているけど、キーの型が違います。意外と見落としがちな違いと、どう使い分けるべきかを、実例とともに解説します。

1. ハッシュの2つの書き方

シンボル記法(省略スタイル)

user = { name: "Alice", age: 30 }
p user 
# 内部的にこう解釈されます
# => {:name=>"Alice", :age=>30}

つまり、キーは :name や :age というシンボル型です。

ロケット記法

user = { "name" => "Alice", "age" => 30 }
p user 
# 内部的にこう解釈されます
# => {"name"=>"Alice", "age"=>30}

こちらは文字列型のキー。

この違いが、後でアクセスする際に影響を与えます。

2. キーの型を確認してみよう

user1 = { name: "Alice" }
user2 = { "name" => "Alice" }

p user1.keys   # => [:name]
p user2.keys   # => ["name"]

p user1[:name]     # => "Alice"
p user1["name"]   # => nil

シンボルと文字列は全くの別物なので、アクセスも合わせる必要があります。

3. 使い分けの原則と比較

シーン 推奨キー 理由
固定された属性(名前・年齢など) シンボル 軽量で高速。明示的な用途に最適
ユーザー入力、外部データ(JSONなど) 文字列 実行時に変化するため、文字列の方が適している

4. 具体的な使い分けサンプル

サンプル1:ユーザープロファイル(シンボル)

profile = {
  name: "Alice",
  age: 30,
  email: "alice@example.com"
}

p profile[:email]  # => "alice@example.com"

ポイント: キーがコード内で固定されているならシンボルがスマート。


サンプル2:フォーム入力のパラメータ(文字列)

params = {
  "name" => "Bob",
  "age" => "25"
}

p params["name"]  # => "Bob"
p params["age"]  # => "25"
p params[:age]  # => nil

ポイント: WebアプリやCLIでのユーザー入力は基本文字列で扱われる。

サンプル3:JSONなど外部データの読み込み(文字列)

require 'json'

data = JSON.parse('{"name":"Carol","age":22}')
p data["name"]  # => "Carol"

混ぜると危険!

user = {
  "name" => "Dave",
  name: "David"
}

p user.keys
# => ["name", :name]

見た目は同じでも別キーとして扱われるため、意図しないデータの重複やバグの元に。

6. シンボルと文字列の変換Tips

# 文字列 → シンボル
p "name".to_sym  # => :name
# シンボル → 文字列
p :name.to_s  # => "name"

# ハッシュのキーをシンボルに変換
hash1 = { "name" => "Alice", "age" => 30 }
p hash1.transform_keys(&:to_sym)
# => {:name=>"Alice", :age=>30}

# ハッシュのキーを文字列に変換
hash2 = { name: "Alice", age: 30 }
p hash1.transform_keys(&:to_s)
# => {"name"=>"Alice", "age"=>30}

終わりに

まとめ

  • シンボルと文字列は見た目が似ていても全く違う型。
  • 固定キーはシンボル、動的なキーは文字列と覚えると使い分けやすい。
  • どちらかに統一することが、コードの読みやすさ・バグ回避に繋がる。

Rubyのハッシュはとても柔軟だからこそ、キーの型に意識を向けることで、より読みやすく安全なコードになります。迷ったときはこの記事に立ち返ってみてください!

また、株式会社シンシアでは、実務未経験のエンジニアの方や学生エンジニアインターンを採用し一緒に働いています。
※ シンシアにおける働き方の様子はこちら

弊社には年間100人程度の実務未経験の方に応募いただき、技術面接を実施しております。
この記事が少しでも学びになったという方は、ぜひ wantedly のストーリーもご覧いただけるととても嬉しいです!

19
9
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?