出典:Robert Risz,
あなたは「ハッシュ(hash)」をきちんと理解していますか?
rubyで使われるハッシュは、開発をしていく上で必ず使われるので、しっかりと理解して説明できなければ【初心者の壁】を超えることはできません。
今回はプログラミングスクール【テックキャンプ プログラミング教養】講師として何百回とrubyに関する解説をしてきた筆者が、分かりやすく簡単にrubyのハッシュについて説明いたします。
各章の終わりにはキーワードをオレンジ色で表示しているので、大まかに理解したい方はオレンジ色のみを確認頂いてもいいかと思います。
※本記事は、プログラミングスクール【テックキャンプ プログラミング教養】のWebアプリケーションコースで学ぶ内容をもとに執筆しております。
この記事の目次

ハッシュとは?
ハッシュの言葉の意味や関連するキーワードを紹介していきます。
ハッシュオブジェクト
ハッシュオブジェクト(略称:ハッシュ)はオブジェクトを複数保管できるオブジェクトです。
ハッシュオブジェクトは、自身の中にデータとそれに対応するキーのセットを所持することができます。
キーバリューストア
ハッシュのように、保存したいデータ(バリュー)とそれに対応する標識(キー)を対応させてペアで保存する方式のことをキーバリューストアといいます。
標識であるキーを指定すればそれに対応するデータを取り出すことが可能です。
まとめると以下のようになります。まずは、下記のまとめを覚えてしまいましょう。
・ハッシュは1つの変数で複数のデータを持つことのできるオブジェクト
・ハッシュはデータとそれに対応するキーをもっている
スキルゼロ・実務未経験でもITエンジニアになれる!
テックキャンプはこれからのIT時代で自分の可能性を広げたい人を応援します。
- プログラミングは難しくて挫折しそう
- 独学でちゃんとスキルが身につくのか不安
- 効率的にプログラミングスキルを習得する方法を知りたい

ハッシュオブジェクトの変数を作る
hash = {}
ハッシュは{} (中括弧)を使って記述します。
また左辺のhashは変数名であり、任意の名前を定義できます。
上の書き方では何もデータを持っていない空のハッシュが生成されます。
ちなみに生成のときからデータを持つこともできます。
以下の書き方でキーと値を持った状態のハッシュオブジェクトを生成できます。
{キー1 => 値1, キー2 => 値2, …}
hash1 = {"title" => "るろうに剣心"} hash2 = {:title => "時をかける少女"} hash3 = {title: "君に届け"} puts hash1 puts hash2 puts hash3
hash1とhash2はどちらも「title」というキーでハッシュを生成しています。
hash1はキーを文字列”title”で指定しています。
一方、hash2はキーが:titleとなっていますね。
これはシンボルと呼ばれるオブジェクトです。
また、hash3はhash2と同義ですが、コードの量が少なく好んで使われるので覚えておきましょう。
シンボルオブジェクト
シンボルオブジェクト(略称:シンボル)とは今回のハッシュのキーのような名前を識別するためのラベルです。
基本的に先頭に接頭語:をつけます。基本的には文字列と同じように扱えます。
ハッシュオブジェクトのキーは文字列オブジェクト、シンボルオブジェクトのどちらを使っても問題ないです。
こちらの章をまとめると下記が重要なポイントです。
・ハッシュオブジェクトは{}を使って生成する
・シンボルオブジェクトは名前を識別するためのラベルで基本は文字列と同様に扱える
・ハッシュオブジェクトのキーには文字列、もしくはシンボルが使える

文字列とシンボルのどちらを使えば良いの?
結論から言うとハッシュではシンボルを使いましょう。
文字列とシンボルはほとんど特性は同じです。ハッシュのキーも文字列とシンボルの両方が使えます。
# どちらも同じ hash1 = {:title => "時をかける少女"} hash2 = {"title" => "時をかける少女"}
しかし、ハッシュで使う場合に実行の速度がシンボルの方が速いため、ハッシュのキーにはシンボルの使用が推奨されています(最近は実行速度にそこまで差はなくなりました)。
また、キーがシンボルのハッシュの場合は省略してかけるので、コード量も少なくなり便利です。以上の理由より、キーにはハッシュを使うのが主流です。
・ハッシュのキーとして使うならシンボルの方が実行速度が早い
ハッシュオブジェクトから値を取得する
では、ハッシュの持っている値を取得してみましょう。取得の際に使うのがその値のキーです。
以下の書き方で取得ができます。
ハッシュオブジェクト[欲しい値のキー]
具体例を見てみましょう。
hash = {title: "時をかける少女"} puts hash[:title]
このコードをターミナルで実行すると “時をかける少女” という値を取得できます。
ここまでで重要なことは1つです。以下は必ず押さえましょう。
・ハッシュオブジェクトに値を追加するときは、対応するキーを指定して代入する。ハッシュオブジェクト[キー] = 値
ハッシュで情報をまとめよう
具体的にハッシュの中に要素を追加してみます。
まず空のハッシュを宣言することで、後からハッシュの要素を追加出来るようになります。
# 空のハッシュの宣言 post = {} #以下で要素の追加 post[:genre] = "マンガ" post[:title] = "るろうに剣心" post[:review] = "面白い!" #出力 puts post => {:genre=>"マンガ", :title=>"るろうに剣心", :review=>"面白い"}
また、以下のように定義したハッシュを使うことが出来ます。
puts post[:genre] => "マンガ" puts post[:title] => "るろうに剣心" puts post[:review] => "面白い!"
まとめ
いかがでしょうか?この記事の内容をしっかり理解して使いこなすことができれば、あなたもハッシュに関する基礎知識をマスターできたといえるでしょう。
引き続きプログラミングの学習を継続的に頑張っていきましょう。
こちらの記事もご参考ください。
未経験からの転職の悩みを解決!無料カウンセリング開催中【転職成功人数4000名以上!※1】

こんな不安や疑問はありませんか?
・未経験から転職して、本当に年収が上がるのか
・ITエンジニア転職後の働き方や稼ぎ方が想像できない
・スキルゼロからITエンジニアとしてフリーランスになれるのか
カウンセリングでは、ITエンジニア転職やプログラミング学習を知り尽くしたプロのカウンセラーが、あなたの悩み解決をサポートします。満足度93%※1、累計利用者数は42,000人以上!※2
無料で相談できますので、気軽にご参加ください。【テックキャンプは給付金活用で受講料最大70%オフ※4】
※1.2018年10月24日〜11月16日(N=106) 2.2020年12月時点 3.テックキャンプ エンジニア転職は経済産業省の第四次産業革命スキル習得講座の認定も受けており、条件を満たすことで支払った受講料の最大70%(最大56万円)が給付金として支給されます