【Rails】新卒エンジニアが新規開発で得た学び

この記事は シーエー・アドバンス Advent Calendar 2020 15日目の記事です
# はじめに
こんにちは！新卒エンジニアの@ken_2です。
新人研修として「来客受付アプリ」を新規開発したので、そこで得た学びをざっくりと4つの章に分けて紹介します。
過去の僕のような新人さんの参考になりますと幸いです。

### 対象者
- Web開発を勉強中で実務未経験の人
- 新人エンジニア 

### 開発環境
Docker, Rails, Bulma, MySQL

# 第1章　先輩より、開発のお作法を継承
入社当初、開発の右も左も分からない僕は先輩エンジニアの方々より「開発のお作法」を教えて頂きました🙇‍♂️
まずはGit[^1-0]です！リモートリポジトリにコードを上げたことはあったのですが、実務で使えるレベルではありませんでした。
「Branch, Staging, Commitの適切な行い方[^1-1]」や「良いプルリクの出し方[^1-2] [^1-9]」、他にも「Gitでコメントやプルリクがあった際にSlack通知する方法[^1-3]」などを教わりました。
次にlintを教わりました！今では欠かせないツールです。
これは、CLI上やテキストエディタの拡張機能として動作してコードを整形するものです。僕が使用したのは、Rubyを整形するRuboCop[^1-4] [^1-5]、HTMLやCSSを整形するBeautify[^1-6]というツールです。
他には、環境変数を扱う「direnv[^1-7] [^1-8]」というツールも欠かせません！APIキーなどの秘匿情報をGitHubなどにPushするのは厳禁なので、ローカルでのみ扱えるようにします。


# 第2章　"仕事の進め方"を磨いていく
開発のお作法を継承したのでどんどんプロジェクトを進めてまいります。しかし、開発以外にもミーティングや資料作成を上手く行う事、適切に報告や質問する事も重要です！
実際に起こった問題として、「チャットコミュニケーションに慣れていないが為に遠慮してしまい、報告や相談のタイミングが遅くなる」という自体が発生しました。
そこで「分報[^2-1]」を行なってみました。これを用いて報告や相談の回数が増えた為、先輩に問題点を早く指摘していただけるようになり、手戻りが減りました！🙌

他にも、「同時編集出来るツール(GoogleDocs等)で議事録を取りそれを先輩にリアルタイムレビューしていただくことで、ミーティングにおける誤解を防いだり議事録のとり方を向上させる」や「開発にのめり込んで他タスクをスルーしないようにリマインダーを設定する」など、ツールやテクニックを試しながら仕事を行いました。色々試してみて、自分に合うものを残していきましょう！👍

心構えの面では、「HRT[^2-2]」というものを学びました。この学びを元に、チャットコミュニケーションにおける感情の誤読を減らすよう心がけたり、エンジニアとして理想的な振る舞いを気にかけたりしました。


# 第3章　Railsでの躓き
開発を着々と進めて行き、来客受付アプリとしての大枠が出来上がって来た時期です。
これまでの開発を振り返って、個人的にRailsで躓いた所を箇条書きにしてみました〜。

- Railsの命名規則に従う
  - 多対多リレーションのオブジェクトを呼び出す際、複数形にする箇所に注意[^3-1]
     - 例えば「@author.books.create(published_at: Time.now)」のbooksの部分
- SQLを書こうとする前にActiveRecordを調べよ
  - where[^3-2]やempty?[^3-3]の処理を自前で実装しようとしていた時があった orz
  - to_sql[^3-4]文を用いて「ActiveRecordでどんなSQLが発行されるか」を確認することも大事
- ActionViewのキーワード引数を上手く扱えない[^3-5]
  - 特に第3, 第4引数がキーワード引数の場合
- クラスメソッドとインスタンスメソッドの使い分け[^3-6]
- 非同期処理を扱う際のController[^3-7]


# 第4章　ついにリリース
さて、リリース日が迫ってきました。ユーザーレビューで挙がった箇所を修正しつつ、着々と進めて行きましょう。。。
ここでイベントが発生！「コロナの影響でアプリのニーズが高まったので、2週間ほどリリース日を前倒し出来ないか😣 」との連絡が。
僕としては「ユーザーが困っているならなるべく早くリリースしたい」という思いがありましたが、今の実力では現実的ではありませんでした。
しかし、ここで先輩方が助けに入ってくださりました！🙇‍♂️
そのおかげで、タスクの組み直しや運用フロー策定、デプロイまで一気に進み、早くユーザーに届けることが出来ました。本当にありがとうございました！
（実際にユーザーさんから「アプリ良かった！」との声を聞けたときはとても嬉しかったです！🙌 ）

ついにリリースを迎えることが出来ました！やったね！。。。
しかし、アプリはリリースして終わりではありませんね！
これからもアプリがより良く末永く使ってもらえるように、手塩にかけて育てていきます！

# おわりに
アプリ開発の「企画〜開発〜運用」まで任せていただき、とても貴重な機会でした。
これまでつらつらと書きましたが、新規開発のアプリをリリースまで持っていけたのは周囲の方々の助けがあったからです。
これからエンジニアとして力を付けても謙虚な姿勢を忘れずに、また自分が先輩から貰った恩を次は後輩に返してあげられたらなと思います。
最後まで読んでいただきありがとうございました！

### 参考サイト
[^1-0]: [【読むだけ】Gitとは？仕組みを初心者にもわかりやすく解説【図解】 \| キツネの惑星](https://kitsune.blog/git-summary)
[^1-1]: [【Git】基本コマンド \- Qiita](https://qiita.com/konweb/items/621722f67fdd8f86a017)
[^1-2]: [初めてコードレビューされる人のためのpull requestとcommitの作り方 \- Qiita](https://qiita.com/reikubonaga/items/e3b3b19c14d4ef4efb95)
[^1-3]: [SlackとGitHubを連携してissueコメントやプルリク通知をチャンネルに流す方法（2020年版） \- Qiita](https://qiita.com/unsoluble_sugar/items/e42ac352400598a24915)
[^1-4]: [Rubocop 静的コード解析ツール \- Qiita](https://qiita.com/toshinari_ishii/items/2559bcfb57525411ce94)
[^1-5]: [悪しきRailsプロジェクトの特徴 \- Qiita](https://qiita.com/yuyasat/items/0157c6627093f68c2418#1-rubocop%E3%82%92%E5%B0%8E%E5%85%A5%E3%81%97%E3%81%A6%E3%81%84%E3%81%AA%E3%81%84)
[^1-6]: [Beautify\-VisualStudioマーケットプレイス](https://marketplace.visualstudio.com/items?itemName=HookyQR.beautify)
[^1-7]: [direnvを使おう \- Qiita](https://qiita.com/kompiro/items/5fc46089247a56243a62)
[^1-8]: [direnvを使うときは環境変数を.envrcに書くより.envに書いた方が使い勝手が良い](https://blog.p1ass.com/posts/direnv-dotenv/)
[^1-9]: [巨大 Pull Requestを避けるための9つのポイント \- Qiita](https://qiita.com/reikubonaga/items/ac123bed89cf2b55a510)
[^2-1]: [分報で各自の作業を可視化したら、メンバー間の協力が加速された話 \- Qiita](https://qiita.com/kojimadev/items/ea8825dec1b0d0d2874c)
[^2-2]: [『Team Geek』読んだ ~HRT\(謙虚/尊敬/信頼\)の精神を知り会社でサバイブしていく方法~ \- Hack Your Design\!](https://blog.toshimaru.net/team-geek/)
[^3-1]: [Active Record の関連付け \- Railsガイド](https://railsguides.jp/association_basics.html#code_container)
[^3-2]: [【Rails】find・find\_by・whereについてまとめてみた \- Qiita](https://qiita.com/nakayuu07/items/3d5e2f8784b6f18186f2)
[^3-3]: [Rails における nil?, empty?, blank?, present? の使い分けとBetter Practice \- Qiita](https://qiita.com/aeroastro/items/b58228decb7094af7594)
[^3-4]: [to\_sql \| Railsドキュメント](https://railsdoc.com/page/to_sql)
[^3-5]: [Railsフレームワークで多用される「options = \{\} 」引数は軽々しく真似しない方がいいという話｜TechRacho（テックラッチョ）〜エンジニアの「？」を「！」に〜｜BPS株式会社](https://techracho.bpsinc.jp/hachi8833/2017_03_22/37313)
[^3-6]: [Rubyのクラスメソッドとインスタンスメソッドの例 \- Qiita](https://qiita.com/tbpgr/items/56eb65c0ea5882abbb07)
[^3-7]: [Railsでajaxを実装する。基本の構造から、controller・jbuilderの書き方など。\[Rails\] \- Qiita](https://qiita.com/tanutanu/items/239abfe88bbbeec772bf)