【Ruby初学者に向けた】 Ruby 技術者認定試験 Silver/Gold 受験記

初版公開：2021/01/05
更新：2022/03/22
# 概要
先日Ruby 技術者認定試験を受験し、Silver/Gold共に合格しました。(Silver:84点/Gold:94点)
合格にあたり、先人たちのQiita記事に大変お世話になったので、私も誰かの参考になればという気持ちから記事にまとめておきます。

# 著者の受験背景
現在私は社会人ではありますが、Ruby更にはプログラミングの仕事にはついてはおりません。
（仕事でプログラムを書くことはほぼありません。）
また、Rubyに初めて触れたのも2020年8月ごろです。（2021年1月本記事執筆）
個人的には将来的な（転職を含めた）キャリアアップに繋がればと思い受験しました。

**追記：　2022/01　より転職してITエンジニアとして働き始めました！！**

以上の背景から、本記事はRuby初学者の方へ向けての受験記としています。
初学習から技術者認定試験を受験しSilver/Goldの資格を取得するための参考にしていただければ幸いです。

# Rubyの初学習
### 【準備するもの】
Ruby：技術者認定試験の対象verが2.1です。最新のRubyのDLで問題ありません。
テキストエディタ：なんでも良いですが、著者はVScodeを利用しています。
githubアカウント：試験勉強に使用します。また持っておくと今後必ず使います。

※上記は書籍や記事にDLの方法が多く載っていると思いますので、方法は割愛します。

### 【使用した勉強書籍】
- <B>たのしいRuby</B>(著：高橋征義、後藤裕蔵 / 出版：SB Creative)

<img src="https://tanoshiiruby.github.io/6/images/cover.jpg" width=30%>

どの先人の記事でも紹介されている「たのしいRuby」です。
基本的にこれ1冊あれば基礎を固めるには充分です。

私は第２部までを一通り目を通し、第３部で各章の末尾の問題を自力で回答しながら理解を深めました。
読み終えたら、後述のRails超入門を一度触ります。その後この本にもう一度戻ってくると、実戦でよく使いそうなメソッドが目につき非常に勉強になります。



- <B>Ruby on Rails6 超入門</B>(著：掌田　津耶乃 / 出版：秀和システム)

<img src="https://images-na.ssl-images-amazon.com/images/I/61cTHmlRolL.jpg" width=30%>

いきなり本筋から逸れますが、Railsについての書籍です。
ここで紹介するのはそれなりの理由があります。
それは初学者に陥りやすい現象に、最終的なアウトプットが見えず勉強に限界を感じることです。
特に言語解説系の書籍は、実戦でよく使用される重要な部分が不透明です。
これでは出てくる全てが重要な構文・メソッド・技法に見えてしまいます。
ですので、Rubyに触れる人十中八九がこの先触れるであろう「Ruby on Rails」を軽く触っておくのは非常にメリットになるかと思います。

# 技術者認定試験へ向けた勉強
### 【試験に必要な準備】
プロメトリックID：受験に必要です。発効は無料。
試験予約：iPhone/iPadのSafariでは私はエラーで予約できませんでした。PC推奨のようです。


### 【使用した勉強書籍】
- <B>Ruby技術者認定試験合格教本（○Silver/○Gold）</B><br>
(著：増井雄一郎，小川伸一郎，株式会社日立ソリューションズ 牧俊男 / 出版：技術評論社)

<img src="http://image.gihyo.co.jp/assets/images/cover/2015/9784774175676.jpg" width=30%>

こちらもどの先人の記事でも紹介されている合格教本です。
ある程度基礎が固まっている人が読むべきだと思います。目安は「たのしいRuby」読破後です。
Marshall/Thread等「たのしいRuby」でも触れられていない部分は、新しい知識として吸収します。
また、第5章までの範囲がとても難しく感じたのならば「たのしいRuby」に戻るべきです。

この本はメソッドや理論が淡々と並べられている詰め込み羅列型の本です。
一つ一つ挙動を組んで確認するのは当たり前ですが、出てくるメソッドやclass/moduleに対して、ただ模写するのではなく自分なりに工夫してプログラムを書いてみるべきです。

例えば自分なりにclass/moduleを作成してinclude/prependしたものは、自分が考えていた継承の通りでしょうか？
include/prependで2つ以上ののmoduleを一度に継承関係に置いた場合どうなりますか？

意外と細かいところまで気を配っておく必要があります。

- <B>メタプログラミングRuby（×Silver/◎Gold）</B><br>
(著：Paolo Perrotta　訳：角 征典/ 出版：オライリー・ジャパン)

<img src="https://www.oreilly.co.jp/books/images/picture_large978-4-87311-743-0.jpeg" width=30%>

メタプログラミングの真髄に触れることができる良書です。
試験だけならば読まなくても良いという記事を数件見かけましたが、個人的には読むべきです。
Silver試験ではこの内容までは不要なので、Silver受験後に購入して読破するのが良いでしょう。

この本を読む前と後でruby内の包括関係の理解は格段に上がりました。
最初はdefine_methodなどでメタプログラミングしていく内容で、なんでこの知識が必要なんだと理解に苦しむのですが、3,4章あたりが真髄です。

初見では試験勉強ではみたことがない内容が多く、ついていくのがやっとだと思います。
個人的には1周目をとりあえず模写して理解し、日をおいて2周目をするべきです。
2周目は模写ではなく、内容から真意を汲み取って自分なりのコーディングをするのが良いでしょう。


### 【試験対策】
- [Rex](https://rex.libertyfish.co.jp) (◎Silver/◎Gold)<br>

Silver/Gold両方の試験対策問題を無料で公開しているサイトです。
毎回ランダムで問題を出題してくるため、非常に有用。試験勉強として一番利用しました。
試験前の時点で毎回100点が取れるくらいやり込むべきです。
ただし、一部問題が間違っています。特にGoldで数個見かけました。
勉強していれば違和感を覚える回答です。気になったら自分でコードを書いて確認してください。


- [ミニツク](http://www.minituku.net/courses/1049510743/contents/775230600.html)(○Silver/×Gold)<br>

Silver試験のみですが対策問題集を解くことができます。こちらは問題が決まっています。
Rexである程度解けるようになったら、補完できていなかった知識を埋めるのに役立ちます。

- [CTC](https://www.school.ctc-g.co.jp/ruby/training_ruby_gold_01_10.html)(×Silver/○Gold)<br>

こちらはGold試験のみですが対策問題集を解くことができます。
ミニツク同様の使い方で大丈夫です。

- [公式Silver模擬問題集](https://gist.github.com/sean2121/945035ef2341f0c39bf40762cd8531e0)(○Silver/×Gold)

公式がSilverしか問題集を出していない。あまり納得できないがこればかりは仕方ない。
問題は易しめではあるが、非常に似た問題が試験に数問出ていたので、解くべき。


- [ruby_silver_all.md](https://gist.github.com/m-haramoto/121dc43453661816f4eef8fe15f86827)(○Silver/×Gold)

m-haramoto([@HaramotoReo](https://twitter.com/haramotoreo))さん作のSilver対策問題集
各classごとに分かれた問題で、非常に良問揃い。
こちらも試験2週間くらい前に手をつけて知識の抜けを埋めるのに非常に役立つ。

- [Ruby Association Certified Ruby Programmer Examination](https://github.com/ruby-association/prep-test)(○Silver/○Gold)

問題が英語なので初見殺しだが、意外と意味もわかりつつ解ける。
こちらも知識の補完。本試験でここの問題を解いていなかったら落としていた問題も数問あったので、見つけて助かった。

### 【その他】
2,3年前の記事を見ていると、ITメトレで勉強しましたという意見も多いが、サービスは終了。
問題も閲覧できなくなっているので、注意。

# 本試験

試験会場では、ペーパーと筆記用具が事前に用意されているので、問題を紙にメモしながら回答可能。
ただし、用紙は持ち帰れない。

### 【Silver】
とにかくメソッドを覚える。これに尽きる。
破壊的メソッドは!がつくが一部には付かないとか、色々一筋縄ではいかない。難儀だ。
あとは演算子の優先順位等少し細かいところを覚えておくとよい。

### 【Gold】
まずはsingletonを含めたclass/moduleの関係を頭に入れないと絶対に合格できない。
探索がどのように進むのか頭に描けるようになるまで、メタプログラミングRubyや問題を解く。
あとはクラスインスタンス変数（クラス変数、インスタンス変数どちらでもない）や、public,protected,privateの仕様。定数探索。rubyオプション。

一番難儀だったのが添付ライブラリについて。
試験教本でもページ数があり、かつどこまで覚えていいのか非常に難しい。
自分は1,2週間前までにざっと教本に目を通し、重要な部分だけピックアップしてノートにまとめた。
（他のファイルを用意して実行する時間があるなら、勉強に使ったほうがいいと判断した。）
本試験では添付ライブラリの問題は3,4問。
結局そこまで触れてなかった部分が出た気もするが、消去法で回答。（真相は闇の中）

### 【所感】
上記を見るとGoldの方が覚えることが多そうだが、実はSilverの方が覚えることが多い。
メソッドは無限にあるので、一問一答が得意な人は簡単かもしれない。
理論体系を覚えるのが得意な人はGoldの方が間違いなく簡単。


# 最後に
Rubyに触れて半年でGoldまで取得できるとは思っていなかったが、個人的に勉強してよかった。
この資格は必要なのか疑問視されることも多いが、特に初学者は目標になるし、その点では難易度は丁度良い。
金額が16500円するので、できれば1度で合格したいところだ。
（どちらも1度で受かってよかったと思える最大のポイントかもしれない。）

Rubyでプログラミングを始める人の何かの参考になれば嬉しい。