【Ruby Silver】90%で合格しました!

はじめに
現在フィヨルドブートキャンプおよび独学でRubyおよびRailsについて学んでいる。もっと知識を深めたいと思いRuby silverの試験をうけることにし、模擬テストを解いてみるも38点。しかし本番では90点で一発合格できたので勉強法などを記す。
勉強時間においては以下の通り。
- 勉強期間:1か月(Rubyについてはスクールで約半年ほど勉強している)
- 勉強時間:2時間/1日(60時間)
試験概要
- 正式名称:Ruby Association Certified Ruby Programmer Silver Version 3
- 50問出題のうち75%で合格
- 費用:16800円(高いので一発合格しないと出費が...)
- 最大90分(途中退出OK)
具体的な勉強法
- 公式資格教科書であるRuby技術者認定試験合格教本にある演習問題と模擬試験を解く(合計3回ほど)。
- REx - Ruby Examinationを解く(合計13回ほど)。
- Ruby技術者認定試験Silver模擬問題(公式)
→ここからたくさん出たと思う。 - Ruby技術者認定試験Silver旧模擬問題
※ここまで過去問題を解いているとテストの傾向など見えてきます。そして自然とメソッドや動きなど覚えていることが増えています。
※私が受けた回では、RExよりも公式テキストからの出題問題と似たような問題が多く出されていました。
わからない箇所や間違えた問題について
- Ruby技術者認定試験合格教本、ゼロからわかる Ruby 超入門を読む。
- さらに様々なパターンをirbで動かす!(←ここ大事)
- 間違えた問題リストを作り試験までに何度も解く。
試験本番
自信がない箇所およびわからない問題についてはフラッグを立てながら解いたが、なんとわからないが2問、自信がない問題が6問あり焦る。
見直しに関しては、計3回以下に記す。
- 1択か2択か間違えてないかだけ見直し
- 1からすべて見直し(メソッドの破壊的や非破壊的に関しては特に注意して確認)
- フラッグの部分について十分に考えなおす
震えながら終了ボタンを押し、薄目で合否確認すると「合格」と!
30分残し退出(これ以上考えても結果は同じだと判断)。
アドバイス
- 解答だけではなく選択肢一つ一つ、理由が言えるように。言えない問題はしっかり調べる。
- 合格した方達のブログもしっかりチェックしておく。
- 試験前日はしっかり寝ること
- 試験直前は頭を休めること
試験を受けて
- まずはコーディングの知識が深まったので、合否関係なくirbで動かしながらの勉強は楽しく、さらにRubyを好きになった。
- 曖昧だった部分が分かるようになった(classやdef、インスタンス変数やクラス変数)
- 今後転職しエンジニアになり、実務に取り組むようになった際の自分自身の知識の引き出しが増えた
- メソッドを覚えていると、コードを書いているときなどに「あ!こういうメソッドあったな!」などすぐに調べられると感じた
- コーディングの幅が広がったと感じる
終わりに
さらにRubyについて興味がわきました。シンプルだがとても自由度が高く表現力豊かな言語だと感じた。今後Goldにも挑戦していきたいし、Railsについても試験があるようなのでチャレンジしていき、RubyおよびRailsの知識をさらに深めていきたい。
そして夢のエンジニアになるぞ!!!!!!!!!!とさらに気合が入った。
無駄使いをなくしミニマリストを目指す人の為のアプリ、「muda0(むだゼロ)」をリリースしました!
はじめに
お金の無駄使いを減らし、ミニマリストを目指すアプリ「muda0(むだゼロ)」をリリースしました。 物欲を減らす理論に基づき作成し、1ヶ月後に見返し本当に必要であれば購入、1ヶ月後に見返し欲しくないものであれば削除する、という趣旨のアプリです。 muda0(むだゼロ)
自己紹介
現在エンジニアへの転職を決意し学習を継続しているゆりというものです。 私は理学療法士として働いてきましたが、ITの世界に惹かれ、webデザイナーへ転職、コーディングにさらに魅力を感じ極めるためにエンジニアとしての転職を決意。 フィヨルドブートキャンプを受講しRubyを中心に学び、現在も学習を継続中です。
アプリ作成の経緯
私はもう既に持っているものを集めてしまう収集癖がありながらも、ミニマリストになりたいという願望があります。物欲を抑える方法について調べていたところ、どうやら欲しいものを記述し1ヶ月後に見返すと意外ともう欲しくないものもあるとか。そこで、欲しいものを登録し合計金額を出すことで物欲を抑え、さらに1ヶ月後に見直すというアプリがるといいなと思い作成しました。
- 欲しいものの金額を可視化することで物欲を抑える
- 1ヶ月後に見直すことで、それでも欲しいものか判断する
muda0(むだゼロ)について
各ユーザログインし利用可能となります。
ログイン後、欲しいものの画像、値段、カテゴリーを登録することができるシンプルなアプリです。



以下のように合計金額が表示されるようになっています。

欲しいものはカテゴリー別で表示することも可能です。

更新情報に関しては、メールアイコンより確認可能です。

レスポンシブにも対応しています。

使用技術
現在勉強している新しい技術を使用するため以下の技術を選びました。
苦労した点
管理者のみがアクセスできる画面の作成
お知らせ機能を投稿する管理者は私だけであるが、もしこのアプリの管理者を増やしたいと思った場合に複数の管理者を登録することも想定し、実装を考えました。
userにadminのカラムを追加し、trueであれば/adminにアクセスでき、falseであれば/adminの画面はエラーになるという仕様にすることにしました。
【Rails】管理者用画面(お知らせ文編集ページ)を作成 gemなし - U-Yuri’s 備忘録メールの通知マークおよび未読・既読の実装
各ユーザがクリックしたニュースとクリックしていないニュースを判別するコーディングが難しかった。 以下詳細リンク。
【Rails】既読・未読機能を実装する(自作アプリ:mudazero app) - U-Yuri’s 備忘録
最後に
今後もアップデートを助けていきたいと考えています。
具体的な内容は以下になります。
- 身内でシェアできるようにする(プレゼントなどを考える材料に)
- 画像がない場合、デフォルト画像を用意
- 金額が増えるごとにキャラクターの様子が変わっていく
【Rails】既読・未読機能を実装する(自作アプリ:mudazero app)
はじめに
自分で作成しているアプリに、お知らせ機能を追加したが各マイページのお知らせアイコンの横に、未読のものがあればメール画像の上に印(点)をつけ、全て既読しているのであれば印はつけないようにするということをしたい。
※userとnewsについてのモデルは作成済み。
流れ
- clickというモデルを作成、user_idとnews_idを外部キーとする。
- 各ユーザがニュースをクリックしたら、dbに保存される。
- dbがnilだったらdbに保存されて、nilではなかったら保存されない(一番古い情報(クリック時間)のみ保存)。
- nilがあればマイページトップページに印がつき、且つ、各ニュース一覧の該当するnilのnewsに「new」がつく。
db作成
まずはクリックしたかどうかのテーブルを作成する。
①今回はclickというテーブルを作成。
$ rails g model click
② userとnewsを外部キーとして設定
③message_show.html.erbに各newsの内容を表示するファイル作成。
④wants_controller.rbにまだクリックしたことがないnewsをクリックするとdbに時間とnews_idとuser_idが保存されるコード記述。
def message_show @message = News.find(params[:news_id]) already_clicked = Click.find_by(news_id: params[:news_id], user_id: current_user.id) if already_clicked.nil? Click.create!( clicked: params[:created], user_id: current_user.id, news_id: params[:news_id] ) end render "message_show" end
これで何回クリックしても、古い情報のみ保存され、新しい情報は保存されないコード完成。
お知らせ一覧ページ(news一覧)に未読であれば[new]をつける
①wants_controller.rbにクリックの情報がnilかどうか確認のためのインスタンス変数作成。
def message @messages = News.all @already_clicked = Click.find_by(news_id: params[:news_id], user_id: current_user.id) render "message" end
②includeを使ってjoinする(newsのテーブルと、clickのテーブルをつなぐ)
where(clicks: {user_id: [current_user,nil]})でclickテーブルの中の、user_id。arrayで[current_user,nil]で、current_userか(or)nilということになる(全ニュースを表示したいのでこのようにした)
def message @messages = News.includes(:clicks).where(clicks: {user_id: [current_user,nil]}) render "message" end
h1>お知らせ</h1>
<ul>
<% @messages.each do |message| %>
<li>
<% if message.clicks.empty? %>
<small>new</small>
<% end %>
<%= link_to message.title, message_path(message) %>
</li>
<% end %>
</ul>
empty?はarrayの結果が[](空)の場合の判断(nilではない)。
これでnewの表示完了。と思ったが、他のユーザがクリックしたnewsが表示されないエラーあり。
もう一度仕切り直し、message.current_user_clickedというふうにcurrent_user_clickedというメソッドの中にcurrent_userが入れられたらいいなぁ。
ということでcurrent_user_clickedというメソッドを作成する。
①app/models/news.rbを編集しcurrent_user_clicked`というメソッドを作成する。
class News < ApplicationRecord has_many :clicks def current_user_clicked(current_user) Click.find_by(news_id: id, user_id: current_user.id) #current_userはerbから引数として渡さないと使用できないため引数設定 end end
②app/views/wants/message.html.erbも編集。
<h1>お知らせ</h1>
<ul>
<% @messages.each do |message| %>
<li>
<% if message.current_user_clicked(current_user).nil? %>
<small>new</small>
<% end %>
<%= link_to message.title, message_path(message) %>
</li>
<% end %>
</ul>
これでcurrent_userが読んでいないニュースに関してはnewマークがつくようになった。

トップページのメールアイコンの未読通知印の実装
前回作成したnews.rb内のメソッドを今回も使用。 ①erbの編集
<header>
<div><h1><span class="logo-jp">むだゼロ</span><br>muda0</h1></div>
<div class="flex_menu">
<div class="layer">
<%= link_to(messages_path) do %>
<%= image_tag 'mailicon.png' %>
<% @messages.each do |message|%>
<% if message.current_user_clicked(current_user).nil? %>
<p>●</p>
<% end %>
<% end %>
<% end %>
</div>
<div><%= link_to "欲しいものを登録", wants_new_path, class: "new_button" %></div>
<div><%= link_to "ログアウト", destroy_user_session_path, method: :delete %></div>
</div>
</header>
②wants/controllerは@messages = News.allのみ記述。

【Rails】管理者用画面(お知らせ文編集ページ)を作成 gemなし
はじめに
自身で作成した'mudazero'アプリに、アップデート情報などを通知するお知らせ機能を追加したいので、管理者だけがお知らせを作成できる機能を実装したい。
大まかな流れ
- Userがadminかどうか判断
- adminであればお知らせ作成画面を表示することができる。そうでなければエラーになる。
- お知らせ作成画面は新たに作成。
- お知らせ文の格納用dbも作成。
- 各ユーザにお知らせを見せる箇所の作成
手順
① Userテーブルにadmin(管理者)テーブルを追加する(以下の記事参照)。
【Rails】テーブルの追加(sqlite3) - U-Yuri’s 備忘録
rails cから管理者を設定(adminの列にtrueを入れる)。
railsからSQLiteに入れる方法。
irb(main):004> yuri = User.find(2) #管理者にしたい人の情報を変数に入れる。 irb(main):006> yuri.admin = true #adminをtrueにする。(この時点ではまだdbに保存されていないrailsのみ変更された) irb(main):008> yuri.save #これでdbに保存される
管理者が複数人いる場合や、途中で管理者から外したい場合もこの方法で行う。
②viewの中にadminフォルダを作成し、その中にadmin.html.erbを作成。
③% rails g controller adminでコントローラーファイルを作成。
④管理者(admin=true)の人だけが見れるよう、app/controllers/admin_controller.rbを編集。
class AdminController < ApplicationController def admin if current_user.admin == true render "admin" else render file: "#{Rails.root}/public/404.html", status: 404 end end end
⑤お知らせメッセージ(タイトル、メッセージ)のdb作成
$ rails g model news title:string message:text
⑥マイグレーションファイル作成
$ rails db:migrate
あとはdbの各機能の実装。
【Rails】よくやってしまうミス
==を=にしがち!!!!!
if current_user.admin == true
【Rails】ステータスコードを返す(401を返したい)
renderメソッドのstatusというオプションを使用。
render status: 401
今回の実装
class AdminController < ApplicationController def admin if current_user.admin = true render "admin" else render file: "#{Rails.root}/public/404.html", status: 401 end end end
【Rails】テーブルの追加(sqlite3)
はじめに
管理者画面を作成するために、Userテーブルにadminの列を追加したい。
テーブルの追加手順
変更するためのファイルを新しく作成し変更していく形になる。
1. $ rails g migration クラス名 カラム名:データ型でカラム追加や削除のためのファイルを作成する。
今回はカラムを追加したいので
% rails generate migration AddAdminToUsers admin:booleanを実行。
20240429044742_add_admin_to_usersというファイルが作成される。
boolean = true or faluse の結果が入る時に使用する。% rails db:migrateでschema.rbに反映される。
create_table "users", force: :cascade do |t|
t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.string "name"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.boolean "admin"
t.index ["email"], name: "index_users_on_email", unique: true
t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true