Backend Developerロードマップと共にITエンジニア１年目を振り返ってみる

# はじめに
こんにちは。TuneCoreJapanでBackend エンジニアをしています [@masafumi330](https://twitter.com/masafumi330) です。
この記事は[Wano Group Advent Calendar2022](https://qiita.com/advent-calendar/2022/wano-group) 12日目の記事です。
今年１月に転職してきましたので、その一年間の振り返りも兼ねて記事を書こうと思います。

# Backend Developer ロードマップとは
Twitter等で見たことがある方もいると思いますが、Backend Developer ロードマップとは、[@kamranahmedse](https://twitter.com/kamranahmedse)氏が公開している、エンジニアのスキルアップの道筋の概略図です。

Backendの他にも、
- Frontend
- DevOps
- GoやJavaなど言語ごと
など各ロール、スキルのロードマップがまとめられており、エンジニアとしてスキルアップをしていく中の一つの道標となりうる素晴らしい資料だと思います。

https://roadmap.sh/backend

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651150/6d426228-d304-0be8-10d5-8a5faa27ba58.png)

# 一年を振り返って
ITエンジニアとして初めて転職してきて、一年間で様々なタスクをこなし、自分自身確実に一年前の自分とは出来ること・知っていることの量が増えたと思います。

ブランチの切り方、マージをミスって大量のコンフリクトに苦しんだり。
"API"の叩き方も分からない状態から、外部のAPIを叩いてToken取得から実際にデータを取得したり。
HTTPのステータスコードを一つ一つ理解しながら、実際に自分でAPIを作るようになったり。

今回は、Backend Developerロードマップに沿って、一年間でどんなことをやってきたかを振り返りたいと思います。

# 習得技術のチェック

まずは、今年一年で経験・習得した技術に赤マルでチェックしていきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651150/ee239581-f6b3-28c7-99aa-3c65c3991074.png)

まだまだ穴だらけですが...メイントピックごとに振り返っていきます。


## インターネット基礎周り

- HTTP
まずは、やはりWebサービスを開発している会社として避けては通れないInternet周りの基礎に関しては、大方理解することができたかと思います。
特に、 __HTTP__ については、[Real World HTTP](https://www.amazon.co.jp/Real-World-HTTP-%E7%AC%AC2%E7%89%88-%E2%80%95%E6%AD%B4%E5%8F%B2%E3%81%A8%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AB%E5%AD%A6%E3%81%B6%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%8D%E3%83%83%E3%83%88%E3%81%A8%E3%82%A6%E3%82%A7%E3%83%96%E6%8A%80%E8%A1%93/dp/4873119030/ref=sr_1_1?adgrpid=127216150926&gclid=Cj0KCQiAsoycBhC6ARIsAPPbeLs2C0hV24c9qTApSs1nh4h3euid8XMvWTPJk0zBJGE5s8IQ2FCwSs8aAs3FEALw_wcB&hvadid=618680535065&hvdev=c&hvlocphy=1009333&hvnetw=g&hvqmt=e&hvrand=15969900601828565309&hvtargid=kwd-316275436558&hydadcr=27268_14598057&jp-ad-ap=0&keywords=real+world+http&qid=1669543051&qu=eyJxc2MiOiIwLjk4IiwicXNhIjoiMC4zNSIsInFzcCI6IjAuMzcifQ%3D%3D&s=books&sr=1-1)を読み、理解を深めました。
このHTTPの理解は、後述するAPIの理解について大いに寄与しました。RequestのBody, HeadやResponseの形などはこの本で丁寧に解説してくれていました。


- HTML
SSRページのフロントについてはFEチームではなくBEチームでHTMLを書いてページを作ることが多かったので、HTMLを書く機会は多かったと思います。

- CSS, JavaScript
この二つに関しては、ゴリゴリに書く機会は無かったように思います。
デザインのベースは、サービス自体もう既にできていますし、既存のコードを参考に実装するケースが多く、シンプルな実装が多かったです。
JavaScriptもそこまで複雑な処理は書きませんでした。
ただ、ここもっと上手く書いていい感じにしたいな...と思う場面はあったので、JSの知識はもっと習得したいなと思っています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651150/44800395-472e-5ba2-09e3-66739bbf2646.png)

https://www.amazon.co.jp/Real-World-HTTP-%E7%AC%AC2%E7%89%88-%E2%80%95%E6%AD%B4%E5%8F%B2%E3%81%A8%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AB%E5%AD%A6%E3%81%B6%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%8D%E3%83%83%E3%83%88%E3%81%A8%E3%82%A6%E3%82%A7%E3%83%96%E6%8A%80%E8%A1%93/dp/4873119030/ref=sr_1_1?adgrpid=127216150926&gclid=Cj0KCQiAsoycBhC6ARIsAPPbeLs2C0hV24c9qTApSs1nh4h3euid8XMvWTPJk0zBJGE5s8IQ2FCwSs8aAs3FEALw_wcB&hvadid=618680535065&hvdev=c&hvlocphy=1009333&hvnetw=g&hvqmt=e&hvrand=15969900601828565309&hvtargid=kwd-316275436558&hydadcr=27268_14598057&jp-ad-ap=0&keywords=real+world+http&qid=1669543051&qu=eyJxc2MiOiIwLjk4IiwicXNhIjoiMC4zNSIsInFzcCI6IjAuMzcifQ%3D%3D&s=books&sr=1-1



## コンピュータサイエンス周り
- ターミナルの使い方、基本コマンド
grep, tail, head, ssh, curlなどは実務でも使用頻度が特に高いコマンドでした。
grepコマンドに関しては、パイプやcutも駆使してもっと上手く使いたいのですが。まだ習得中です。

- プロセス、スレッド、POSIX
この辺りは大事な部分ですが、まだ理解が不十分なところかなと思います。
__ps__ コマンドを使って、所望のプログラムが動いているか？とかは最近見るようになってきています。
せっかくGoを使っているんだから、プロセスやスレッドを理解して並列処理などにもトライしてみたいです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651150/84e7562e-b29f-0d7f-6794-bf3f38f4f54c.png)


## 言語

TuneCoreJapanのBEの言語としてはPerl, Goを採用しています。
普段の開発・新規の開発の大半はGoで行っています。
どちらも私は、今年からキャッチアップを始めた言語です

- Perl
まずはPerlのキャッチアップから始めました。
実務の中でプロダクトコードに多数触れ、慣れていった部分が多いですが、最初のキャッチアップとしては以下の本でinputを進めていきました。

https://www.amazon.co.jp/%E5%88%9D%E3%82%81%E3%81%A6%E3%81%AEPerl-%E7%AC%AC7%E7%89%88-Randal-L-Schwartz/dp/4873118247/ref=sr_1_2?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=2QBCN68QSQODQ&keywords=perl&qid=1669546666&qu=eyJxc2MiOiI0Ljg0IiwicXNhIjoiNC4xMiIsInFzcCI6IjQuMDMifQ%3D%3D&s=books&sprefix=perl%2Cstripbooks%2C189&sr=1-2

- Go
公式の A Tour of Go を使ってキャッチアップを進めました。
VSCodeでコードを書いていますが、Goは文法とかミスっていたらコンパイルエラーしてくれたり、ミス部分をハイライトしてくれるので開発がとてもやりやすく、個人的にはGoの方が好きです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651150/ff1d6bcd-0049-0884-e4da-a2123ea909d7.png)


## Git

ブランチの切り方、マージ順について苦戦するタイミングがありました。
チーム開発となれば多数のブランチを切って開発していくことになると思いますが、ブランチの切り方、開発の順序をミスり、コンフリクトに苦しむ。結果、実装に手間取るということが起きました。
この辺りは実務の中でしか経験できないと思いますが、一個一個のコマンドで何をしているのか、Gitの扱いをもっと成熟していきたいところです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651150/77237d65-a747-a84c-306c-d09f7780467d.png)



## データベース
基本的なクエリ(SELECT, UPDATE, INSERT, DELETE)のSQLは習得することができました。また、後半ではJOINやサブクエリも駆使してSQLを組み立てられるレベルにはなりました。
ACID特性、データベース設計、クエリチューニングなどさらに応用を鍛えていきたいと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651150/51df34d3-3341-12fa-2129-be3ec9c5db07.png)

## API
外部APIを使った開発、そしてGoで実際にAPIを作る業務をこなし、その中でAPIのキャッチアップも進められました。
API自体触れたことがなかったので、知識０からのスタートでしたが、以下の本を読み進めたり、実際にコードも触りながら理解を進められたので良い経験だったと思います。
また、中規模プロジェクトでは　Go用いてAPIを開発しているため、さらに深く理解を進められていると思います。

https://www.amazon.co.jp/OAuth%E5%BE%B9%E5%BA%95%E5%85%A5%E9%96%80-%E3%82%BB%E3%82%AD%E3%83%A5%E3%82%A2%E3%81%AA%E8%AA%8D%E5%8F%AF%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%92%E9%81%A9%E7%94%A8%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AE%E5%8E%9F%E5%89%87%E3%81%A8%E5%AE%9F%E8%B7%B5-Justin-Riche-ebook/dp/B07L5M7DXS/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=33LPGO2TPWXXW&keywords=oauth&qid=1669550520&qu=eyJxc2MiOiIzLjM4IiwicXNhIjoiMi45MCIsInFzcCI6IjIuNDkifQ%3D%3D&s=books&sprefix=oauth%2Cstripbooks%2C231&sr=1-1

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651150/d773bd1a-107f-87c8-aae8-b8fb1492be8d.png)


## 設計思想

来年の目標として、TDD, DDD、この二つを完璧に理解し、開発に活用していきたいと思う一年でした。
途中までテストコード自体を毛嫌いしてしまい、手をつけていなかったのですが、実際に書いてみるとそこまで難しいことはなく、なぜ今まで書かなかったのかと反省しました。
世の中の記事で、「TDDに則った開発により開発効率が上がった」と多くの情報もあることから、メリットがあるのは確実だと思います。
TDDには特に強い興味がありますので、開発チーム内でTDDの勉強会を開いたり、布教して回る役割も今後になっていきたいと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/651150/dd56684f-56bb-581a-d1c8-d7a5765c7910.png)



# 最後に

振り返ってみると確かに、ロードマップの上から順に各分野のInputができてると思いました。
実際、ロードマップ下部のデータベース、セキュリティ、キャッシュ、テスト、CI/CD、Web Serversなどはまだほとんど習得できていないですし。

まだまだ穴だらけですが、引き続き技術の習得をしていきたいと思います。