実務経験なしからRuby Silver合格したので、勉強方法をまとめてみた


## はじめに
先日(6/15)、Ruby Silver試験に無事合格しました。

点数は90点と中々キリがいい点数でした。(合格ラインは75点)

Silverの合格体験記は探せば結構ありますが、備忘録かつQiitaの投稿練習も兼ねて

今回、自分がRuby Silverを受けるにあたっての勉強方法をまとめてみます。


## 結論
* String、ArrayとHash(Enumerable)を暗記する
* Ruby特有の文法に面食らわない
* 正規表現、File、IO、Dirはちょっと難しい？
* 出題方式に慣れる
* 難しくはないが一夜漬けで合格できるレベルでは決してない



## 受験までの経緯
元々、[オブジェクト指向設計実践ガイド](https://www.amazon.co.jp/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E8%A8%AD%E8%A8%88%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-Ruby%E3%81%A7%E3%82%8F%E3%81%8B%E3%82%8B-%E9%80%B2%E5%8C%96%E3%81%97%E3%81%A4%E3%81%A5%E3%81%91%E3%82%8B%E6%9F%94%E8%BB%9F%E3%81%AA%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E8%82%B2%E3%81%A6%E6%96%B9-Sandi-Metz/dp/477418361X/ref=sr_1_1?adgrpid=60166663624&gclid=Cj0KCQjwrpLoBRD_ARIsAJd0BIVQd6trGRipSrIf1fl67EWISTmfotmxDLimTPfBzOFDvSmnb044IF4aAkWUEALw_wcB&hvadid=338538637855&hvdev=c&hvlocphy=1009545&hvnetw=g&hvpos=1t1&hvqmt=b&hvrand=12876801878679751579&hvtargid=kwd-536214240167&hydadcr=27266_11561146&jp-ad-ap=0&keywords=%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89&qid=1560614801&s=gateway&sr=8-1)で

OOPをそろそろ勉強しようかな～と思ったのですが

Rubyの文法が全く分からなくて挫折しました。

その後、[チェリー本](https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%92%E7%9B%AE%E6%8C%87%E3%81%99%E4%BA%BA%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AERuby%E5%85%A5%E9%96%80-%E8%A8%80%E8%AA%9E%E4%BB%95%E6%A7%98%E3%81%8B%E3%82%89%E3%83%86%E3%82%B9%E3%83%88%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA%E3%83%BB%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E6%8A%80%E6%B3%95%E3%81%BE%E3%81%A7-Software-Design-plus%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA/dp/4774193976/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=2QEMRIM9BNK87&keywords=ruby+%E3%83%81%E3%82%A7%E3%83%AA%E3%83%BC%E6%9C%AC&qid=1560614947&s=gateway&sprefix=ruby+%E3%83%81%E3%82%A7%E3%83%AA%E3%83%BC%2Caps%2C356&sr=8-1)でRubyを勉強しているうちに楽しくなってきたので

力試しにSilverを受けてみることにしました。

今思うと色々おかしいですね笑

## 前提条件
自分のスペックについて簡単にまとめておきます。

* 社会人二年目、ソフト設計開発
* 業務はC#のWPFアプリ開発
* プログラムにきちんと取り組み始めたのが昨年の11月
* 動的言語はpythonで"Hello World"したことしかない
* IT系の資格は基本情報技術者ぐらい
* **Ruby開発経験なし**

業務ではPoCアプリレベルしか作ったことがないので、はっきり言って全然プログラムできないです。

書いている通り、実務でRubyを使う機会もなければ、研修でRubyの基礎やら動的言語の良さを教えてもらったりなんてこともありません。


## 勉強時間
* Ruby Sileverの勉強期間

Silverの勉強は約1ヵ月半でしょうか。

GW明けから1日最低1Hは勉強していました。

土日は他のこともしたかったので1日2h程度です。

毎日コツコツやっていたのが大きかったと思います。


## 勉強方法

### 4月(二ヵ月半前)

受験経緯でも述べましたが、最初からいきなり[チェリー本](https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%92%E7%9B%AE%E6%8C%87%E3%81%99%E4%BA%BA%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AERuby%E5%85%A5%E9%96%80-%E8%A8%80%E8%AA%9E%E4%BB%95%E6%A7%98%E3%81%8B%E3%82%89%E3%83%86%E3%82%B9%E3%83%88%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA%E3%83%BB%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E6%8A%80%E6%B3%95%E3%81%BE%E3%81%A7-Software-Design-plus%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA/dp/4774193976/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=2QEMRIM9BNK87&keywords=ruby+%E3%83%81%E3%82%A7%E3%83%AA%E3%83%BC%E6%9C%AC&qid=1560614947&s=gateway&sprefix=ruby+%E3%83%81%E3%82%A7%E3%83%AA%E3%83%BC%2Caps%2C356&sr=8-1)を読み始めました。

他の合格者の体験記を読ませていただくと[たのしいRuby](https://www.amazon.co.jp/dp/4797386290/ref=cm_sw_r_cp_ep_dp_-wBqBb24AGAAD)から入る人が多い印象です。

三週間かけて本一冊を写経し、分からない点が多々ありながらも

「Rubyって色々できるんだな～」と徐々にRubyに惹かれていきました。

4月は他の資格試験も受けていた都合で、Silverの本格的な勉強は5月(一ヵ月半前)からに決めました。

### 5月(一ヵ月半前)

* [Ruby技術者認定試験合格教本](https://www.amazon.co.jp/%E6%94%B9%E8%A8%822%E7%89%88-Ruby%E6%8A%80%E8%A1%93%E8%80%85%E8%AA%8D%E5%AE%9A%E8%A9%A6%E9%A8%93%E5%90%88%E6%A0%BC%E6%95%99%E6%9C%AC-Silver-Gold%E5%AF%BE%E5%BF%9C-Ruby%E5%85%AC%E5%BC%8F%E8%B3%87%E6%A0%BC%E6%95%99%E7%A7%91%E6%9B%B8/dp/4774191949/ref=pd_sbs_14_1/358-0848427-5557826?_encoding=UTF8&pd_rd_i=4774191949&pd_rd_r=24397792-8f8c-11e9-9ee7-a5c12a01245f&pd_rd_w=bhgXH&pd_rd_wg=d7BYa&pf_rd_p=ad2ea29d-ea11-483c-9db2-6b5875bb9b73&pf_rd_r=J0KHYZSXB74DRKV01HQM&psc=1&refRID=J0KHYZSXB74DRKV01HQM)

改定2版が出ていて、初版は誤植が多すぎるとのことで改訂版がおすすめだそうです。

4000円ぐらいするので、安く済ませたい方はAmazonで初版の中古を買えば1000円ですみます・・・。

合格教本は最終的にSilverの範囲を3周は読みました。

1周目はとりあえず目を通して、勉強していることへのモチベーションをあげていました。

そのまま、**30問ある基礎確認問題**と**50問の模擬問題**を解いてボコボコにされたら

2周目以降は演習問題で解けなかったところを重点的に読み漁ります。自分は付箋を貼りながら理解できていない理由をメモしてました。

この80問の問題は、本番の試験に似たような問題が何個も出てきます。

似たようなものが4割、まったく同じ問題が1割ぐらいは出てる気がします。

後述する参考教材と比べて、主題範囲をほぼ網羅しているので合格教本だけで合格することも十分可能だと思います。


* [Rubyがミニツク Ruby技術者認定試験（Silver）対策問題集](http://www.minituku.net/courses/1049510743/contents/775230600.html)

Rubyがミニツクは書籍ではなく、e-ラーニング形式で問題を解いていくweb問題集です。

ドリルは1(総合)、2(String,正規表現)、3(配列,ハッシュ)、4(クラス)、5(File,Dir,IO)、6(条件分岐,イテレータ)まであります。

スマホで解くことができるので、通勤中の電車の中で毎日解いていました。

* [模擬問題集](https://gist.github.com/sean2121/945035ef2341f0c39bf40762cd8531e0)

Gistに上がっている50問の問題集です。

本番に近い問題が多めなので、こちらも5回以上は解きなおしました。

初見の時は、

~~~ruby
ary = []
ary << 1 && false #=> 左辺評価でaryに1を追加
true || ary << 2  #=> 左辺がtrueなので右辺が評価されない
false && ary << 3 #=> 左辺がfalseなので右辺が評価されない
false || ary << 4 #=> 左辺がfalseなので右辺を評価しaryに4を追加
p ary             #=> << は破壊的メソッドなので ary は [1,4]
~~~

この問題が全く分からなくて困りました。

* [Progate](https://prog-8.com/)

Railsを勉強したかったので課金して、おまけでRubyも2周ほどやりました。

Silver合格だけを見据えるなら、やらなくていいかと思います。

### 6月

* [Ruby Examination](https://rex.libertyfish.co.jp/)

解くたびに何度も問題が入れ替わり、点数を表示してくれるWeb問題集です。

6月に入ってから(試験までの二週間)は毎日最低でも1回は

**50問解いて、点数確認、間違えた部分をirbで動作確認、間違えた問題をメモする**

この流れを続けました。

破壊的メソッドか非破壊的メソッドかを注意深く解くには最適な問題集だと思います。


* その他

他の合格された方の合格体験記を読んだり、5月で勉強した内容を振り返りしたり

特に、[Ruby Silver ポイントまとめ](https://qiita.com/sk_nimo/items/aa03c7fe1701a1f03a56) は間違えやすい問題をまとめていただいていたので大変重宝しました。

## 気を付けたほうがいい点

* [Ruby Silver ポイントまとめ](https://qiita.com/sk_nimo/items/aa03c7fe1701a1f03a56)

上記ページにほぼまとめられているので、個人的に苦手だったところなどをまとめておきます。


**1. 選択肢に "例外が発生する" がある問題**

Silverの特徴ですが、

そんなメソッド名は存在しない。(Array#delete_if!)

このクラスにそのメソッドはない。(String#each)

スコープ内に変数が存在しない。 等など。

知識があいまいな時にこの手の問題にあたると、時間を結構使ってしまいますね。


**2. 選択肢から正解(or 間違い)を選べ(複数回答)　系**

~~~Ruby
以下の実行結果になるように、_A_ に記述する適切なコードをすべて選べ

a = [1,2,3,4]
p _A_
#=> 出力結果 : [2,3]

1. a[1...3]

2. a.slice(1,2)

3. a.slice!(1,2)

4. a[1,2] 

5. a[-3..-2]

6. a[-3...-1]

#=> 正解 : 全部
~~~

**3. Hashの生成**

{}, Hash.new(),Hash()の三パターン

~~~Ruby
h1 = {:a => 1}
p h1 #=> {:a => 1}
p h1.class #=> Hash

h2 = Hash.new()
p h2 #=> {}
p h2.class #=> Hash

h3 = Hash(:b => 1)
p h3 #=> {:b => 1}
p h3.class #=> Hash
~~~



## 偉大なる先人様
[Ruby技術者認定試験Silver version 2.1を受けて…](https://qiita.com/motty93/items/413485469e4ec665c329)

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

[Ruby技術者認定試験Silver 合格体験記](https://qiita.com/kakeijin/items/796327748edaab4c54e1)

[Ruby技術者認定試験Silverに合格した](https://qiita.com/hamburger/items/f17fc95c1468b5cf8c2c)


## 試験後の振り返り

問題の大半は組み込みメソッド(String,Array,Hash)に関する問題なので、

まずはここをしっかり暗記しましょう。

上記の問題集を何回も解いていればエイリアスメソッドも自然と覚えるでしょう。

受験料が結構高いので、一発で受かるようにしっかりと準備しておきたいですね。

ただ、Silverが取れたからといってコーディングスキルや設計ができるようになったわけではないので、引き続きGoldの範囲を勉強していきたいと思います。

### その後
1月にGold受験します。😢
結果が出次第、Qiitaにて共有します。