Ruby技術者認定試験Silver受験記

# 本記事について
Ruby技術者認定試験Silver受験にあたり、振り返りのために学習メモをまとめました。
どなたかの参考になれば幸いです。

**追記11/10受験**
86/100点で**無事合格**しました。お金(16,500円)を無駄にしなくてよかった。。

## Ruby技術者認定試験 Silver（Ver 2.1)とは

以下、[Rubyアソシエーションの公式ホームページ](https://www.ruby.or.jp/ja/certification/examination/)から引用です。
> Ruby技術者認定試験について
Ruby技術者認定試験制度は、Rubyベースのシステムを設計、開発、運用するエンジニア、Rubyでシステム提案を行うコンサルタント、Rubyを教える講師及びRubyを学ぶ学生などを対象とした認定試験制度です。認定者は、Ruby技術者としての技術力を公正に評価され、高い水準のRubyによるシステム開発能力を持つことを認定されます。
認定によりRubyベースでシステム開発を行ううえで必要な基礎的な知識と応用力をもつことをアピールすることができます。試験の合格者は、Rubyアソシエーションにより「 Ruby Association Certified Ruby Programmer Silver/Gold version 2.1」として認定されます。



| 項目           | 内容                                                                                                                                                                                                                                                                                                                                                                                                                                       | 
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | 
| 試験時間       | 90分                                                                                                                                                                                                                                                                                                                                                                                                                                       | 
| 試験方法       | CBT試験                                                                                                                                                                                                                                                                                                                                                                                                                                    | 
| 問題数         | 50問（選択式）                                                                                                                                                                                                                                                                                                                                                                                                                             | 
| 合格ライン     | 75%                                                                                                                                                                                                                                                                                                                                                                                                                                        | 
| 対象バージョン | Ruby 2.1.x                                                                                                                                                                                                                                                                                                                                                                                                                                 | 
| 出題範囲       | 文法<br>　コメント、リテラル（数値、真偽値、文字列、文字、配列、ハッシュ等）、変数 / 定数とスコープ、演算子、条件分岐、ループ、例外処理、メソッド呼び出し、ブロック、メソッド定義、クラス定義、モジュール定義、多言語対応<br>組み込みライブラリ<br>　Object、数値クラス、Stringクラス、Arrayクラス、Hashクラス、Kernelモジュール、Enumerableモジュール、Comparableモジュール<br>オブジェクト指向<br>　ポリモルフィズム、継承、ミックスイン | 

## 書籍、WEBサイト（参考）
以下の書籍とサイトを中心に学習を行いました。

- [［改訂2版］Ruby技術者認定試験合格教本（Silver/Gold対応）Ruby公式資格教科書](https://www.amazon.co.jp/dp/B0756VF9Y3/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)
- [Rubyがミニツク](http://www.minituku.net/courses/1049510743/contents/775230600.html)
- [REx](https://rex.libertyfish.co.jp/exam_histories)
- [Rubyアソシエーション 模擬問題](https://gist.github.com/m-haramoto/121dc43453661816f4eef8fe15f86827)
- [DIVE INTO EXAM](https://exam.diveintocode.jp/exam)

## 学習期間と学習ステップ

学習期間は約1ヶ月。総学習時間は30~40時間くらいでした。

1. **[［改訂2版］Ruby技術者認定試験合格教本（Silver/Gold対応）Ruby公式資格教科書](https://www.amazon.co.jp/dp/B0756VF9Y3/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1) の演習問題**にチャレンジし、現時点での実力と弱点を確認。

2. **[［改訂2版］Ruby技術者認定試験合格教本（Silver/Gold対応）Ruby公式資格教科書](https://www.amazon.co.jp/dp/B0756VF9Y3/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)** を通読。
 SilverとGoldの出題範囲は分かれていますが、明示してあるわけではないため、とりあえず1周通読しました。 

3. **参考で挙げた書籍、WEBサイトの模擬試験に繰り返し取り組む**
 とにかく、繰り返し問題を解きます。
 間違えた問題は都度リファレンスや公式テキストをチェックしてなぜ間違えたかを確認しました。
 苦手な問題をまとめて、見直しができるようにしておくと、定着しやすかったです。
 （私は[Bear](https://apps.apple.com/jp/app/bear-%E3%83%97%E3%83%A9%E3%82%A4%E3%83%99%E3%83%BC%E3%83%88%E3%83%A1%E3%83%A2/id1091189122?mt=12)というメモアプリを使ってPCでもスマホでも見直しができるようにしてました。）
 ここでどれだけの種類・量に取り組めるかによって本番の難易度が変わってくると感じました。
 特に、[公式テキストの演習問題](https://www.amazon.co.jp/dp/B0756VF9Y3/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)と[Rubyアソシエーションの模擬問題](https://gist.github.com/m-haramoto/121dc43453661816f4eef8fe15f86827)はMustで取り組むべきだと思います。
[REx](https://rex.libertyfish.co.jp/exam_histories)は7回くらいやりましたが、他の模擬試験より少し難度が高いため、完璧にするのは余裕があればでいいと思います。
私はどの試験も9割程度の点数が取れてから試験に臨みました。

4. **いざ受験！**
 体調を万全にして受験に臨みました。
 試験時間は90分あります。よほどのことが無い限り、時間切れにはならないので焦らずに。
 1度解き終わってからの全問見直しも忘れずに。
 終了ボタンを押す時は緊張しますが自信を持って！

## 個人的注意ポイント

- **Rubyにおける偽の値**
    - nil, false  

- **ローカル変数**

- **各進数への変換(2,8,10,16進数)**

- **三項演算子**

- **==, ===, eql?, equal? それぞれの違い**

- **|, ||, &, && それぞれの違い**

- **例外処理の基本文法**

- **配列同士の加算、減算**

- **配列の操作**
    - pop, push, shift, unshift

- **同じ動作をするメソッド**
    - findとdetect
    - find_allとselect
    - mapとcollect
    - delete_ifとreject!

- **破壊的、非破壊的メソッドの分類**
    - !が付かない破壊的メソッド
        - Array#concat
        - Array#pop
        - Array#push
        - Array#shift
        - Array#unshift
        - Array#delete
        - Array#clear
        - String#concat
        - Hash#update
        - Hash#delete
        - Hash#delete_if
        - Hash#clear
        - **もっとありますがよく出たのはこの辺りでした。**

- **ハッシュの宣言方法**
    - {}　(空のハッシュを宣言）
    - {:a => 1, :b => 2, :c => 3}
    - {a: 1, b: 2, c: 3}


- **正規表現**
    - 模擬試験に出るレベルの正規表現は完璧に。
- **ヒアドキュメントの使い方**
- **ファイルのオープンモード**
    - "r", "w", "a", "r+", "w+", "a+" それぞれの違い
    - 引数として上記を与えない場合どうなるかも抑えておく 
- **日付のフォーマット**
    - strftime("%Y/%m/%d")
- **Timeオブジェクトによる時間の加算、減算**

## 最後に

知っているメソッドでもこんな使い方もあるんだ！学びが多くあり、非常に有益でした。
今後も学習を継続し、Goldも取得したいです。