ゆみんぐ ~Yumi+Programming~

弓道とプログラミングを楽しむブログ

Ruby技術者認定試験silverに合格しました

年末の話ですが、Ruby技術者認定試験のsilverに合格しました。

【公式サイト】Ruby技術者認定試験

なぜ試験を受けようと思ったか

フィヨルドブートキャンプで学習を進める中で、Rubyの基本的な文法とかメソッドの知識が足りないと実感しました。Ruby技術者認定試験ではそこのところが補完できるかなと思い、とりあえず模擬問題集であるRubyExamination(REx)をやってみることにしました。

【参考】REx - Ruby Examination 【参考】Rexの使い方

どうせやるならただ問題集を解くよりも、試験合格を目指してやって合格できれば一石二鳥じゃん!と思って受験を決めました。受験にあたり参考にしたのは以下の記事です。

【参考】Ruby Silverに合格したので、勉強方法をまとめてみた(2019年2月版) - Qiita

【参考】Ruby技術者認定試験Silver version 2.1を受けて… - Qiita

勉強した期間

RExを始めたのが2021/10/4で、試験が2021/11/27だったので、大体2ヶ月弱の勉強期間でした。 メインはフィヨルドブートキャンプなので、仕事の昼休み等の空き時間にコツコツ進めた形です。

やったこと

勉強したのは主に次の3つです。同時並行ではなく順番にやってました。

  1. REx
  2. Ruby技術者認定試験合格教本
  3. 模擬問題集
・REx (10/4〜10/23)

まずはRExから始めました。これはスマホでできるので昼休みを使って解いていました。

1日1回、大体30分ぐらいかかります。だんだん問題も見慣れてくるため、最終的には20分ぐらいになったかも。ただ解くだけではなく、間違った問題を良く復習して潰していくのが試験勉強の王道かなと思います。

本番は50問出題で合格ラインが75%のため、38問正解がボーダーラインとなります。結果は毎日Twitterで報告していました。

日付 点数 日付 点数
10/4 40 10/14 86
10/5 66 10/15 94
10/6 54 10/16 88
10/7 66 10/17 84
10/8 76 10/18 98
10/9 78 10/19 92
10/10 72 10/20 90
10/11 76 10/21 88
10/12 74 10/22 92
10/13 88 10/23 90

初めの方は本当に出来が悪く、当てずっぽうで答えているのも多い状態。ただ、8割は同じ問題で残り2割で違う問題を出すような作りになっているようなので、何回もやっていると流石にわかるようになってきます。反復は大事。 ただ、問題の内容が選択肢の順番も含めて全て同じなため、何回も繰り返すと選択肢で覚えてしまうという悪い状態になってきたため、一旦休止して書籍のRuby技術者認定試験合格教本をやることにしました。

Ruby技術者認定試験合格教本 (10/24〜11/23)

教本はSilverとGoldの出題範囲がわかるようになっているため、Silverの部分のみを解き進めました。動作はターミナルでirbを使って確認することもあり。1回全体をざっと進めて、苦手なところを復習。少しづつなので1ヶ月ほどやっていました。

・模擬問題集とREx (11/24〜11/27)

テキストが一通り終わったので試験の公式ホームページにリンクがある模擬問題集を解いてみました。現在はPDFの配布ではなくGitHubで公開されています。点数は覚えていませんが70点ぐらいだった気がします。合格ラインに届いていないのでかなり焦った記憶が。

【参考】silver_j.md

模擬問題集の復習をしつつ、もう一度RExをやってみました。テキストを一通りやったおかげで解説を読んでも理解度が前回と違いました。でも9割を超えられなかったことに危機感が…。

日付 点数
11/24 92
11/25 88

後はテキストや模擬問題集の見直しで当日を迎えます。

試験当日

試験は全国のPCスクールのようなところでオンラインで受験するような形式で、日付と時間は自由に選べます。

当日は1時間半ぐらい早く着いてしまったので、カフェでこれまでの復習をしました。後は他の合格者の記事を見て、ミニツクという問題集を載せているサイトがあることを知ったので、最終確認としてざっとやりました。ここから何問か同じような問題が出題されたのでやって良かったです。

【参考】ミニツク - Rubyのe-ラーニング研修システム

試験会場で受付をして、PCブースに通されて試験開始。

持ち込めるものは一切ありません。机に紙と鉛筆が置いてあるので、メモはそれでしろとのこと。紙は試験後回収されます。

RExと同じように選択肢をどんどん選んでいって、答えが怪しい問題はフラグを立てられます。後で確認しやすいです。

全て解答したら解答完了ボタンで早く終了させることも可能です。試験時間は90分ですが、自分は2回ぐらい確認しても45分ぐらいで終わってしまったので、早く終了させました。

ちなみに、終了したら即結果が表示されるので、この時が一番緊張した気がします。変な汗をかきました。

結果は90点で合格!ギリギリかと思っていましたが余裕でした。

感想

こうして2ヶ月弱の試験勉強は良い結果で終えることができました。受験した感想をいくつか書いておきます。

  • 受験を通じて、基礎的なRubyの文法力は確実に身についた。これはRExで反復した効果が大きいと思う。
  • 試験に使っているRubyのバージョンが古い。2.1とかだったかも。フィヨルドブートキャンプでは3.0を使用しているので、そちらで使っている書き方では不正解になることがある。公式教本にも「これ以降のバージョンでは対応している」とか書いてある。これを覚えておかなければいけないのが面倒。
  • RExは選択肢を覚えてしまい効果がだんだんと低くなる。模擬問題集とか色々な問題を解いた方が良い。
  • RExの問題がそのまま出題されることは少ない。解答の根拠をしっかり押さえておく必要がある。
  • 合格して就職に役立つかは未知数。(たぶん関係ない気がする)
  • おそらく落ちていても費用対効果の面で2回目は受験していなかったかも。

午前中の試験だったので、合格後にちょっとリッチにランチをとりました。

試験からの開放感もあり、最高の美味しさでした!これだけでも受験したかいがあったかも!

これから受験される方の参考になれば幸いです。

Railsでモデル名を変更する時にやったこと

フィヨルドブートキャンプの「Railsでユーザーフォローを作る」というプラクティスで実行した手順メモです。

ユーザーを自己結合するための中間テーブルを設けており、モデル名をrelatonship.rbにしていました。そこから別の名前(仮にfollow_relationship.rbとする)に変更することになりましたが、モデル名の変更はそれだけで済む問題ではなく、データベース、モデル、コントローラー、ルーティング、ビューまで、関連しているものを全て修正する必要があります。

概要

  1. マイグレーションファイルを作成、編集
  2. モデル名を変更、内容修正
  3. コントローラー名を変更、内容修正
  4. ルーティングを修正
  5. ビューを修正

環境

参考記事

手順

1.マイグレーションファイルを作成します。テーブル名はrelationshipsからfollow_relationshipsに変更するので、change_relationships_to_follow_relationshipsとなります。

$ rails g migration change_relationships_to_follow_relationships

マイグレーションファイルを編集し、テーブル名を変更します。今回はインデックスも付けていたのでrename_indexを使用します。 インデックス名はschema.rbを見ると書いてあります。

class ChangeRelationshipsToFollowRelationships < ActiveRecord::Migration[6.1]
  def change
    rename_table :relationships, :follow_relationships
    rename_index :follow_relationships, 'index_relationships_on_follower_id', 'index_follow_relationships_on_follower_id'
    rename_index :follow_relationships, 'index_relationships_on_following_id_and_follower_id', 'index_follow_relationships_on_following_id_and_follower_id'
    rename_index :follow_relationships, 'index_relationships_on_following_id', 'index_follow_relationships_on_following_id'
  end
end

2.モデル名を変更します。 今回のプラクティスはgitを使用しているので、ただファイル名を変更するだけでは変更履歴が追えなくなってしまいます。 そのため、gitで反映されるようにgit mvを使用してファイル名を変更します。

$ git mv relationship.rb follow_relationship.rb

次にモデルの内容をclass Relationshipからclass FollowRelationshipへ修正します。

class FollowRelationship < ApplicationRecord

関連しているモデルuser.rbの内容も同様に修正します。

〜〜〜
has_many :active_relationships, class_name: 'FollowRelationship', 〜〜
〜〜〜
has_many :passive_relationships, class_name: 'FollowRelationship', 〜〜
〜〜〜

3.コントローラー名を変更します。これも同様にgit mvを使用して変更します。

$ git mv relationships_controller.rb follow_relationships_controller.rb

コントローラーの内容をclass RelationshipsControllerからclass FollowRelationshipsControllerへ修正します。

class FollowRelationshipsController < ApplicationController

4.rails db:migrateを実行した後、ルーティングを修正します。 routes.rb:relationshipsだった部分を:follow_relationshipsに修正します。

resource :follow_relationships, only: %i(create destroy)

5.最後にビューファイルを修正します。 今回はユーザーの詳細画面に名前付きルーティングヘルパーを使用していたので、ルーティングを確認し該当部分を修正します。 該当部分はフォロー・フォロー解除のボタンの部分。

<% if current_user != @user %>
  <% if @user.followed_by?(current_user) %>
    <p><%= link_to t('views.follow.cancelled'), user_follow_relationships_path(@user.id), method: :delete %></p>
  <% else %>
    <p><%= link_to t('views.follow.followed'), user_follow_relationships_path(@user.id), method: :post %></p>
  <% end %>
<% end %>

まとめ

モデル名の変更するにはデータベース、モデル、コントローラー、ルーティング、ビューなど、関連しているものを全て修正する必要がありました。

また、gitを使っていることもあってファイル名の変更にはgitのコマンドを使う必要があるので注意が必要です。

(変更履歴を残さずにファイルを削除して新たに追加する方法もあると思いますが、今回はこの方法にしました。)

フィヨルドブートキャンプをはじめて300日が経ちました

フィヨルドブートキャンプの皆さんがブログでアウトプットされてるので、自分も書きたいな〜っと思ったんですが、その日がちょうど入会して300日目だったので今までやってきたことを振り返ることにしました。

フィヨルドブートキャンプでは学習した時は日報を書くことになっており、何のプラクティスを何時間やったのかも残せるようになっています。それを初めから見直してみて、何をどのぐらいやったのか書き出してみます。

今までの学習内容

フィヨルドブートキャンプのホームページに学習内容が掲載されていますが、全体はこんな感じです。

bootcamp.fjord.jp

これまで学習してきた各項目ごとの期間と時間をまとめてみました。

ラクティス 期間 時間
学習の準備・開発環境 2020/8/26〜8/27 3.75
HTML & CSS 2020/8/31〜10/15 54.25
Vi 2020/10/15〜10/16 2
Linux 2020/8/28〜8/31、10/16〜11/7 41.25
Git & GitHub 2020/11/24〜12/8 10.5
Ruby 2020/11/7〜11/23、12/9〜2021/2/20 109.75
HTTP 2021/2/16〜2/17 4.5
Nginx 2021/2/21〜2/26 5
データベース 2021/3/3〜4/4 23.5
Webアプリケーション 2021/4/4〜6/15 70.75
Ruby on Rails 2021/6/12〜6/21 18.25

日報の数は158なので、300日毎日やっていたわけではなく、およそ2日に1回という感じでしょうか。 (やる気に波があったりするので、あまり学習しない週もあればガッツリやった週もある感じです。) これ以外に昼休みや合間の時間にスマホで参考資料を読むだけで机に向かわず、日報を書かない日もあったので、実際はもう少しやっていると思います。 LinuxRubyで期間が飛び飛びになっているのは、途中でプラクティスが統合されたり順番が変更になったりしたためです。常にプラクティス内容がブラッシュアップされています。

学んだこと

  • HTMLとCSSの基本的な書き方、flex boxの使い方
  • Vimの基本的な使い方
  • Linuxのファイル操作、sshの基本、SSL /TLSの仕組み *Rubyのgem、bundler、rubocopについて
  • カレンダーのプログラム、ボウリングのスコア計算プログラム、lsコマンド作成、wcコマンド作成
  • HTTPの基本
  • NginxでSSL対応サイト作成
  • SQLの基本、PostgreSQLの基本、データベース設計
  • Sinatraを使ったWebアプリ作成、DBを利用したWebアプリ作成
  • Railsの基本、i18n

特に印象に残っているもの

Rubyのプラクティスに入り、FizzBuzz、カレンダーのプログラムと、本格的にプログラミングが始まり考えるのが楽しかった覚えがあります。ボウリングのプログラムも新ルールと旧ルールの2通り作成し、手強かったような気がします。 そして難しいと評判のlsコマンドは自分もかなり苦労した記憶はありますが、あえて他の人の日報を見ずにgoogle先生と公式リファレンスを頼りに独力で作成しました。かなり力技感のあるコードになってしまったような気がしますが、おかげでリファレンスを見るスキルや思考・分析のスキルが磨かれたと思います。 WebアプリケーションではSinatraを使用してメモアプリを作成しましたが、ちょうど年度始めの仕事の忙しさもあり、精神的にかなり凹んでしまいました。フィヨルドブートキャンプのメンターをはじめとする皆さんの暖かい言葉もあり、無事メンタルも復活し、そこからは良いペースで進められています。

フィヨルドブートキャンプについて

フィヨルドブートキャンプで新しいことを学習するのは楽しいです。また、それぞれ学習環境が違う中で、各々のペースで学習を進めていますが、Discordで個人のチャンネルで分報を書いたり、気づきや独り言を書いたりすると他の方がリアクションしてくれるので励みになります。人と人との繋がりのある良いコミュニティだなぁと常々感じています。 卒業するまでは結論は出せないのかもしれませんが、今のところはフィヨルドブートキャンプに巡り合って、そして勇気を出して始めて良かったと思っています。

これからのこと

いよいよRailsのプラクティスに入って、今までつけた知識が繋がっていく感じもあり楽しく進められています。一方、プラクティスの進捗状況は60%でまだまだ先は長いです。年度内に卒業することを目標に、引き続きがんばります!!

2020年の振り返りと2021年の目標

元日から弓が引けて、プログラミング学習もできて、一年の始まりが良いスタートを切れました。

ゆっくりする時間が取れたので、去年の振り返りをしつつ今年の目標を書き留めておきます。

2020年の振り返り(仕事関係)

4月〜

新年度に入り異動しました。仕事内容は大きく変わるも、やっていることは今までとそこまで大差なく、事務処理、電話・来客対応。6月いっぱいぐらいまで忙しくて仕事に追われる状態になりました。その後は波がありつつも年末まで無難にこなした感じです。

8月〜

大きな転機の月。8月25日にフィヨルドブートキャンプに入会し、転職に向けてプログラミング学習を開始しました。最初は1日30分とか、それすらもやらない日もありましたが、12月には朝勉を(たまに)やったりと、学習の習慣がついたように思います。

学習した内容としては、HTML&CSSLinux、Git&GitHubRubyで、4ヶ月で約150時間。1日1時間ちょい。うーん、少ない。もっと頑張ろう!

2020年の振り返り(弓道

1月

所属の連盟で毎年講習会を開いていますが、講習会後の新年会の際に、毎年お呼びしている先生から「このままだとダメだから、うちに来なさいよ」と声をかけていただきました。自分一人の稽古に限界を感じていたので、月1回を目標にお伺いすることにしました。

2月

名古屋の定期中央審査は同級生の結婚式と重なったので見送り。その直後に先生の所に初顔出しして、ビシバシしごかれました😅 県連の講習会ではその成果があったのか、講師の先生に良い評価をいただきました。

3月〜

新型コロナウイルスの関係で、予定していた弓道関係のイベントが全て中止になり、2020年の活動は終了しました。悲しい…。

中止になったもの

  • 京都定期中央審査(5月)
  • 選手権大会(6月)
  • 仙台定期中央審査(7月)
  • 東京定期中央審査(11月)

審査も射会もないなら力を蓄える良い機会でもあるので、先生の所にお伺いしてじっくり教わりました。時間が取れるのは2ヶ月に1回になってしまいましたが、色々考えながら取り組むことができました。

2021年の目標(仕事関係)

1番大きな目標は、フィヨルドブートキャンプを卒業すること!

卒業目安の1000時間まであと850時間あるので、1日2時間ちょい。仕事をしながらでハードルは高いけど、コツコツ取り組んでいこうと思います。

あとは朝活を定着させること!

仕事から帰ってきてやるよりも、朝やった方が疲れてないし集中もできてメリットが多いし、朝やったというので精神的にも余裕ができる気がします。定着するまで朝起きるのが大変ではありますが。

2021年の目標(弓道

新型コロナウイルスの状況次第の所がありますが、選手権大会と審査の通過が目標です。

先生の所にも月1回は行きたい所ですが、こちらは中々😅リモートで教えてもらうことはできないだろうか(失礼)

今年は転職も絡んできて、仕事も弓道も勝負の年になりそうです。この1年、走りきるぞ!!

フィヨルドブートキャンプはじめました

2020年8月25日、フィヨルドブートキャンプに入会しました。

フィヨルドブートキャンプというのは、オンラインのプログラミングスクールのこと。

詳しくはこちら。

bootcamp.fjord.jp

去年ぐらいまではProgateとかドットインストールとかを細々とやっていましたが、この度、一大決心をしてはじめることにしました。

~決心までの経緯~

同じ日の繰り返し

現在、仕事は事務職でWordやExcelを軽くいじるのみで、あとは電話や来客対応の日々。

定年が伸びて65歳までになったとしたら、あと何十年も同じことを続けるのかということに疑問を持ち、不安になりました。

年金がもらえるかもわからない未来では、何かスキルを持って生きる力がないと生きていけないのではないか。

そして、今の仕事の事務にいくら習熟しても、内部ルールのみが習熟し、外に出たら通用しない。生きる力はつかない。

そう思い、何かスキルを身に付けねばと考えていました。

転機

小中学校の時にBASICをいじっていたこともあり、PCやプログラミングに元々興味があったので、Progateやドットインストールでプログラミングを時々やるようになりました。でもイマイチ何かできるようになった気はしない。

そんな時、Patさんという方のブログで「アラフォーからプログラマーに転職して1ヶ月経ったけど、正直な感想書いてみる。」という記事を偶然発見。(現在は削除されています)

アラフォー未経験から自社開発企業に転職したという記事で、調べるといくらでも出てきそうな話なんですが。

でも、未経験だった人がスキルを身に付けて転職したということに驚き、心に引っかかるものがありました。

その人が通っていたプログラミングスクールが、冒頭で紹介した「フィヨルドブートキャンプ」です。

入会

以前、プログラミングスクールのことを調べたこともありますが、どれも通学が必要だったり、オンラインでもある程度の学習時間を確保しなければならなかったり、数も多くて諦めていました。

そんな中、このフィヨルドブートキャンプの冒頭の言葉に心惹かれたところがあります。

プログラマーとして就職を目指せるだけのスキルを身につけることを目標としたオンラインプログラミングスクールです。就職を目指せるスキルを弊社では「現場の人間にとって、戦力になるプログラマー」としています。具体的には、一人でWebサービスを作ることをゴールとした課題をやるのですが、それだけでなくチーム開発も経験できます。

Patさんのブログをはじめ、フィヨルドブートキャンプを卒業した方の記事や評判を色々調べてみると、卒業は難しいけども、確実に実力はつくとの評価が多かった気がします。

新しい道が見えた気がして、これをやり切れば変わるかもしれないと思いました。

定年まで同じ仕事を続ける選択肢もある。でも、その先は?

悶々としている時、ふと思いついた言葉。

「定年を迎えた時、『やっと終わった…』と思うのか、「やり切った!」と思うのか。」

この違いはとてつもなく大きい気がして、同時に自分は後者でありたいと思いました。

一度しかない人生、あの時やっておけば…と後悔するのは嫌ですよね。

いつも悩んで行動が遅いので、ここは勇気を出して、フィヨルドブートキャンプに入会することにしました!

目標

フィヨルドブートキャンプは卒業までにはおおよそ1,000時間はかかるそうです。(自分は未経験なのでもう少しかかるかも…)

年度内に卒業して転職を目指そうとしましたが、仕事も家庭もある中で今年度末までに1,000時間こなすのはほぼ無理な感じ。

しかもコロナ禍の中では転職活動も不安だし、ここは腰を据えてじっくり取り組んで、来年度中に卒業を目指してやっていこうと思います。