未経験からフィヨルドブートキャンプ(以下FBC)で勉強して、1年1ヶ月が経ちました。
今月も振り返りを書いていきます!卒業が見えてきたので、振り返りを書くのはこれで最後(にしたい)です😅
4月の過ごし方
自作サービスを集中して進めつつ、気候が良かったので、息抜きに外で遊んでいることが多かったです。
4月中旬には、江ノ島に日帰りで行ってきました!新江ノ島水族館で、カピパラがお風呂に入っていたのが可愛かったです🥰
勉強の状況
4/4~5/3で修了したプラクティスは2つだけです。
1ヶ月間で修了したプラクティス一覧
開発に参加して PR を送りマージする
CI
自作サービスは、「Webサービスを作る」という大きな1つのプラクティスになっているため、修了はしていませんが、作業としては結構進みました。
作業が残っているプラクティスは「Webサービスを作る」「デザインレビュー」「コードレビュー」「リリース」のあと4つです。
勉強時間
学習時間は13ヶ月間(396日)累計で2451時間でした。
4月後半からは就職活動を並行して行うことにし、書類の作成を進めました。
FBCのホームページに書いてある目安時間(1200時間)の倍以上かかっていますが、もう一息頑張ります!
自作サービスの進捗
「山手線を徒歩で一周する人のための記録アプリ」を作っています。
今月取り組んだこととしては、以下の通りです。
履歴一覧機能→履歴編集機能→公開機能→メモ追加用モーダル→ヘルプのモーダル→ハンバーガーメニュー→利用規約・プライバシーポリシー作成→バグ修正
地図の表示や到着などの基本的な機能が動作するようになりました。現在はデザインを入れたりテストを書いたりなど、細かい部分の実装を進めています。
全ての機能が出来たら、FBCのメンターさんにコードレビュー・デザインレビューをお願いします。レビュー対応が終わり次第、6月上旬のリリースを目指しています。
できるようになったこと
カスタムバリデーションを実装できるようになった
到着機能の実装で、「駅の数以上に到着できない」「前後の記録と齟齬がある到着時刻を設定できない」など、色々なバリデーションを設定する必要がありました。
特に難しかったのが、「隣の駅以外の到着できないようにする」バリデーションです。内回りモード・外回りモードそれぞれに対応する必要があり、かつ駅の登録順に依存しないようにする必要がありました。紙に書き出してロジックを考えてから実装することで、要件を満たすバリデーションを設定することができました。考えた時のメモ
Stationsテーブルに「外回り時の次の駅id」のカラムを持たせ、内回り・外回りで条件分岐させることで、登録順に依存せずかつバリデーションも設定することができました。
Hotwireを使用して簡単な機能を作れるようになった
自作サービスでは、ダッシュボード画面と到着一覧・編集画面にHotwireを使用しています。 使っている箇所は以下の通りです。- Turbo Drive:基本的な画面遷移
- Turbo Frames:編集フォームの表示
- Turbo Streams:編集後の更新処理
- Stimulus:地図の表示・線の描画、モーダル・ハンバーガーメニューなど(tailwindcss-stimulus-componentsを使用)
Hotwireを扱うのは初めてでしたが、「猫でもわかるHotwire」や「パーフェクトRuby on Rails」を読み、基本的な実装方法を理解しました。一度やり方がわかると、JavaScriptをほとんど書かず、素早く実装できることに感動しました✨
RSpecで簡単なモデルテスト・システムテストが書けるようになった
モデルとシステムテストの追加が概ね終わりました。ある程度実装が進んでから一気にテストを書いたら、量が多く大変だったので、その後は機能を作ると同時にテストを書くようにしています。
今後は、Helperのテスト追加とリファクタリングをする予定です。特に、一部のテストでは「内回りモード」「外回りモード」の2つが存在するため、shared_examples
やshared_context
を使用して、もう少しDRYになるようリファクタリングしたいです。
苦労したこと
CIだけで落ちるシステムテストの修正に苦戦
ローカルでは全て成功しているシステムテストが、一つだけCIで落ちるようになり、何時間も詰まりました。エラー文を見ると、Capybaraのclick_on
で要素が見つからないのが原因でしたが、特に怪しい部分もなかったため、手がかりがなく非常に困りました😭
FBCの先輩に「何かしらのキャッシュが関係しているかも」とアドバイスいただき、一度全てのキャッシュ・失敗した履歴を削除して再度実行したら、解決することができました。ローカルで再現しない不具合の原因を特定することの、難しさを感じました。リファクタリングの終わりが見えない
「とりあえず動くようになる」ことと、「ユーザが使っても問題なく動くようにする」ことの間が、思った以上に長いです😅
自分なりに工夫してコードを書いたつもりでも、余分なクエリが発行されていたり、特定の状況下のみバグが起きたり、想定しない不具合がたくさん起きました。
現在リファクタリングを進めていますが、全てのコードに自信を持てている状態には程遠いです。納得のいく状態に近づくよう、気になったことは部分はメモして、定期的にリファクタリングしたいです。デザイン関係で考慮すべきことが多い
全てのページにデザインを入れるはもちろんですが、レスポンシブ対応・titleタグやmeta descriptionの設定・OGPやFaviconの設定など、使い勝手の良いアプリにするためにやるべきことが沢山ありました。
デザインの重要性はわかっているので、ストレスなく使えるものにしたいです。ただ、凝りすぎると一生リリースできないので、どこまでこだわるかが悩ましいです🤔
イベント参加など
RubyKaigi 2024事前勉強会に参加
申込時に補欠でしたが、当日数時間前に繰り上がって参加できました。 Ruby Kaigiの話を理解するため、議題となる内容の背景知識を解説してくださっていたのがありがたかったです。JITコンパイラやパーサー改善など、初心者向けの解説でも私にとっては難しかったですが、何を勉強すればわかるようになるのかがわかりました。( 雑談で「Rubyのしくみ」という本の存在も知りました)
懇親会では有名なRubyistの方や、同じ元教員のエンジニアさんとお話しでき、勉強のモチベーションが上がりました✨Urawa.rb #4を主催
今回は初参加の方が多く、まだ見ぬ世界を教えてもらう素敵な時間になりました。
活動報告→Urawa.rb #4 活動報告 | Notion
新しく購入した「Linuxコマンドかるた」が盛り上がり、詳しい方に解説をしてもらって勉強になりました。今は結構忘れてしまったので、毎月やって定着させたいと思います😅
参加者の方に、「Urawa.rbの参加者は穏やかでいい人しかいない」と言っていただき、本当にその通りだなと感謝しています🙇♀️
今の気持ち
自作サービスの追い込みや就職活動の準備・プライベートでは引越しが重なり、4~5月はバタバタしています💦 色々と不安になることも多いですが、FBC生やメンターさんとの雑談にかなり支えられています!
卒業直前に改めてFBCの良さを感じているので、幸せに働くエンジニアになって恩を返せるよう頑張ります💪
5月の目標
- 自作サービスのデザインレビュー・コードレビューを提出する。
- 就職活動を後悔がないよう頑張る。
- RubyKaigi 2024を楽しむ。