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

エンジニア歴も1年半になりました。

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

# 2020年振り返り
## 1月

* 1/14 が前の会社の入社日だった。
    * 12月付で前の前の会社を退職して、入社するまでは以下をやっていた。
        * Udemy React The Complete Guide
        * AtCoderの過去問（AtCoder Problems）1日あたり数問
            * これは3ヶ月くらい続けていたけど、書いたコード量が増えた結果、実装力がだいぶまともになった気がするので良かった（逆に言えばそれまでは結構酷かった...）。
    * 当時入社した会社では、初めてそれなりのユーザー数を抱えているサービスに携わった。
    * 技術スタックはざっと以下のような感じで、サービス全体を意識して仕事するきっかけになったのは良かった。
        * Ruby 2.4.5, Ruby on Rails 5.2.3
        * ECMAScript2015, jQuery
            * React や Vue は使ってないが EventEmitter や ES Modules を使ってコンポーネントごとにクラスを分けて書いていたので、結構フロント力付いた。
        * AWS（EC2, S3, RDS Aurora, DynamoDB etc）
        * Solr
        * Terraform
        * Docker
        * Circle CI
        * Swagger

## 2月

* AWS Solution Architect Associate の資格を周りのエンジニアが取り始めており、自分も取ろうと思ったので勉強開始。

## 3月

* 業務ではSEO周りの刷新で metaタグやら Google Analytics , Google Tag Manager 周りの設定を覚える。

## 4月

* 本業の方では
    * [外部APIと連携した開発](https://qiita.com/yokoto/items/9f5a3490bd624509767a)
        * ここら辺は前職でもやっていたのでそんなに困ることもなかった気がする。
    * [LINE Botの開発](https://qiita.com/yokoto/items/5de0b11638f39d5aab74)
        * ここら辺も前職でやっていた。

* 知人の紹介でサービス立ち上げのお手伝いを始めた。
    * 給料発生している形ではなかったが、技術力向上の一環として始めた。
    * 結果としては強いエンジニアからレビューをもらえて、以下のようなことが特に良かったように思う。

        * コードの設計部分に関心が持てるようになったこと
        * React, TypeScriptに触れられたこと
    * 技術スタックはたしか↓な感じ
        * Rubyたしか2.5系, Rails 6.0.3.1
        * TypeScript, React
        * GCP（GAE）
        * GitHub Actions

## 5月

* [AWS Solution Architect Associate の資格取得](https://qiita.com/yokoto/items/161d749fbb169de53e73)
    * 地味に試験対策で3か月近く勉強した。ギリギリではあったが無事受かったので良かった。

* [オブジェクト指向設計実践ガイドを読んだ](https://qiita.com/yokoto/items/e052b74187183913803f)
    * お手伝いプロジェクトは新規開発で、クラス設計の実力不足をもらったレビューから感じたので読んだ。
        * 特に新しくクラスを作るときは単一責任になっているか、依存関係がおかしくないか（より変更されないもの、抽象的なクラスに対して依存するとか）など、意識するきっかけになった。
        * 要はSOLIDが大事ということ。見についていない部分もあり、それはデザインパターンとかで勉強したいと思ったが、それは新年以降でそのうちやりたいところ。

## 6月

* [Gopher 道場](https://gopherdojo.org/)への参加を目指して勉強開始→落ちる。
    * たしか [A Tour of Go](https://go-tour-jp.appspot.com/) やったり、
    * [簡単なコマンドラインツール](https://github.com/yokoto/accountbook-ja)作ったりして勉強した。
    * Gopher道場への参加には一応選考のテストがあって、[Go Modules](https://qiita.com/yokoto/items/13be66b6276e17d9f554) 使って頑張って書いたりしたが、結局落ちてしまった。
    * 結果としては2週間から1ヶ月くらいGoの勉強してみた。
        * 普段がRubyなので、なかなか記述力が増えるなとかimportとかインターフェースはJSやTSっぽいしポインタとかはC++ぽいなと今まで勉強した言語からの学びもつながるものを感じた。

## 7月

* 仕事で普通にコードを書く分には困らないので、DBやミドルウェア周りの勉強を頑張ろうと思っていた気がする。
    * [失敗から学ぶRDBの正しい歩き方を読んだ。](https://qiita.com/yokoto/items/9452ee2456b36c587bb2) 
        * あんまり内容を覚えていない気もするが、以下とかは基本として身についた。
            * 条件の列にインデックスを使わないとインデックスが効かない
            * SQLの解釈の順番（FROM→ON→JOIN→WHERE...）
            * JSONデータ型はアンチパターンであること
    * [【Rails】キャッシュについてわかりやすくまとめてみた](https://qiita.com/yokoto/items/52a05bca505a30d64130)
        * キャッシュストア何使ってましたか？とかは面接でも効かれた。※ [dali](https://github.com/petergoldstein/dalli) っていう Memcached のRuby用のラッパーみたいなのを使っていた。
    * [【RSpec】POSTリクエストパラメータの数値が文字列になってしまう
](https://qiita.com/yokoto/items/49a23044102d45987436)
        * 本業でテストを書く習慣があまりなかったので、お手伝いプロジェクトの方でRSpecのrequest specやfeature specはぼちぼち書くようになった。


## ８月

* パーフェクトRailsの新版が出たので読んだ。
    * [スライド作って社内勉強会で発表](https://speakerdeck.com/yokoto/ekisupatorailsji-chu)したりもした。
    * オブジェクト指向設計実践ガイドを読んでから、Railsのアーキテクチャとかクラス設計は気になっていたので、スライドに書いたような話を追うようになった。

* [【Webpack】Webpackについてまとめてみた](https://qiita.com/yokoto/items/351910ee094e730f17d0)
      * Railsのフロントエンド周りの構成もいろいろパターンがあることに関心を持って、アセットパイプラインやSprockets、Webpack等の用語も追うようになった気がする。

* [AtCoder で茶色になった](https://atcoder.jp/users/yokoto)。
    * AtCoder Beginners Contestは2020年ほぼ毎回出てた。
    * 結局1ヶ月くらいでまた灰色に落ちた。
        * ABC以外も参加するとすぐレート下げてしまう。。

## 9月

* Findyに登録したり転職ドラフトに参加した結果、当時の年収より100~200万高い提示を受ける
    * なお、どこも落ちた模様。
        * 不採用理由としては技術的な部分や性格的な部分ではOKもらえたことが多く、早期退職やカルチャーフィット的な部分で評価が下がった気がする。
        * [面白い選考](https://github.com/enechange/EnergyDataSimulationChallenge/pull/283)がある会社もあった。

    * 結果としては、本格的な転職活動の機運も高まってしまう。

## 10月

* 本業で新規サービスが始まったことで環境構築を行うことが増えた結果、Linux、Unixの勉強を頑張りたいと思った。
    * [なるほどUNIXプロセスを読んでいく
](https://qiita.com/yokoto/items/86f02d0909c2ba05949d)
        * 正直あまり何かが身についた感じはしない。
            * プログラミングの全てはプロセスであって、それが生成されたり殺されたりしていることを理解したくらい。
            * もっと基礎的なコマンドの本を読めば良かった。
            * Goとかで仕事するようになるとこっちも詳しくなれるのかも、とか思ったりした。

* 一方で本業の方で退職を伝えてしまう。
    * 理由としては前の月のプチ転職活動の手応えと、有給の副業が決まり、そっちの方が時給換算で割が良いとなったため。
    * 一応フリーランスの友人の話も聞いたりしていて、正社員の選考受ける以外もアリかなとこの頃思った。

## 11月

* 本業に続き、お手伝いでやっていたプロジェクトもやめる。

* 次の仕事が見つかる→始まる。
    * レバッテクフリーランス経由で見つけた。
        * 額面の条件と社員の技術レベル、技術顧問の勉強会とかが良いなと思って決めた。
        * レガシーサービスかと思いきや、入社した時点でRubyとRailsが最新、Dockerコマンド一発で環境構築が完了する状態になっていた。

* 次の仕事を始めるにあたり、Ruby力でついていけないとやばいので、メタプロRubyの本を読み始めた。
    * [メタプログラミングRuby（第I部・水曜日まで）を読んでいく
](https://qiita.com/yokoto/items/2d6cd72f3d2e4ab5e671)
        * 動的なメソッド定義の方法を覚えたり、コードを書くときにRubyのオブジェクトモデルについて意識するようになり、Ruby力を一段階レベルアップできた（できそう）と感じた。
        * 新しい現場のRailsアプリではgemやRuby標準ライブラリの拡張を結構やっているので、そこらへんで特に役立ちそう。

## 12月

* 新しいフリーランスでの仕事と新しい副業の二足わらじを頑張り中。
    * 副業ではテストが0の状態から system spec 整備したりrubocop導入したり、GitHub ActionsのCIパイプラインを作ったり。
        * これは本業でも役立った。今までテストちゃんと書いてなかったけど、現職ではRSpecのカバレッジがたしか約95%なくらいにはテストちゃんと書く習慣があるので。

* [メタプロRubyの勉強会](https://github.com/yokoto/reading-metaprogramming-ruby)を友人と自主的に開催中。
    * 現職で過去に行われていたらしく、キャッチアップ目的。
        * 問題が難しくて正直解説消化ありきだが、ちゃんとこなしていくとかなりRuby力つくと感じる。

* TwitterでNext.jsがRails倒すみたいなのが賑わい、現職でRuby書いてる身として思うところがあったので、[海外のReactを倒すRailsコミュニティのREADMEを翻訳してコントリビュートしたりした](https://github.com/obie/guide-to-reactive-rails/blob/main/README.jp.md)。
    * その後DHHが[Hotwire](https://techracho.bpsinc.jp/hachi8833/2020_12_24/102368)とか発表していた。ここら辺は適度に追っていきたい。

## まとめ

エンジニア2年目は、振り返ってみるといろいろ勉強したし、ちゃんと成長できた（&給料も上がった）、充実した年だったかなと思う（今回のフリーランス案件もミドル枠で採用してもらっていた気がする）。

3年目で成し遂げたいこととかは特に決まっていないが、デザインパターンとか、Ruby, JavaScript, Goあたりの言語仕様をちゃんと勉強するとかはやりたいと思ってる。
結局自分が使える言語の本じゃないと読んでもなかなか見になりづらかったりするというのもある気がするので。。