kent備忘ログ

お仕事と趣味生活と

3月の振り返り(学習振り返りから、エンジニアとして働くことになった話)

RailstwitterのようなSNSアプリ制作を月の頭に終えた後、自社開発企業様でエンジニアとして働かせていただくことになりました!

3月上旬

先月に続き新たに別のユーザが自分のツイートに対しコメント・リツイート・いいねをした際に通知が行われる通知機能を実装しました。

この機能の実装にはモデルのポリモーフィックという性質がドンピシャにハマりました。ツイートの子モデルであるコメント・リツイート・いいねに対し他ユーザのアクションがあった際、3つのモデル別にアクションしたユーザとログインユーザを紐付けたレコードを作成します。

notification.rb

  class Notification < ApplicationRecord
    belongs_to :category, polymorphic: true

    enum action: { like: 0, retweet: 1, comment: 2 }
    scope :sorted, -> { order(created_at: :desc) }
  end

like.rb

  # モデルの中にメソッドとして実装
  def like_notification
    Notification.create!(category: self, user_id: tweet.user_id, action: Notification.actions[:like])
  end

あとはコメント・リツイート・いいねのアクションの中に上記メソッドの実装と、ビュー上に通知内容を表示する画面を実装すれば通知機能の完成です。


続いて、ロードマップの次のセクションに取り掛かろうとした際に、ゆうだいさんからお声掛けを頂く事になります。

HappinessChainに去年入会し、ロードマップも途中で、まだまだ転職活動も先の話だと思い込んでいた私には、まさに突然の出来事でした!勿論、自社開発企業に未経験転職を目指していた私は、二つ返事ですぐに紹介頂いた企業の社長様と面談する事になりました!

面談の中でも、今までどのような仕事をして来たのか、プログラミングの学習はどのように行なってきたのか等を聞かれましたが、
36歳の私自身が一番コンプレックスに感じていた、年齢の事に関しては何も聞かれることはありませんでした。

結果としてはその場でいつから入社して仕事出来るか聞かれ、こちらから後日正式な入社日を伝える形で面談を終えました!

5月より入社意向の旨を伝えました。今までとは全く違う環境下での実務になりますが、貪欲に業務内容と知識を吸収し、実りある実務経験を積みたいです!

3月中旬

引き続き、入社まで時間があるのでロードマップの課題に取り組みます。Rails課題の次は自動テストの課題に取り組みました。 今回の自動テストではライブラリとしてRspec, Capybara, FactoryBotを使用したテストになります。

テストにはモデルに保存されるレコードが正しく検証されているかのモデルスペック
アクションが正しく実行されるかのリクエストスペック(コントローラスペック)
Capybaraを使用したユーザが実行するであろう動作を検証するシステムスペック

モデルスペック(user_spec.rb)

  # ユーザモデルのテスト
  it '名前がなければ無効な状態であること' do
    user = FactoryBot.build(:user, name: nil)
    user.valid?
    expect(user.errors[:name]).to include('を入力してください')
  end

リクエストスペック(users_spec.rb)

 # ユーザのコントローラのアクションテスト
  describe 'ユーザ一覧' do
    it 'ユーザ一覧ページへの遷移が成功すること' do
      get users_path
      expect(response).to have_http_status(:success)
    end
  end

システムスペック(user_spec.rb)

# Capybaraを使用
  context 'when user login' do
    before do
      visit root_path
      click_link 'ログイン'
      fill_in 'Eメール', with: user.email
      fill_in 'パスワード', with: user.password
      click_button 'ログイン'
    end

    it 'ユーザログイン成功' do
      expect(page).to have_current_path root_path, ignore_query: true
    end
  end

モデルスペックとリクエストスペックがそれぞれモデルとコントローラのテストであるのに対し、システムスペックはユーザが起こすであろう動作を想定してテストするため、記述方法もCapibaraを使用する為独特になります。

実際にの課題アプリ上ではdeviseの動作との兼ね合いもあり、また、テスト結果を想定してexpect文を考える必要もある等、多少手こずるところもありましたが、無事全てのテスト結果をグリーンにする事ができ、LGTMを頂けました。

3月下旬

下旬からは次のプログラミング言語であるJavascriptに取り組んでいます。

どうしても今まで学んできたRuby言語との比較になっていましたが、おかげで動画解説の中でこの機能はRubyでいうこの機能と同じものだというようにイメージを掴みやすく学ぶ事ができました。

初めに動画教材を2本視聴しました。基本的なJavascriptの文法から簡単なデモアプリまでの実装を行いました。一方でJavascriptの性質として「暗黙的な型変換」があります。これは初めて知りましたが、第一印象としては厄介な性質を持つものだなと思いました。

現在はJavaScript Primerをインプット教材に学習中です。クラスや関数・thisキーワードや、難しい難しいと言われている非同期処理など、初めて学ぶことも多く、一度に理解するのは到底無理だと承知していますが、少しでも理解を深めようと奮闘中です!