テックキャンプ プログラミング教養を進めていくと、

HTML/CSSは分かったけれども、Rubyが分かりにくい…
という人が多いのではないでしょうか?
最初は一気に勢いで駆け抜けた方がいいと思いますが、2周目と繰り返していくうちに、説明が足りないなと感じる点があります。
本記事では、Railsの基礎ともなるRubyで使用するハッシュについて、掘り下げていきたいと思います。
基礎をしっかりと抑えることで、Railsの理解度も他の言語への理解度も違いますので、しっかりと理解していきましょう。
対象となるテックキャンプのレッスンはこちらです。
[Webコース] 3 Ruby編
Lesson 3 簡単なアプリを作ってみよう ー ハッシュを使って情報を整理しよう

ちゃんとテックキャンプ受講者以外の人にも分かるように書いてありますので、ご安心を!
ハッシュの分かりにくいところ

テックキャンプのレッスンでは、
『まずはハッシュオブジェクトを生成してみましょう!』
と言われ、いきなり下記のようなコードが出てきます。
hash = {}

ん?これがハッシュなの?
と初めての人なら思ってしまい、ハッシュに対してのイメージがぼんやりとしてしまいます。
そのため、ハッシュのメリットも分かりにくいと思います。
ハッシュの役割を一つ一つ理解すれば、上記のコードの意味も分かるようになります。
それではひとつひとつ、確認していきましょう!
Rubyのハッシュとは?
そもそも、Rubyで使うHashってどういう意味なの?ということも書こうと思いましたが、それだけで1つ記事かけそうなので、割愛します(笑)
それでは、Rubyのハッシュとはどういうオブジェクトなのか?
ハッシュとは、key(要素)とvalue(値)の組み合わせの配列です。
コードで表すとこうなります。
連想配列名 = {Key1 => Value1, Key2 => Value2, Key3 => Value3}
実際にテックキャンプで取り上げている映画名をキー(要素)に、公開年をバリュー(値)にして入れていきます。
movie = {"るろうに剣心" => "2012年", "君に届け" => "2010年"}
puts movie["君に届け"]
$ ruby sample.rb
どのような結果が出力されたでしょうか?
”君に届け”のバリュー(値)が取得されたかと思います。
2010年
ごちゃ混ぜ(ハッシュ)の中から言われたものを取ってくるのが私がイメージしている【ハッシュの基本動作】となります。
ハッシュの追加
それでは、上記のハッシュに配列を追加してみましょう。

ここで、キー(要素)にはシンボルの方が実行速度が早いということなので、キー(要素)を【”文字列”】から【:シンボル】に変更するよ。
movie = {:るろうに剣心 => "2012年", :君に届け => "2010年"}
puts movie
movie[:時をかける少女] = "1983年"
puts movie
どのように出力されましたか?
下記のようにハッシュが追加されているのが分かると思います。
{:るろうに剣心=>"2012年", :君に届け=>"2010年"}
{:るろうに剣心=>"2012年", :君に届け=>"2010年", :時をかける少女=>"1983年"}
ハッシュの上書き
しかし、ここで気がつきました。
時をかける少女は、2006年に公開したアニメの方だったということに!
では、上書きしてみましょう。
movie = {:るろうに剣心=>"2012年", :君に届け=>"2010年", :時をかける少女=>"1983年"}
puts movie
movie[:時をかける少女]="2006年"
puts movie
出力結果:
{:るろうに剣心=>"2012年", :君に届け=>"2010年", :時をかける少女=>"1983年"}
{:るろうに剣心=>"2012年", :君に届け=>"2010年", :時をかける少女=>"2006年"}
ここで気がつきましたか?
ハッシュを【追加するコマンド】と【上書きするコマンド】が同じだということに!!
これも私にはRubyの理解をする、1つの要素でした。
いかがでしたでしょうか?
これが、テックキャンプの『ハッシュオブジェクトに値を追加する』の項目で説明されている箇所になります。
ここからが本番!Rubyにおけるハッシュのeachメソッド
これまではハッシュの基本的な入力を見ていきました。
ここからが、テックキャンプで言われている、ハッシュのメリットの部分となります。
Rubyにおけるハッシュのeachメソッドは下記の通りです。
{配列}.each do |value|
puts value
end
では、先ほどの例でやってみましょう。
{:るろうに剣心=>"2012年", :君に届け=>"2010年", :時をかける少女=>"1983年"}.each do |value|
puts value
end
るろうに剣心
2012年
君に届け
2010年
時をかける少女
1983年
このように一覧で出てきたと思います。
キーの取得
{:るろうに剣心=>"2012年", :君に届け=>"2010年", :時をかける少女=>"1983年"}.each_key do |title|
puts title
end
each_keyと追加してみました。
結果…
るろうに剣心
君に届け
時をかける少女
キーのみ取得することができました。
バリューの取得
{:るろうに剣心=>"2012年", :君に届け=>"2010年", :時をかける少女=>"1983年"}.each_value do |title|
puts title
end
ここでは、あえてtitleのまま行います。
結果はいかがでしょうか?
2012年
2010年
1983年
バリュー(値)が出てきました。
each_valueとすることでバリューの値が取得できるわけです。
結局、“title”と記載された箇所の名称は何でもいいわけですね。
そこも、私が最初に学んだときに分からないポイントでした。
キーもバリューも両方取得したい
キーもバリューも両方取得したい!という人のために、用意してあります(笑)
{:るろうに剣心=>"2012年", :君に届け=>"2010年", :時をかける少女=>"1983年"}.each_pair do |title,year|
puts "#{title}"+"#{year}"
end
るろうに剣心2012年
君に届け2010年
時をかける少女1983年
上記のように、each_pairを入力します。
そうすると、KeyとValueの両方を取得することができます。
Rubyにおけるハッシュまとめ
いかがでしたしょうか?
ハッシュについての理解を深めることが出来ましたでしょうか?
私も記事を書きながら、さらに深く学習することができました。
私自身、まだまだ勉強中の身ですので、間違い等ございましたらご指摘ください。
Rubyで挫けずにがんばっていきましょう!
おまけ:Rubyの参考書
TECH CAMPで学んだRubyより、もう少し基礎を固めたいという人におすすめの参考書を紹介しておきます。

プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで (Software Design plusシリーズ)