Ruby Silver 合格体験記💮

## はじめに
初めまして、とほほと申します🙇‍♀️ プログラミングスクールで学習中の初学者です。
そんな私ですが、2024 年の 12 月末に Ruby Silver を受験し、92 点で無事合格することができました！
本記事ではその際の勉強方法や感想などをまとめていきたいと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3295951/06ee9318-c11b-7a96-fd26-15f8d72a8a1f.png)

## 試験について
正確な名称としては、**Ruby Association Certified Ruby Programmer Silver version 3** となります。

試験要項については以下のとおりです。
| 項目 | 内容 | 
|:-----------|------------:|
| 試験時間     | 90 分      |
| 試験方法       | コンピュータ試験（CBT)        | 
| 問題数（方式）       | 50 問（選択式）          | 
| 合格ライン       | 75%       | 
| 料金    | 16,500円(税込)    | 

https://www.ruby.or.jp/ja/certification/examination/

なお、試験は各地会場で頻繁に開催されております。私も近所の会場で受験することが出来ました！
皆さんのお近くにも会場があると思いますので、下記サイトよりお探しくださいませ。

https://www.prometric-jp.com/examinee/schedule/

## 勉強方法
前提として、私はスクールなどで Ruby の学習経験はありましたが、実際に実務での開発経験などは皆無です。
そんな私ですが、およそ 40 時間ほどの学習で合格することが出来ました。
学習教材としては、以下 3 点を使用しました。

#### REx
300 問もの模擬問題があり、毎回ランダムで出題されます。
問題内容としては、メソッドの細かい違いなど、本番よりも若干細かい点を聞かれる印象を受けました。
これを安定して 85~90 % くらい解けるようにしておくと安心かと思います！

https://rex.libertyfish.co.jp/

#### 模擬問題集
それぞれ 1 回分（50 問）の問題集です。私はこちらも 85 % 以上取れるように復習しました。

[Ruby技術者認定試験Silver模擬問題](https://github.com/ruby-association/prep-test/blob/version3/silver_ja.md "Ruby技術者認定試験Silver模擬問題")
[silver_j.md](https://gist.github.com/sean2121/945035ef2341f0c39bf40762cd8531e0 "silver_j.md")

#### 公式テキスト
Amazon でのレビューがいまいちだったので少し不安になりましたが、結果買ってよかった！と感じました。
私は上記の REx などの問題集を仕上げたうえで公式テキストの問題集に挑みましたが、初見の問題も多く、初回は 70 % も得点できませんでした…。
やはりこちらの公式テキストの問題集のほうが、実際に出題される試験の問題とは類似しているため、一度解いておくことをオススメします。
ただ、確かに解説は全体的にあっさりしている印象でした。そのため、分からない箇所は ChatGPT に聞くことで理解を深めました。

https://gihyo.jp/book/2024/978-4-297-14216-2

https://www.amazon.co.jp/%E6%9C%80%E7%9F%AD%E7%AA%81%E7%A0%B4-Ruby%E6%8A%80%E8%A1%93%E8%80%85%E8%AA%8D%E5%AE%9A%E8%A9%A6%E9%A8%93%EF%BC%88Silver-Gold%E5%AF%BE%E5%BF%9C%EF%BC%89-%E5%85%AC%E5%BC%8F%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88-%E4%BF%8A%E7%94%B7-ebook/dp/B0D666FPWR/ref=sr_1_4?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=2G152JJPJHFKN&dib=eyJ2IjoiMSJ9.lkfNZxm877_VRzttbSrWO5uOA_tidjONoOWkuH18W_Dmhsz3cKDjly0kv3oydIymfbc8JqUb09KK7UK87PRuHTYTJU9GcOSDaKJbC06AJWg3egWnPJ-ZSnzgOSSU1vjvVX21Z0-wH057wuBb-2yQ5g.4RdSIycnDr115ByCDabStJF-8ft-sP3fLdZYyBxfv8c&dib_tag=se&keywords=Ruby+Silver&qid=1737795440&s=digital-text&sprefix=ruby+silver%2Cdigital-text%2C152&sr=1-4

## 受験当日について
当日は試験の開始時間の **30 分前から 15 分前**までに受付をしなければなりません。これに遅れると試験を受けることが出来ませんので、ご注意ください！
また、当日受付には**本人確認書類の提示**が必要です。こちらもお忘れなく。
試験の注意事項などは以下にも記載がございます～

https://www.prometric-jp.com/examinee/test_list/archives/10

試験時間は 90 分ありますが、恐らく時間に困ることはなかなかないと思います。
実際私は 60 分もかからずに試験を終えました。結果は試験終了と同時に画面上に表示されます！

## おまけ（学習の備忘録）
おまけとして、個人的に覚えるのに少し苦戦したメソッドたちを整理しておきます～！

### ●比較のメソッド
#### equal? メソッド
オブジェクト ID（メモリ上のアドレス）が完全に同一のオブジェクトであるかを評価する。**同一性**を評価する。
```
a = "abc"
b = "abc"
puts a.equal?(b) # false (内容は同じだが、異なるオブジェクト)

c = a
puts a.equal?(c) # true (aとcは同じオブジェクト)
```

#### eql? メソッド
オブジェクトの**値と型の両方**が同じであるかを評価する。
```
a = "abc"
b = "abc"
puts a.eql?(b) # true (同じ文字列かつ同じ型なので true)

c = 1
d = 1.0
puts c.eql?(d) # false (型が異なるので false)
```

#### == メソッド
オブジェクトの**値**が同じかどうかだけを評価する。
```
a = "abc"
b = "abc"
puts a == b # true

c = 1
d = 1.0
puts c == d    # true (値が等しいので true)
```

#### && 演算子
論理 AND 演算子。両方が真でなければ全体は真ではない。**最初の条件が false なら後ろは評価しない。**
```
a = false
b = [1, 3, 5]
a && b #=> false
```

#### & 演算子
2 つの配列の**共通部分**を求める。積集合の要素だけを集めて、新しい配列を作成する。
```
a = [1, 2, 3]
b = [1, 3, 5]
a & b #=> [1, 3]
```

#### || 演算子
論理 OR 演算子。いずれかが真なら全体が真になる。**最初の条件が true なら後ろは評価しない。**
```
a = [1, 2, 3]
b = false
a || b #=> [1, 2, 3]
```

#### | 演算子
2 つの配列の共通要素を含む部分（和集合）を求める。
```
a = [1, 2, 3]
b = [1, 3, 5]
a | b #=> [1, 2, 3, 5]
```

### ●配列に要素を追加・削除するメソッド

#### pop メソッド
配列の**最後**の要素を破壊的に**削除**する。
```
array = [1, 2, 3]
removed_element = array.pop  # => 3
array  # => [1, 2]
```

#### push メソッド
配列の**最後**に新しい要素を破壊的に**追加**する。
```
array = [1, 2, 3]
array.push(4, 5)  # => [1, 2, 3, 4, 5]
```

#### shift メソッド
配列の**先頭**から要素を破壊的に**削除**する。
```
array = [1, 2, 3]
removed_element = array.shift  # => 1
array  # => [2, 3]
```

#### unshift メソッド
配列の**先頭**に引数の要素を破壊的に**追加**する。
```
array = [2, 3]
array.unshift(1)  # => [1, 2, 3]
```

### ●配列を組み合わせて新たな配列を作成するメソッド
#### product メソッド
自身と与えられた配列から 1 つずつ要素を取って組み合わせた配列を作る。
その**全ての組み合わせを要素とする配列**を返す。
```
[1, 2].product(["a", "b", "c"])
=> [[1, "a"], [1, "b"], [1, "c"], [2, "a"], [2, "b"], [2, "c"]]
```

#### zip メソッド
自身と与えられた配列から 1 つずつ要素を取って配列を作る。組み合わせは前から順に、同じインデックスのもののみ。
```
[1, 2].zip(["a", "b"])
=> [[1, "a"], [2, "b"]]
```

## 最後に
以上、初学者による Ruby Silver の合格体験記でした～！
たくさんのメソッドの使い方を覚えることができ、とても良い機会だったと思います。
しかし、実際に使ってこそ真の知識になると思いますので、今回覚えたメソッドをどんどん実際に使っていこうと思います💪
ここまでお読みいただき、ありがとうございました！