自社開発の実務6ヶ月で行ったタスクと感じたこと

## はじめに
半分未経験から自社開発（社員30人程度）に転職して、早くも6ヶ月が経ちました。
この間にどのようなタスクを担当し、何を感じたのかを共有したいと思います。
業務ではRails、React、Pythonを使用しています。


## タスク内容
環境構築を終えた後、すぐにエラー対応のタスクを任されました。

### エラー対応
初めは簡単なエラーから対応しました。これによって、コードに慣れ、会社のGitの流れを理解することができました。

特に記憶に残っているエラー対応のタスクは以下の2つです。

- 1つ目:RailsのJob周り

「Jobって何？」という感じで、Railsについてはかなり学んでいたものの、Jobは初めての経験でした。エラーが発生していたJobファイルはコードが長く、さらに外部APIの挙動を理解するのに時間がかかりました。

- 2つ目:ReactのDate周り

私たちのサービスは海外にも提供しており、表示時刻を各国のローカル時間に合わせる必要があります。この表示時刻に関するエラーでしたが、原因はライブラリの使い方の誤りでした。最初は軽微なエラーと思いましたが、再調査を進めるうちにかなり深刻な問題であることが明らかになり、修正箇所も多く大変でした。

- 気づいたこと
1. ライブラリを使用する際は、ドキュメントをしっかりと読む必要がある。
2. 表示時刻が国によって異なる場合は、テストを書くか動作確認を徹底すること（テストがより安全です）。

### APIをサービスに繋ぐタスク
1～2ヶ月後、エラー対応と並行して、いくつかのプロジェクトに参加しました。その中で主なタスクは、社内で開発したAPIと外部APIを自社サービスに統合することでした。APIのドキュメントを読み、要件に合わせて実装するのが主な内容でした。

しかし、APIを利用した機能の構造を理解するのに苦労しました。サービス側からAPIにリクエストを送り、API側で処理を行うものでしたが、これが時間がかかるため、リクエストを受け取ったことだけを返し、処理完了後には結果をサービス側のエンドポイントに送るという実装でした。このような仕組みは、私が知っていたAPIの動きと異なっており、実装方法について何度も先輩に相談しながら進めました。

レスポンスのエラーハンドリングに関しても、コードレビューで多くの指摘を受けました。APIのテスト方法も、最初は理解が難しかったですが、stubを使用する方法を先輩から学び、実務で学ぶべきことが多いことを実感しました。
※　おかげさまでPostmanの使い方に慣れることができました。（笑）

### APIとインフラ
APIの統合作業に慣れた後、次のタスクは、社内で開発したAPIのインフラを構築してから結合することでした。APIがすでに作成されていたのですが、インフラ環境が整っていなかったため、報告すると「インフラを自分で触って、作れそうだったらやってみてください」との指示を受けました。そこで、他の社内APIを参考にしつつ、SQSとLambdaを構築し、動作する状態まで持っていくことができました。AWSに関する知識がまだ浅かったですが、非常に学びの多いタスクでした。

### Reactの機能追加
このタスクでは、表示内容の変更に伴い、ビジネスチームとのコミュニケーションが必要でした。UXを考慮した分かりやすいデザインの重要性を感じ、ビジネスチームの要望をコードで表現する難しさを実感しました。

### タスクを任される前のMTGが無くなった！
入社当初はタスクを任される前に先輩からMTGで詳しい説明を受けていましたが、3ヶ月経った頃からは、GitHubのIssueのURLだけが渡されるようになり、自分で実装するスタイルへと変わりました。

### 自分でエラーを見つけ、報告後にissueを書いて実装するようになった。
コードの実装中に、6年前のコードに不具合を見つけ、それを報告し自分で修正するようになりました。初めは何もわからなかった私ですが、少しずつ自力で仕事をこなせるようになり、これが非常に嬉しかったです。複雑なロジックのため、しっかりとテストを書き、これ以上の不具合を防ぐよう努めました。

### Gdrive APIを使ったタスク
このタスクでは、GoogleスプレッドシートのデータをRailsで読み込んで加工し、別のスプレッドシートに保存する作業でした。ビジネスチームの様々な人が情報を入力するため、正規表現を用いるのが非常に大変でした。全てのパターンに合わせる作業、通知のタイミングの決定など、試行錯誤しながら何度も修正を重ねました。また、スプレッドシートの運用方法が頻繁に変わるため、ビジネスチームにコードのロジックを説明し、値が変更された際の連絡ルールも設定しました。非常に学びの多いタスクでした。
ユーザーの入力値は信頼しないというどこかで聞いた名言が本当でしたね、、（笑）


### Next.jsのタスク
Next.jsについては、以前フォリオ作成時に触れた経験があったため、実装自体はできました。しかし、コンポーネントの分離方法などについてコードレビューで多くの指摘を受け、まだ学ぶべき点が多いと感じました。

### アジャイル開発
入社して約3ヶ月後、開発体制がアジャイル開発に移行しました。この新しい体制により、以下のような良い成果を実感しています。

- 作業の優先度を決めてチームで解決する体制により、作業効率が向上しました。
- 毎日、当日のタスクについて開発チームで話し合うことで、要件が明確になります。
- ビジネスチームもエンジニアのタスクが明確に見えるため、フィードバックがしやすくなりました。
- スプリントごとに顧客に価値を提供できることで、モチベーションも上がります。

### Pythonとの縁
データ処理のタスクが増え、新しいプロジェクトでPythonを使うことになりました。Rubyと似ている部分もあり、参考にできるコードも豊富で、徐々に修正や改善を行っています。最近は主にPythonを使っており、新しいプロジェクトでの変化の速さに毎日対応しています。エラーハンドリングや通知のタイミングなど、様々なことを学んでいます。ビジネスチームからの要望も多く、日々密に話し合いながら開発を進めています。

#### Pythonについては素人ですが、、
Python経験はほとんどないですが、現在の会社の主要な課題がPythonで書かれているため、まずはやるべきことを優先して取り組んでいます。Pythonは便利なライブラリが多く、型定義も可能で、非常にモダンな言語だと感じています。


### レビュー
コードレビューがある環境で働くことは、大変勉強になります。最近は自分もレビューをする側になることが多く、レビュアーとしても多くを学び、楽しい経験をしています。最初の1～2ヶ月は、時に間違った箇所を指摘してしまうこともありましたが、最近では先輩が見逃した部分を指摘できるようになり、自分の成長を感じています（まだまだですが）。


## 6ヶ月間感じたこと
毎日が学びの連続で、あっという間に6ヶ月が過ぎました。フロントエンドからインフラまで幅広く経験し、6ヶ月前とは比較にならないほど成長したと感じています。個人開発では、デバッグの速度が以前と比べて格段に向上したことに気づき、これが嬉しく感じます。

入社当初はほぼレベル1〜2だったのが、今はレベル5ぐらいになり、約5倍の成長を遂げたと思います。以前は理解できなかったことが理解できるようになり、それが不思議で楽しいです。このような成長を感じられるのは、今後1〜2年間続くと思いますが、さらに勉強して成長を続けたいと思っています。

#### 結局のところ、態度が大切
結局、エンジニアもサラリーマンとして働いているのは変わりがないので、いい態度でちゃんとコミュニケーションを取るのがとても大事だと思いました。

#### 他の勉強すべきこと
自社の特徴かもしれませんが、ビジネス側と要件定義を見直す機会が多く、自社サービスへの理解やドメイン知識も重要になってきています。コード以外にも勉強するべきことがたくさんあると感じています。

## 終わりに

前職は500人以上が働く現場だったので、役割がはっきりしていましたが、現在の職場は30人程度で、毎日のタスクに変動が多く、多くのことを学ぶ機会があります。
できるだけ6ヶ月間の経験を詳細にまとめましたので、未経験から転職を考えている方にとって、この記事が参考になれば幸いです。

読んでいただき、ありがとうございます。