社内SEからWEBエンジニアに転職して1年経ったので色々と振り返る

WEBエンジニアになって1年が経ちました。去年と比べるとたくさんのことに挑戦し、ワクワクする日々を送っております🏓

とはいえ、今に至るまでは決して順風満帆ではなく、むしろ悩みまくった1年間でしたので振り返ってみました。これからエンジニアを目指す方や最近エンジニアに転職された方の参考になれば幸いです。

## 🥚WEBエンジニアになる前
新卒から製造業の情報システム部門（社内エンジニア）に配属されました。大学は土木、建築関係だったため、プログラミングなどは入社後から学んでいます。

入社して最初の1年近くは社内システム（Java+独自フレームワークのWEBアプリ）の開発から始まり、パッケージシステムの導入、サーバーの構築、障害設計、PCのトラブル対応など、色々経験させてもらいました。資格手当などもあったので、なんとか一応IPAのAP（応用情報）をとるレベルの基礎知識は身につけられました。

ただ、開発業務は最初のみで、マネジメントや折衝の割合が増え、自分で手を動かすような仕事は年数と共に減っていき、次第に**エンジニアとしてのスキルセットを習得できていない**という葛藤を抱くようになりました。

### WEBアプリの開発に挑戦
改めてほとんど触ることのなくなったWEBアプリの開発に挑戦してみました。

実務で使っているフレームワークは個人で使えるものでもなかったので、日本語ドキュメントの充実しているRailsを使ってみようと思い、チュートリアルを軽くやってみてから自作アプリに挑戦しました。数年ぶりの開発でしたが、最低限の知識はあったので独学ながらなんとか動くモノは作ることができました。

作ったアプリを妻や友人にみてもらったりしていると、どんどん楽しくなっていき、**「こういう仕事がしてみたいなぁ」**という思いが次第に強まっていき、WEBエンジニアとしてのキャリアを形成することに決めました。

自分の作っていたRailsのアプリをある程度完成させた上で転職活動を行い、WEBエンジニアとしてのキャリアをスタートさせることになりました。

## 🐣WEBエンジニアデビュー後の苦労と学び
WEBエンジニアになりましたが、いろんな面で最初の半年間は正直苦労しました。

### 1. シンプルなスキル不足
入社してからPHPとRuby（Rails）のプロジェクトに配属されました。しかし、チームでの開発も約4年ぶりで、Railsは実務経験なしだったため、最初の数ヶ月間の開発は決して順調ではありませんでした。また、CSSやJavaScript、一部でVue.jsを使っている箇所もあり、一気に必要な知識に迫られることになりました。

前提知識の低さから、業務時間だけでは全然足りなかったので、通勤時間や出社前の朝、帰宅後は常にこれらの技術の勉強をしていました。この時は体系的な学び方ではなく、業務で必要な箇所や詰まった箇所の解消のために虫食い的に学習していました。今振り返ると、案外こちらの方が効率が良かったと思います。

### 2. 前職とのスピード、コスト意識のギャップ
自社サービスを運営しているため、前職のような社内システムと比べて、仕事のスピード感やコスト意識は大きく変わりました。リリース遅れや不具合がダイレクトに損失につながります。実際、入社して1ヶ月目ぐらいに数十万円の損失を生むトラブルを発生させてしまった時は、精神的にキツかったです。

このことから、今まで以上に開発する目的やイシューの把握が求められるようになりました。自分がやっている開発は急ぐ必要があるのか?つまり、**遅れることで損失や信頼低下につながらないか**を考えながら開発に当たるようになりました。

この時の教訓などは別で記事を書いておりますので興味があればお読みください。
[ぼく（令和エンジニア）の144日間奮闘記 \- Qiita](https://qiita.com/halkt/items/993d3fb098a4e472ba95)

### 3. 他人と比べて必要以上に落ち込む
会社のエンジニアの人たちは本当に優秀で、今もすごくお世話になったり、刺激をもらっております。ただ、入社直後の自分はその人たちと自分を比較して勝手に落ち込んでいました。

下記の記事は最近のものですが、うまく劣等感と付き合えていない状態だったと思います。
[エンジニアの劣等感との付き合い方 \- Qiita](https://qiita.com/karamage/items/771b633c3243989418a2)

変なプライドや素直に自分の未熟さを認め、同僚にマメに設計の相談をしたり、ペアプロをしたりすることで開発スピードや品質と共に徐々に改善されていきました。

## 💡効果的だった施策
上記に述べたように、現場での生産性や品質が伸び悩んでいたため、いろんな対策を実践していました。その中でも、自分に効果の大きかった施策は下記でした。

### 相談までのサイクルを可能な限り早くする
自分の場合、思っていた以上に一人で悩むタイプで、コードレビューで実装箇所を丸々移管したりといった手戻りが何度かありました。課題直面→調査→考える（悩む）→相談というサイクルの中で、無駄に考える（悩む）と調査が混同していたことが原因でした。

このように自分の中で分解できてからは、**悩んでいると感じたタイミングですぐに相談に移すこと**で自然と無駄な時間がなくなり、スムーズに開発ができるようになりました。

### テストコードを可能な限り先に考える
全てではありませんが、TDD風の開発を取り入れることでコードを動かしながら設計していくことができました。特定の返り値を期待する関数などではこの方法を取り入れることで**品質に自信を持った状態**で開発完了まで進むことができました。

## 💪業務外でのスキルアップ活動
業務時間内だけではスキルアップの時間が全然足りなかったので、一部ですが下記のような行動を実践しました。

### 1. バックエンド系のスキル

#### Railsアプリのリファクタリング
業務知識の復習も兼ねて、入社前にRailsで作成したアプリのリファクタリングに挑戦しました。当初はviewファイルにごりごりロジックの記述、テストほぼ記載無し、という状態でした。

業務で学んだ内容や、使えそうな実装を反映させて触っていました。

* コンテナ化（docker, docker-compose）
* rubocopの導入
* rspecの拡充とCIの追加（github actions）
* カバレッジの計測など
* コードリファクタリング（MVCに沿って記述場所を整備）

これによって業務で曖昧に使っていた知識を補完することができました。dockerやREADME、CIなどを整備することで、ようやく**個人開発から複数人で開発のできるプロジェクトとはどういうものか**を考えるきっかけにもなりました。

#### A Tour of Go + スターティングGo
業務で直接利用はしていませんが、Go言語を使っているプロジェクトもあるため少しでも触れるよう実施して見ました。いざ実務で使うことになることも見越して早めに最低限の知識は習得しようと思います。
[A Tour of Go](https://tour.golang.org/list)

#### リーダブルコード
変数や関数の命名、適切な処理の分割などが結構苦手だったため、何度か読んで最低限自分の意見を持てるようにはなりました。現場の文化などもあるため、自分の意見は持ちつつも可能な限り相談して、納得感のあるコードを書くことを心がけています。

### 2. フロントエンド系のスキル

#### JavaScriptもくもく会への参加
入社前はES5以前の記法しか対応していない参考書を持っていないレベルでしたが、実務や社内の勉強会で触れる機会も増えました。

その後は社内のエンジニアが開催する勉強会、Twitterで募集していたもくもく会にもオンラインで参加させていただきました。JavaScriptは自分が最初に学んだ時と比べると記法が大きく変わっていたので、早い段階でその変化に気づくことができたのは幸運でした。

また、初めて勉強会に参加したことで、こうした会へのハードルが下げられたことも収穫でした。

#### Vue.jsのTODOアプリ構築
実務でVueを触ったものの、いまいち理解できなかったのでチャレンジしました。
書籍のサンプルレベルですが、VueとExpressで作っています。
https://github.com/halkt/kanban_app

そもそものJavaScript（ES6）の記法が前提としてかなり求められたので、そこについても勉強になりました。最低限、コンポーネント、store、routerなど最低限の知識は身につけられました。

#### Reactチュートリアル
Vue.jsについて勉強した後で、少し興味を持ったので公式のReactの三目並べやアプリ開発に挑戦してみました。こちらはまだまだチュートリアルに毛が生えた程度なので今年はもう少しがっつり触ってみたいと思います。
[チュートリアル：React の導入 – React](https://ja.reactjs.org/tutorial/tutorial.html)

### 3. コンテナ、AWS（基盤系）のスキル

#### Railsアプリのコンテナ化 + AWSでの稼働
dockerやdocker-composeが全然わからなかってなかったので、Railsアプリのコンテナ化とAWSへのリリースをやってみました。無料版のみで構築できましたが、期限が切れたタイミングで数千円請求されたのも良い思い出です💰
[ハンズオン！dockerとAWS（EC2\+ALB\+RDS）を触ってみて学んだこと \- Qiita](https://qiita.com/halkt/items/3dfdcb6c63e1023a2227)

サービスをインターネット上に公開して動かすところまで触ることができたのは良い経験でした。

## 🐥気がついたら1年経過経ったでまとめる
社内SEでまったりしすぎた代償なのかもしれませんが、入社して半年ぐらいはスキル面でも仕事面でも苦労しました。それでも、**この業界に飛び込んで良かった！**と胸を張れる良い1年だったと思います。

今は学びたい領域を勉強できる余裕も少しずつ増え、学ぶことが楽しくなりました。PCを触る時間が多過ぎて妻の機嫌を損ねる程度には成長できましたw

まだまだひよっこエンジニアですが、今年はより深く学んでみたいと思います。

それではまた！