Web系エンジニア4年目にやったこと

毎年正月に書いていたが書く気をなくしてしまっていた。
思い出しながら書いてみたが、時系列がおかしいかもしれない。

去年のは[こちら](https://qiita.com/yokoto/items/690b9ac009757530121a)。

# 2022年振り返り
## 1月

2021年の12月から業務委託で入った現場のキャッチアップに苦しむ。
コードを書く系のタスクはだいぶ慣れたこともあり問題なかった一方で、
初のマイクロサービス環境だったこともあり、開発兼検証環境の構成の理解に苦労した。

その頃に書いていたQiita記事↓
- [Web3層構造と、Webサーバー・アプリケーションサーバー・Railsの関係 - Qiita](https://qiita.com/yokoto/items/50e1728f3e3d11fd1527)

その他、自分用のまとめ記事をたくさん書いたりしていた。

インフラ理解力向上のために、
[Amazon Web Services 基礎からのネットワーク＆サーバー構築　改訂3版](https://www.amazon.co.jp/Amazon-Web-Services-%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E3%81%AE%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%EF%BC%86%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E6%A7%8B%E7%AF%89-%E6%94%B9%E8%A8%823%E7%89%88-%E5%A4%A7%E6%BE%A4-ebook/dp/B084QQ7TCF)
を読んだ。
薄くてわかりやすくて、インフラを理解する最初の一歩としてとても良い本だったし、また読みたい。

## 2月

副業の方で、Railsアプリケーションのアーキテクチャの議論があった。
結果としてDDDに関心を持つ。

DDDへの関心と照らし合わせ、以前から関心を持っていたRailsのディレクトリ構成の話について、以下を繰り返し読んだり聞いたりした。
- [texta.fm](https://anchor.fm/textafm)
- [Ruby on Railsの正体と向き合い方 - SpeakerDeck](https://speakerdeck.com/yasaichi/what-is-ruby-on-rails-and-how-to-deal-with-it)

その頃の調べものを書いたQiita記事↓
- [Railsのアーキテクチャ(Service/Form/DecoratorやDDD)について考えるための読み物まとめ - Qiita](https://qiita.com/yokoto/items/cd45e7b1d8b11bb9c29a)
- [RailsのクラスとDDD・クリーンアーキテクチャ概念のマッピング - Qiita](https://qiita.com/yokoto/items/796faeda18ea287881cb)

関連して、meetyで相談に乗ってもらってイミュータブルデータモデルやデータモデリングに興味を持ったりした。

イミュータブルデータモデルやデータモデリングについて

- [イミュータブルデータモデル 入門編 - Slideshare](https://www.slideshare.net/kawasima/ss-40471672)
- [イミュータブルデータモデル - Scrapbox](https://scrapbox.io/kawasima/%E3%82%A4%E3%83%9F%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%96%E3%83%AB%E3%83%87%E3%83%BC%E3%82%BF%E3%83%A2%E3%83%87%E3%83%AB)
- [RDBのデータモデリング・テーブル設計の際に参考にしている考え方と資料 - Zenn](https://zenn.dev/rebi/articles/28c7f1fee5730a)

その頃に読んだデータモデリングの本、楽々ERDレッスンをまとめたQiita記事↓

- [楽々ERDレッスンを読んだ - Qiita](https://qiita.com/yokoto/items/c51bfb0ef626acebe9af)
※ 本一冊読むことは自分にとってはかなりモチベーションのハードルが高いことで、駆け出しエンジニア時代から仲良くしていただいている友人と勉強会形式で進めることで完読できた。感謝。。


振り返ってみると、[クリーンアーキテクチャ](https://www.amazon.co.jp/Clean-Architecture-%E9%81%94%E4%BA%BA%E3%81%AB%E5%AD%A6%E3%81%B6%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%81%AE%E6%A7%8B%E9%80%A0%E3%81%A8%E8%A8%AD%E8%A8%88-Robert-C-Martin/dp/4048930656)や[エリック・エヴァンスのドメイン駆動設計](https://www.amazon.co.jp/%E3%82%A8%E3%83%AA%E3%83%83%E3%82%AF%E3%83%BB%E3%82%A8%E3%83%B4%E3%82%A1%E3%83%B3%E3%82%B9%E3%81%AE%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E9%A7%86%E5%8B%95%E8%A8%AD%E8%A8%88-Architects%E2%80%99Archive-%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E9%96%8B%E7%99%BA%E3%81%AE%E5%AE%9F%E8%B7%B5-%E3%82%A8%E3%83%AA%E3%83%83%E3%82%AF%E3%83%BB%E3%82%A8%E3%83%B4%E3%82%A1%E3%83%B3%E3%82%B9/dp/4798121967)のどちらか一冊読んでいたら、もう少し正確な理解が進んだだろうと思う。

## 3月

2021年の8月から進めていた副業が契約終了になる。

コードを書く業務よりも本業でキャッチアップを進めていたインフラ周りの業務に関心が移ったり、副業に時間を割くことで気持ち的に余裕がなくなっていたり、あとは新しい技術へ触れる機会が少なかったあたりが理由。

## 4月

気になる技術を個人的にいろいろ勉強していたり、今まで自分的に学んでいたことをまとめたり。

その時あたりに書いたであろう記事↓
- [RailsでREST API設計するときに知っておきたい集 - Qiita](https://qiita.com/yokoto/items/30e11f28942c36f17187)
- [Next.jsのSSG・SSR・CSRについてRailsと比較しながら調べた - Qiita](https://qiita.com/yokoto/items/1053b5101dff96570f12)
- [GraphQLについて少し調べた - Qiita](https://qiita.com/yokoto/items/b01a139dd989904396aa)

Next.jsやGraphQLは業務で使う機会が訪れなかったので残念。。
ただ、RailsでRESTishなバックエンドAPIサーバーを立てるときにもGraphQLの考え方が役に立つかもな、と思えるようになった程度に意味はあった。

## 5月

TerraformでIAM権限周りを修正したり、S3バケットを新規作成したりするタスクがあったため、Terraformについて以下の本で勉強した（読んだのは半分くらい）。

- [実践Terraform　AWSにおけるシステム設計とベストプラクティス](https://www.amazon.co.jp/%E5%AE%9F%E8%B7%B5Terraform-AWS%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E8%A8%AD%E8%A8%88%E3%81%A8%E3%83%99%E3%82%B9%E3%83%88%E3%83%97%E3%83%A9%E3%82%AF%E3%83%86%E3%82%A3%E3%82%B9-%E6%8A%80%E8%A1%93%E3%81%AE%E6%B3%89%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA%EF%BC%88NextPublishing%EF%BC%89-%E9%87%8E%E6%9D%91-%E5%8F%8B%E8%A6%8F/dp/4844378139)
1月に読んだAWSの本の後に読んだことで、インフラ周りの知識がよりついた感じがして良かった。

また、Goのリポジトリも保守することになる。
goroutine / channel を使ったマルチスレッドプログラミングがよく理解できず、プロセスとスレッドについてまとめ記事書いて勉強した。

- [プロセスとスレッドについて（Ruby・JavaScript・Goの例付き） - Qiita](https://qiita.com/yokoto/items/3b4bcc489d93bc57baf3)

## 6月

インフラの方々ってすごいし分野として面白いなと思い、SREに興味を持ちちょっと調べてまとめた。

- [SRE入門のための用語・リンク - Qiita](https://qiita.com/yokoto/items/16a4a6cdb08521aa1e50)

NginxとApacheの比較記事が多分この頃バズったりしており、nginxをちゃんと理解できるようになろうと思って一応まとめ書いた。

- [nginx・リバースプロキシについて - Qiita](https://qiita.com/yokoto/items/a1eb1005951e593b7629)

また、ISUCONに参加しようと思い、以下の本を題材とした勉強会を友人のエンジニアと進める。

- [達人が教えるWebパフォーマンスチューニング 〜ISUCONから学ぶ高速化の実践](https://www.amazon.co.jp/%E9%81%94%E4%BA%BA%E3%81%8C%E6%95%99%E3%81%88%E3%82%8BWeb%E3%83%91%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%B9%E3%83%81%E3%83%A5%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0-%E3%80%9CISUCON%E3%81%8B%E3%82%89%E5%AD%A6%E3%81%B6%E9%AB%98%E9%80%9F%E5%8C%96%E3%81%AE%E5%AE%9F%E8%B7%B5-%E8%97%A4%E5%8E%9F-%E4%BF%8A%E4%B8%80%E9%83%8E/dp/4297128462)

## 7月

ISUCONに参加する。
上記の本に書いてある項目を片っ端からやってみた。
- MySQLの実行ログ消したり、パラメータ変えたり、
- Unicornのパラメータ変えたり、
- Nginxで静的ファイルキャッシュしたり、
- アプリケーションコードのロガーを消したり、

あたりをやった気がする。
なぜか初期実装のスコアがGoを選択すると一番高かったので、Rubyを使いたかったがGoを選択した。

N+1の実装箇所を発見したが、Go Moudlesのパッケージ更新方法がわからず解消できず。。
どうやらgo mod tidyコマンドが必要だった模様。

ベンチマーク実行結果は割と上位25%くらいのスコアが出ていたと思ったのだけど、ルールをよく理解していなくて予選落ちになった。

ISUCONは来年も出たいなと思う。

## 8月

1 ~ 7月のキャッチアップ内容を引き続き深めていったはず。

## 9月

本業のチームで設計勉強会をした。
システム開発における基本用語が色々新しく学ぶことができて良かった。

V字モデルや機能要件・非機能要件について考えるきっかけになった。
基本情報の勉強するとか何かで、改めて勉強したい。

## 10月

10月末か11月頭ころからRSpecのSystem Specのdriver移行タスクを行うことになったので、Capybaraの学習を兼ねてCapybaraのREADMEの翻訳リポジトリにPRを投げたりしていた。

- [Update translation #56 - willnet/capybara-readme-ja](https://github.com/willnet/capybara-readme-ja/pull/56)

Rails6だとシステムテスト用のクラス（actionpack/lib/action_dispatch/system_testing/driver.rb）にパッチが取り込まれていない問題を見つけてrailsのリポジトリにissueを立てたが、Rails6系はもうメンテナンスされていないとのことでクローズされた。
[Railsのメンテナンスポリシー](https://railsguides.jp/maintenance_policy.html)について学びになった。
対応として自分の担当リポジトリ側で安直にモンキーパッチ当てた。

立てたissue↓
- [Also in Rails 6, should not require 'selenium-webdriver' gem with non-selenium drivers #46695 - rails/rails](https://github.com/rails/rails/issues/46695)

RailsのSystem Specで利用されるdriverである、selenium-webdriverやcupriteについても学んだ。

- [2021年6月現在、Cupriteで"正しい"システムテストはできるのか？ - Zenn](https://zenn.dev/yusukeiwaki/articles/c88cb0c62b2ab3)
- [2020年のRailsでブラウザテストを「正しく」行う方法（翻訳） - TechRacho](https://techracho.bpsinc.jp/hachi8833/2020_08_06/95282)

## 11月

Railsのオートローダーの移行タスクをやって、Railsアプリケーションが起動する時のクラスの読み込まれ方やzeitwerkについて少し詳しくなった。config/application.rbやconfig/environments/*.rbがちょっと読めるようになった。

- [定数の自動読み込みと再読み込み (Zeitwerk) - Railsガイド](https://railsguides.jp/autoloading_and_reloading_constants.html)
- [Classic から Zeitwerk への移行 - Railsガイド](https://railsguides.jp/classic_to_zeitwerk_howto.html)

担当Railsアプリの検証環境をEC2からEKSへ移行することになり、DockerやKubernetesについて少し詳しくなった。
DockerのBuildkitやマルチステージビルドを理解できようになったり、Kubernetesのdeploymentを読めるようになったりした。

その頃勉強で書いた記事

- [Docker, Docker Compose, Kuberenetes用語ベース入門 - Qiita](https://qiita.com/yokoto/items/668db0a0c20a6e2253c4)

## 12月

本業を退場！送別会もやってもらってありがたかった。

単価が上がる & フロントエンド書ける & インフラも引き続き見れるような環境を探して、1月からはそこへ。

コードを書くイチエンジニアとして、業務で必要とされている知識かつ自分の中に不足している知識は、その業務内でキャッチアップしてできるようになれば、期待値として十分の働き方になるだろうというイメージができた。

それを踏まえて、2023年からは、1人のエンジニアとしてより基礎力を高めていけたらいいなと思う。
具体的にはアルゴリズムの本1冊やったり、ITパスポート/基本情報/応用情報の範囲になる知識を勉強していったり。
（本屋で見たところ、学習範囲としてはITパスポート/基本情報/応用情報はほぼ同じだった。）
高校の頃数学0点取ってたりしたレベルでそこら辺に負い目があるので、アルゴリズムや情報科学基礎的なところをゆっくり勉強することでそれを克服していきたい、というのに加え、今のご時世が不況なので、基礎力を高めることで面接に強くなり、就活力を高めておきたい。

おわり。