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

## はじめに

2024 年の 6 月 27 日に**Ruby Association Certified Ruby Programmer Gold version 3**(~~正式名称が長い~~)に合格したので、どう勉強をしたのか実際に役立ったのか等を
**Silver 編**に続く**Gold 編**を紹介します。

内容は以下の記事と一部重複します。

https://qiita.com/kim_t0814/items/8e8712c6b55d0fe22009

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

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

### Gold

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

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

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

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

## 勉強時間

勉強時間は、Silver より少し多めにかけました。
勉強時間は 1 日 1.5 時間を 3 週間継続して、テスト前日は 4~5 時間勉強しました。
元々、Ruby を実務で使用していたこともあり勉強時間としては約 35 時間で合格しました。

Ruby 未経験かつ、オブジェクト指向を理解していない人は
なかなか難しいと思うので、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 周程して 85%ほどは取れる状態にしておきました。

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

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

### Ruby 技術者認定試験 Gold 模擬問題



ここが 1 番の難所なので、この本を読んでメタプロの本質的な部分を理解することが重要です。

Ruby 技術者認定試験 Gold の模擬問題です。
最近まで、模擬問題が github 上に公開されていませんでしたが、されていたようです。

問題に目を通しましが、実際の試験と同じような問題が出題されているので、ぜひ解いてみてください。



## できればやっておきたい

### メタプログラミング Ruby 第 2 版

Ruby Gold ではメタプロ的な知識を問われることがあります。
この辺の知識は、一度で理解するのはなかなか難しいです。



## 余裕があればやる

### Ruby のしくみ

https://tatsu-zine.com/books/ruby-under-a-microscope-ja

Ruby がコードをどのように解釈し、どうやって実行するか、そのしくみを解説されています。
Gold ではどう動いているかを理解しておいた方が、記憶にも定着しやすいと思います。

とはいえ、ここは時間に余裕がある、合格はできるけどもっと理解を深めたいという方向けです。

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

### 問題 1

```rb
class Class
  def method_missing(id, *args)
    puts "Class#method_missing"
  end
end
class A
  def method_missing(id, *args)
    puts "A#method_missing"
  end
end
class B < A
  def method_missing(id, *args)
    puts "B#method_missing"
  end
end

B.dummy_method
```

何が出力されるか

1.エラーになる
2.A#method_missing
3.Class#method_missing
4.B#method_missing

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

まず、`B.dummy_method` はインスタンスメソッドではなく
クラスメソッドを呼び出しています。

そのため、2 と 4 は省かれます。

そして、クラスは`Class`クラスのインスタンスです。

よって答えは 3 の「Class#method_missing」です。

正直何言っているかわからないですよね。

例えば、`A`クラスを定義するとき、実際には`Class`クラスの新しいインスタンを作成することになります。
これにより、`A`は`Class`のインスタンスメソッドを使用できるようになるわけですね。

ref: https://docs.ruby-lang.org/ja/latest/class/Class.html

</details>

### 問題 2

```rb
module M
  def foo
    super
    puts "M#foo"
  end
end

class C2
  def foo
    puts "C2#foo"
  end
end

class C < C2
  def foo
    super
    puts "C#foo"
  end
  prepend M
end

C.new.foo
```

1.C2#foo
C#foo
M#foo

2.C2#foo
M#foo
C#foo

3.M#foo
C2#foo
C#foo

4.エラーになる

<details><summary>正解は...</summary>
このコードの場合の探索は以下のようになります

```mermaid
graph LR
    M --> C
    C --> C2
```

よって答えは 1 の
C2#foo
C#foo
M#foo

でした!

</details>

## Silver と Gold でどれくらい難易度が違った?

主観にはなりますが、10 段階評価で言うと Silver が 3 なら Gold は 6 くらいの難易度かなと思います。

ただ、Gold の場合は他の言語でオブジェクト指向やメタプログラミングの知識があれば、
勉強時間や難易度はやや落ちる印象です。

## 最後に

いかがでしたでしょうか?
Ruby Gold は Silver とは異なり、Ruby のオブジェクト指向やメタプログラミング
の知識や Ruby がどう動くかなど本質的な理解が求められる問題が多いです。

Goldに合格したところで実務で曖昧だった部分、特にモデル部分の設計について
より本質的に理解し、インターン生に教える際により解像度が高い説明ができるようになりました。

GoldはRubyを実務で使用するバックエンドエンジニアにおすすめできる資格だと思います。

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