【2024年版】Ruby技術者認定試験に合格してみて【Silver編】

## はじめに
2024年の6月27日に**Ruby Association Certified Ruby Programmer Gold version 3**（以下「Ruby Gold」）に合格しましたので、どのように勉強したのか、実際に役立ったのか等を**Silver編**と**Gold編**の二つに分けて記事にしようと思います。
Silverは90点で合格しました。

![スクリーンショット 2024-07-08 21.22.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636995/3ea1d68e-c013-4d17-1e75-c222c1cef8a5.png)


## Ruby技術者認定試験とは

Rubyベースのシステムを設計、開発、運用するエンジニア、Rubyでシステム提案を行うコンサルタント、Rubyを教える講師及びRubyを学ぶ学生などを対象とした認定試験制度です。

### Silver
Rubyの文法知識、Rubyのクラスとオブジェクト、標準ライブラリの知識について、基本的な技術レベルを持つことを認定します。

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

ちなみに、Goldの認定条件はSilverとGoldの両方に合格することとなっています。
|項目|内容|
|---|---|
|試験時間|90分|
|試験方法|CBT形式|
|問題数|50問|
|合格ライン|75%|
|料金|16,500(学割で8250円)|

出題範囲は公式をご覧ください

## 勉強時間
勉強時間は1日1時間を3週間強継続して、テスト当日と前日は3時間勉強しました。
元々、Rubyを実務で使用していたこともあり勉強時間としては約25~30時間で合格しました。

Ruby未経験でも合格するだけであれば、40~50時間ほどで合格できるかなと思います。

## 学習教材
### プロを目指す人のためのRuby入門[改訂2版] 言語仕様からテスト駆動開発・デバッグ技法まで
https://www.amazon.co.jp/dp/4297124378

自分はただ、資格試験に合格するというよりはRubyの基礎力を付けたいという面が大きかったです。
そのため、いわゆるチェリー本でテスト範囲の部分を再学習しました。

実務で役立つ知識を再定着させつつ、テストに出る範囲は入念に覚えました。


その後は、とにかく過去問や模擬問題の演習です。

### REx

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

- Silver、Goldの模擬問題が合計で300問あり、毎回ランダムで出題が変わります
- 体感的に安定して85%解けるようになれば合格ラインになります
- スマホでも出来るので通勤時間にもぜひ
- 間違えた問題は [Ruby リファレンスマニュアル](https://docs.ruby-lang.org/ja/latest/doc/index.html) と 実行環境で動かしてみましょう
    - 個人的には**実行環境**で動かすのは直感的に理解できるので一番おすすめしてます

### ［改訂2版］Ruby技術者認定試験合格教本（Silver/Gold対応）Ruby公式資格教科書

https://www.amazon.co.jp/gp/product/B0756VF9Y3/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1

Ruby技術者認定試験Silver/Goldに対応した公式テキストの改訂2版です。
こちらの基礎問題集と模擬問題集を、3週程して9割以上は取れる状態にしておきました。

ただ2024年6月26日に最新版が出たそうなので、今から勉強するのであれば以下がおすすめです。

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

### Ruby技術者認定試験Silver模擬問題
https://github.com/ruby-association/prep-test/blob/version3/silver_ja.md

Rubyの模擬問題集になります。
レベル的には教本よりも少し優しいくらいです。
こちらも、9割以上は取れる状態にしておきましょう。

## 実際にRuby Silverの問題を解いてみよう

### 問題1
次のコードを実行するとどうなるのか

```rb
$val = 0

class Count
  def self.up
    $val = $val + 1
    $val == 3 ? true : false
  end
end

[*1..10].any? do
  Count.up
end

p $val

```

- 1: 10が表示される
- 2: 1が表示される
- 3: 0が表示される
- 4: 3が表示される

<details><summary>正解は...</summary>

`#any?`はブロック内の処理が一度でも`true`を返すと処理を終了します。
そのため、`$val`が3になった時点で処理が終了します。

よって答えは、4の「3が表示される」です。

ref: https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/any=3f.html




</details>

### 問題2
次のコードを実行するとどうなるのか

```rb
a1 = "abc"
a2 = 'abc'

print a1.equal? a2
print a1 == a2
```

- 1: `falsetrue`と表示される
- 2: `truetrue`と表示される
- 3: `falsefalse`と表示される
- 4: `truefalse`と表示される

<details><summary>正解は...</summary>
  
  `#equal?`はオブジェクトが同じかどうかを判定するメソッドです。
  一方、`==`はオブジェクトの値が同じかどうかを判定します。

  今回の場合、`a1`と`a2`は異なるオブジェクトを参照しているため、`#equal?`は`false`を返し、`==`は`true`を返します。

  よって答えは、1の「`falsetrue`と表示される」です。

  rubyのstringは同じ値を持っていても、生成するたびに別のobject_idが生成されます。
例
```rb
>> "hoge".object_id
=> 62440
>> "hoge".object_id
=> 64060
```
</details>



## 最後に
いかがでしたでしょうか?
Ruby Silverは問題数を多くこなして、暗記することが重要になる試験です。

今回挙げた教材をこなしていけば、問題なく合格できる内容になっていると思います。

Ruby Silverを取得することで曖昧な部分もクリアになり、「なんとなくコーディング」
がかなり減ったと思います。

また、次回紹介するGoldは単なる暗記ではなく、Rubyのオブジェクト指向やメタプログラミングの知識やRubyがどう動くかなど本質的な理解が求められることが多くなります。

今回の記事が、Ruby Silverを受験する方の参考になれば幸いです。