CTC 教育サービス
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes
こんにちは。 藺藤です。
今回は「Ruby技術者認定試験(*1)」の概要と、私が実践した合格方法についてご紹介します。
Ruby技術者認定試験には難易度の異なる2つの試験区分があります。 基本レベルである「シルバー」試験と、応用レベルである「ゴールド」試験です。 私はこれまでに「シルバー」試験、「ゴールド」試験の両方を受験し、無事合格することができました。 これらの学習を通じて、以前は使ったことがなかったが実際には便利なメソッドや、Rubyらしいコードの書き方を学習することができ、有意義だったと感じています。 また、プロジェクトメンバがどの程度のレベルなのか客観的な証明にもなります。
このため、「Ruby技術者認定試験を受験しよう! そして合格しよう!」というテーマで、試験制度の概要と、合格法・勉強方法等を説明していきたいと思います。
今回のコラムは本文を書いているうちに少し長くなってしまいました。 ですので、2回に分けて説明していきたいと思います。 それでは前編「シルバー編」を始めましょう!
本試験はRubyアソシエーションによって実施されている認定試験です。 以下、公式ホームページ(*1)から引用します。
"Ruby技術者認定試験制度は、Rubyベースのシステムを設計、開発、運用するエンジニア、Rubyでシステム提案を行うコンサルタント、Rubyを教える講師などを対象とした認定試験制度です。
認定者は、Ruby技術者としての技術力を公正に評価され、高い水準のRubyによるシステム開発能力を持つことを認定されます。認定によりRubyベースでシステム開発を行ううえで必要な基礎的な知識と応用力をもつことをアピールすることができます。
試験の合格者は、Rubyアソシエーションにより「 Ruby Association Certified Ruby Programmer Silver/Gold version 2.1」として認定されます。"
試験内容について説明してゆきます。
執筆時点(2015年12月)では、認定試験はRuby 2.1 を対象としています。
以前はRuby 1.8が対象となっていましたが、Ruby 2.0や 2.1で追加・変更となった文法もたくさんあります。 私の場合、シルバー試験はこの旧試験を受験しましたが、ゴールド試験は新試験での受験となりましたので、新規追加された文法や変更となったメソッド等を重点的に学習しました。
試験はCBT方式で行います。
1問あたり2点と考えられますので、50問中38問以上正解で合格ラインを超えます。
試験区分(難易度)には「シルバー」と「ゴールド」の2種類があります。
シルバー試験
Rubyの基本的な文法や、組み込みライブラリ・標準ライブラリが出題範囲となっており、合格者はRubyの基本的な技術レベルを持つことを認定されます。
基本的なコーディング技術は、シルバー試験の学習を進めることで十分に習得できます。 「適切に動くソースコードを独力で書ける」レベルと考えていただければよいかと思います。
ゴールド試験
ゴールド試験では、シルバー試験の出題範囲を更に掘り下げて出題されます。 また、この他にも以下の項目が追加で出題範囲となります。
ゴールド試験の合格者はRubyによるプログラム設計技術をもつことを認定されます。
ゴールド試験では、「シルバー」レベルよりも上位のレベルを目指します。 すなわち、動的スクリプト言語・オブジェクト指向言語であるであるRubyの特徴を生かした設計ができ、保守性・拡張性を確保できるレベルへの到達を目指します。
他に、最上位の試験区分として「プラチナ」も企画されているようですが、2015年現在まだ実施されていません。
出題範囲の詳細は、公式ホームページをご覧になってください。
本試験は以下のような方にお勧めします。
上記のような方に加え、「他言語の経験はあるけれど、Rubyはよくわからない」といったプログラマの方にとっても"Rubyらしいプログラム"を学ぶ良い機会となるでしょう。
例えば、「文字列を要素としてもつ配列があり、この配列の各要素を数値型に変換し、変換後の要素を持つ別の配列を作る」といった処理は以下のように書けます。
original_array = ["1", "2", "34", "-1"] converted_array = [] original_array.each do |value| converted_array << value.to_i end
String#to_i は、文字列として表現された数値を数値型に変換するメソッドです。(*2) もちろん、このソースコードでもやりたいことを実現できますが、この処理はもっと簡単に書くことができます。 それには、 Array#map メソッドを利用します。
original_array = ["1", "2", "34", "-1"] converted_array = original_array.map do |value| value.to_i end
以前のソースコードよりも幾分すっきりしたのではないでしょうか。(*3)
同様に、配列の要素のソートも、Rubyでは他の言語とは少し異なった方法をとりますが、試験勉強をしていく中で、こういったことを体系的に学習できます。
私の実感としては、Rubyを用いたシステム開発に携わるのであれば、やはり「シルバー」試験は持っていて欲しいものです。 上でも例を示しましたが、一つのことを実現するのに、Rubyでは大抵の場合いくつかの解法があるのですが、シルバー試験の範囲であるString, Array, Hash, Regexp等を学習することで「より綺麗 (readable) で、より効率の良い(effective)」コードを書くことができるようになります。
「ゴールド」試験の方は、当初はややマニアックな文法が出題範囲となっているようにも感じていましたが、実際には本試験に対する学習を進めていく中で「より柔軟なプログラム」を書けるようになったと思っています。 特に、動的言語としてのRubyの"良さ"(そして、アンチパターンとしての"悪さ")を理解した上でシステム開発を行えるようになったと感じています。
ぜひ、皆さんのRubyレベルを証明するためにも、認定試験にチャレンジしてください!
ここからは学習方法について説明してゆきます。 シルバー試験とゴールド試験では出題範囲が異なりますので、ここでは「シルバー試験対策」に絞って説明したいと思います。
シルバー試験合格に向けた学習を効率よく行うためには以下をお勧めします。
テキストとしては「Ruby技術者認定試験合格教本 Silver/Gold対応 Ruby公式資格教科書」をお勧めします。(*4) この本の説明にはゴールド試験の範囲まで含まれていますが、各章の見開きページに「シルバー試験で必要な範囲、ゴールド試験で必要な範囲」が区別できるように書かれていますので、問題ないでしょう。
実は、弊社ではシルバー試験受験者には別のテキストを勧めていました。 「Ruby技術者認定試験 公式ガイド」という本です。(*5) 先に紹介したRuby公式資格教科書に比べ厚さが半分程ですので、鞄の中に入れて"スキマ時間"に読むことができました。 私もこの本で学習した、思い出深い本です。 ただ、残念ながらこちらは旧試験(Ruby 1.8系)向けのものしか見つからず、新試験(Ruby 2.1)に対応したバージョンはまだ発売されていないようです。
シルバー試験を受ける前にくれぐれも注意してほしいのが、「十分な分量の練習問題を解く」ということです。 実際、私や、弊社新人は業務で少なからずRubyに触り、またテキストも読んだ状態であっても、初めて練習問題を解いたときには得点が半分もとれないような状態でした。 やはり、出題形式や、狙われやすいポイントを知るというのは大事なようです。
練習問題としては、まず、何よりも取り組んでいただきたいのが公式ページからダウンロードできる「模擬問題PDF(シルバー試験)」です。 (*6) こちらは無料で入手できますが、問題の解答だけではなく解説までついていますので、しっかりと理解しましょう。
他には、先ほど挙げたテキストにも練習問題がついています。 「公式資格教科書」では試験1回分(50問)の練習問題がついています。 また、「公式ガイド」はバージョンが少し古いものの(Ruby 1.8)、試験2回分(100問)の練習問題がついてきますので、こちらも活用してください。 いずれにも丁寧な解説が付属しますので、これらも十分に読み込んで欲しいです。
参考までに、弊社ではこの問題に対する正答率が90%を超えることを一つの目標としています。 目安としては3,4回程練習問題に取り組むと概ねこのラインに到達するようです。
実行環境も用意しておきましょう。 Ruby 2.1.x 系の最新のものをインストールします。
Windows 環境でしたら、RubyInstaller (*7)が一番手軽なのでお勧めします。
学習方法としては
の繰り返しが基本となります。 テキストは少しずつでもいいので、計画的に読み進めていきましょう。 一方、練習問題はしっかりと時間を確保して行ってください。 試験時間は 90分ですので、この分の時間を確保した上で取り組むと、より本番に近い状態となり効果的です。
練習問題の解き方として、私は「○△×法」をお勧めします。
まず、練習問題を解く際には、以下のルールに従って回答します。
・解答に自信のある場合には ⇒ ○ と解答する
・解答に自信がない場合には ⇒ △ と解答する
練習問題を解き終わったら、以下のルールで採点します。
・○をつけたもので正解 ⇒ ○(2点)
・△をつけたもので正解 ⇒ △(1点)
・○または△をつけたもので、不正解 ⇒ ×(0点)
この方法で採点すると、"なんとなく勘で当たった"という問題は低く点数を見積もられますので、ややシビアな得点になります。 この方式で得点が90 点を超えるようならば、かなり自信をもって試験本番にチャレンジしてもよいでしょう。 逆に 70~80点程度の得点ならば、最悪の場合、本番の際に足元をすくわれかねません。
あまりに×が多いようならば、まだまだ勉強が必要である、と判断できます。 この場合には①解答の解説までしっかり理解する、②テキストの該当分野をよく読み込む、等を行ってください。
△のついた問題は、今回は正解したが、数日後には忘れて不正解となってしまう可能性があるものです。 このような問題は試験前日に全て見返して、しっかりと復習しておきましょう。
テキストを読む際や、練習問題の解説を読むときには、自分でコードを実行しながら理解を深めていきましょう。 コードを実行する際には「irb (対話的 Ruby)」を利用すると便利です。 上で説明しましたが、予めRubyの実行環境を用意しておくとirb が利用可能ですので活用してください。 公式ホームページでは「pry」を進めていますが、こちらも同じように利用できます。
参考までに、私がシルバー試験を受験したときの状況をお話しします。
業務では既にRubyを使ってコーディングするようになっていたため、多少はコードを書けると思っていました。 しかし、実際に練習問題50問を解いてみると、たったの4割程しかとれなかったので、すごくがっかりしたのを覚えています。
その後、先ほど紹介した「○△×法」を用いて、苦手な部分を一つ一つ丁寧に潰していきました。 この結果、練習問題の2回目で7割程の点数となり、最後の3回目では90%以上の得点に到達しました。
試験を申し込んだ後も、ちゃんと合格できるか不安でした。 試験前日にはこれまで解いた中で△のついている問題を全て見直しました。 このおかげか、本番の際にも90%以上の得点をとれたと記憶しています。
学習量は以下の通りです。 私は物覚えが悪い方だと思いますので、もっと早く合格できる方もいるでしょう。 あくまで参考としてお考えください。
期間: 2か月程(4月~5月)
学習量: テキスト「公式ガイド」 1周目(全て読み込み)+2周目(流し読み)
練習問題: 2セット(1 セット = 50問) を各3周
(点数の推移: 1回目 約4割 ⇒ 2回目 約7割 ⇒ 3回目 約9割)
以上の学習量で、なんとか合格することができました。 総学習時間は、特に記録などはしていませんでしたが、40~50時間程度かと思います。
このように学習することのメリットとしては、シルバー試験を受ける前に比べて、"無駄な(既にある)メソッドを自作"することがなくなった点や、全体的にすっきりとコーディングできるようになった点などが挙げられます。 最近では、Rubyを初めて触る新人に「このコードは、こういう風にも書けるよ。 さっきよりもすっきりしたでしょ?」などと教える機会も多くなりました。
最後に試験のポイントとなる点を幾つか挙げます。 ここで挙げる例は、irbを使って実際に挙動を確認しながら理解していってもらえればと思います。
Rubyには、「同じ働きで名称の違うメソッド」がたくさんあります。 例としては
等、たくさんあげられます。(この他にもあります。) どのメソッドと、どのメソッドが仲間なのか、しっかりと学習してください。
また、似たような名前のメソッドもしっかりと記憶しておきましょう。 以下はそれぞれのメソッドで挙動が異なる組ですが、違いをまとめて覚えておきましょう。
例外処理の書き方や、ファイル・ディレクトリ操作等は、「シルバー試験の学習で初めて知った」という方もいるようです。 これらにも習熟しておきましょう。
今回は「Ruby技術者認定試験に合格しよう!」というテーマでお話ししました。 紹介したテキストや練習問題等は、実際に私や弊社ゼネットの社員が利用しているものですので、ご参考にしてください。
ゴールド試験の対策は、次回たっぷりとお話ししたいと思います。 お楽しみに!
それでは、Enjoy Ruby!
*1 :「Ruby技術者認定試験制度」について詳しくはこちらを参照してください。
http://www.ruby.or.jp/ja/certification/examination/
*2 : "Array#push"は、Arrayクラスのインスタンスはpushというメソッド(インスタンス・メソッド)を持つ、といった意味となる。 なお、"Time.now"と書くと、Timeクラスはnowというクラス・メソッドを持つ、という意味になる。
*3 : 実はこのソースコードは更に短縮できます。"&"という記号を使うことで、繰り返し部分を一行で書くことができます。
converted_array = original_array.map(&:to_i)
実際に動かしてみてください。
*4 : 増井 雄一郎他著、「Ruby技術者認定試験合格教本 Silver/Gold対応 Ruby公式資格教科書」、技術評論社(2015)
*5 : 伊藤忠テクノソリューションズ著、「Ruby技術者認定試験 公式ガイド」
*6 : 「模擬問題PDF(シルバー試験)」、日経BP社(2009)
http://www.ruby.or.jp/ja/certification/examination/index.data/exam_prep_jp.pdf
*7 : 「RubyInstaller」 http://rubyinstaller.org/
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes