Ruby Gold試験前に読むとほんの少しだけ点数が上がる記事（2020/12〜2021/03）

# はじめに
約2ヶ月間(2020年12月末〜2021年3月頭)でRuby Silver試験(2.1)とRuby Gold試験(2.1)に合格しました。点数的にはどちらもギリギリだったので、もう少しなんとかなったかな、と思っており、これを読んでいていただいた方の少しでもためになればと思って書き始めてます。主にGold中心に書いてますが、見ておけば+2~4点くらいできるようになれれば幸いです。

## 目次
・そもそもRuby Silver とRuby Goldって？
・当日苦戦した問題(Gold)
・直前で学んだ内容で、出てきた問題(Gold)
・参考にしたサイト、記事(Silver/Gold)
・勉強していてなんだかなと思ったポイント(Silver/Gold)
・最後に

## そもそもRuby Silver とRuby Goldって？
[こちらの公式サイト](https://www.ruby.or.jp/ja/certification/examination/)をご参照ください。また、[とある出典](https://www.ssug.jp/docs/isv/ISVMapVer10r3.pdf)によると、Goldが基本情報技術者試験と同じくらいの難易度だとか。基本情報の方が範囲が広い分大変だった記憶があるんですけどね…。


## 当日苦戦した問題(Gold)
Silverはどんな問題出たか忘れてしまったので、Goldの問題で苦しんだ問題例。

### コマンドラインの動作

```
Q. -rの正しい動きを選びなさい。(1つ選択)
A. スクリプト実行前に、指定されたファイルを実行する。
```

良くあるのが、「Rubyの中で存在しないコマンドラインはどれか」というものは良く解いたけど、中身まではきちんと覚えられてなかったですね…。日常的にRubyを使っている人であれば、もしかしたらそこまで難しくはないのかも…？

### catch/throwによる大域脱出
catch/throwだと、どちらにもタグがつくけど、catch/return、catch/next、catch/breakだとcatch側だけにタグがついて、もう片方には付けなくてOK。この中から動作するものを選べ系の問題が出た記憶。

### Comparable
昇順になるのか降順になるのかわからなくなるので、[paiza.io](https://paiza.io/ja/projects/new)とかで納得行くまで動きを見ておいた方が良いです。（問題出てきてテンパった）

### privateとsuper
一瞬、これ参照できるんだっけ…？ってなった問題例。

```
Q. 下記コードを実行すると、どうなるか？(1つ選択)

class A
    private
    def a_method
        p "test!!!"
    end
end
class B < A
    def a_method
        super
    end
end
B.new.a_method

A. "test!!!"
```

### ブロックとdo...end
合格教本にも似たような問題出てきたけど、完全にど忘れした問題。後から復習したら、しっかり間違えていたため、戒めに書き残します。

```
Q. 次の中から文法として正しい物を選びなさい。(3つ選択)
 1. 1.upto 3 do p "No.1" end
 2. 1.upto (3) do p "No.2" end
 3. 1.upto 3 { p "No.3"}
 4. 1.upto (3) { p "No.4"}

A. 1,2,4
```
ブロックで引数がある時は( )をつける！！

### 正規表現
言語関係ないですが、突然出てくると忘れてしまう問題。全然Rubyのサイトでもなんでもないですが、前日に[このサイト](https://userweb.mnet.ne.jp/nakama/)を一読しておくだけでも1問解けるのではないかと思います。
試験では**+?**が出てきて、完全に記憶の彼方へ飛んでたので、ヤマカンで答えました。

## 直前で学んだ内容で、出てきた問題(Gold)
直前にどこかで見てたので、解けた問題。

### cloneメソッド
確か合格教本にも載っていた問題。

```
Q. cloneメソッドについて適切な記述を選びなさい。(2つ選択)
A. freeseの内容も含めてコピーする。
　　参照先のオブジェクトはコピーされない。
```

dupと併せて覚えると、より正解できるはず。

### socketライブラリ
中身はちゃんと覚えてなかったけど、「〜Server」とつくのが「TCPServer」と「UNIXServer」だけ覚えていたら、点数取れました。もしかしたら、他パターンも出るかもしれないけど。

## 参考にしたサイト、記事(Silver/Gold)
特に参考にした記事を載せておきます。この方々がいなかったら、まず自分は合格できてなかったです。本当に感謝しております…！
あとは探すと色んな方が記事を投稿しているので、同じような問題解いてて飽きてきたら、Qiita内の記事や各種ブログを読み漁るのも一つ勉強としては良いかもしれないです。

### Silver

[Ruby Silverに合格したので、勉強方法をまとめてみた(2019年2月版)](https://qiita.com/jonakp/items/7f7550eeea78973a0a7f)

[Ruby Silver試験前に見直すと幸せになれるメモ](https://tamata78.hatenablog.com/entry/2015/08/07/200454)

### Gold
[Ruby Goldに合格したので、勉強方法をまとめてみた(2020年11月版)](https://qiita.com/jonakp/items/c7b7ecfe3eb9ee8c950e)

[1ヶ月後「Ruby Association Certified Ruby Programmer Gold version 2.1」に合格する方法](https://qiita.com/sogu/items/5ff2bf8702e14daf1804)

[Ruby Gold 試験範囲を一気に見直す](https://tamata78.hatenablog.com/entry/2015/11/03/101002)


## 勉強していてなんだかなと思ったポイント(Silver/Gold)
### その1　問題の答えだけを暗記してしまう。
どちらかというとGoldの方がそうだったなと思っているんですが、内容を理解する前に、なんとなく答えだけ分かってしまう問題はなかなか困りました。先ほども記載した通り、定期的に色んな方のブログや合格体験記を見て、「あ〜この辺まだちゃんと覚えてられてないな」って思った部分を復習して学習を進めていきました。

あとは、Goldでいうと、[REx](https://www.ruby.or.jp/ja/certification/examination/rex)での問題で**instance_eval**や**module_eval**などのeval系の問題が頻繁出てきたのですが、試験ではほとんど出なかったのが地味にしんどかったですね。

### その2　学習の後半から視力検査になってくる。
特にSilverはその傾向が強かったのですが、問題を解いていると、「あ、これ解いたことある問題じゃん！」と思って回答すると、実はすこーーーしだけコードが違っていて、不正解になるパターン。勝手にこういう問題を"視力検査"と呼んでます(笑) 確かにちゃんとコードを見ず、先入観だけで解こうとした自分が良くないのはわかるけど、なんだか"試験に受かるための試験勉強"になってしまうところが本質的ではないのかな、と感じたところです。

資格試験全般に言える話だと思いますが、あくまで試験に合格することが目的ではなく(中にはそういう資格試験もあるかもだけど)、何か技術やスキルを磨くためのものだと思うので、そこは少々もやっとしたポイントでした。まあレビューする時とかに、そういう微妙な間違い等を見分けられないといけないのかな…。

## 最後に
なんやかんや言ってますが、結局のところやってみて良かったかなと思ってます。個人的にあまりRubyを使えてなかったので、体系的に学ぶことにより、幅広い知識が付けられたのは確かだったかなと。
ただ、試験費用もなかなか高いので、受ける方は一発で取れるよう頑張ってください…！何かの拍子で思い出せたら、記事も書き足していこうと思ってます。