エンジニア1年生奮闘記

## はじめに
都内の受託開発企業でWEBエンジニアとして働いている**まさきち**といいます。

異業種からWEB系エンジニア転職して1年が経ちますので、これまでを振り返りながら、経験したことや学んだこと、取り組んできたことについて話そうと思います。

## 目次
- この記事の対象読者
- 書いた人について
- 入社後の流れ
    - 研修
    - 保守業務
    - 新規開発
- 身についたこと
    - 技術力
    - 報連相力
    - 課題解決能力
- 取り組んで良かった事
    - アウトプット(技術記事、アプリ作成、SNSでの発信)
    - 社外エンジニアとの交流(勉強会参加、LT会参加)
- WEB系エンジニア転職を目指している方達へ
- みなさまからの質問
- 終わりに

## この記事の対象読者
- WEB系エンジニアを目指そうと思っている方
- エンジニアなりたての方
- 最近の駆け出しエンジニアの動向を知りたい方

## 書いた人について
エンジニアに転職する前は、製造業で自動車関連の部品の設計、製作を行なっておりました。
IT技術の進化により自動化が進み生産効率が上がるのを見て感動したり、
業務の中でプログラムを触る機会があったためIT業界に興味を持ち、転職を決意しました。

プログラミングスクールに通い、独学で勉強しながら転職活動を行いました。
当時未経験からのIT転職市場は求職者が飽和状態だった事もあり、なかなか決まらず
エンジニアとしてのキャリアを歩むまでに、丸一年ほどかかりました。

## 入社後の流れ

##### `研修→保守業務→新規開発`の順番で進んでいきました。

### 研修　
WEBエンジニアとしての基礎を身につける為に、主に書籍を利用して研修を行いました。（期間は１ヶ月ほど）
CTOの選んだ課題図書を読み進めて最終的にPHPフレームワークLaravelを使って課題アプリを作成というものでした。

毎日30分ほど振り返り面談を行い、理解が曖昧なところは後ほど復習しました。
1人で学習していると見落としがちな部分を補っていただけたので有難い環境でした。

最後に課題テストと自分の作成したアプリの発表会があり緊張しましたが、理解度の確認が出来て学びになりました。

### 保守業務
研修が終わるとさっそく保守業務を振られることに。

簡単な機能の改修や追加などが主なタスクで、先輩の指示のもと作業を行いました。
実務のコードに触れてみると勉強の時に比べて遥かに複雑で難しいので、コードを読んで理解するまでかなり悩んで時間がかかりました。

コードを書いていればいいという訳ではありません。
他にも業務プロセス、ドキュメント管理、打ち合わせ、etc...など覚えなければいけないことは盛りだくさんあります。

さらに複数の保守案件を掛け持ちすることになったので、頭の切り替えが大変...
案件の概要を把握するだけでも当初は頭がパンクしそうになってましたねw

案件によって言語やドキュメントの書き方、管理方法が違ったりするので大変でしたが、勉強になりました。

### 新規開発
入社して半年後くらいに新規案件に初期段階から関われる機会が複数回ありました。

お客様と打ち合わせを行い用件定義をしたり、詳細設計書や機能設計書を作成し、開発基盤を自分で整えて開発していくことに。

ある程度完成した段階で単体テスト仕様書を作成してテストを行い、バグが発生した箇所は修正しての繰り返し。
テストを行うことで見過ごしてしまったバグをかなり洗い出すことができたので、改めてテストの重要性が身に染みました。

自分でAWS環境上にインフラ構築した際はミドルウェアのインストールなどに詰まりまくりましたが、良い経験になりましたし自信がつきました。

**要件定義→基本設計→詳細設計→機能設計→製造→テスト→インフラ構築**
の流れを経験することで、プロジェクトの初期からリリースまで関わることが出来たので一通りの知識が身に付けられたと思います。

## 身についたこと

IT業界でお仕事をして特に下記の３つの力がついたと感じました。

- 技術力
- 報連相力
- 課題解決能力

### 技術力
設計、開発、インフラ構築と幅広い業務に携わることができたので多くの知識や技術力が付いたと思います。
以下実際に実務で使用した技術の一覧です。

- 開発環境構築(PHP、Laravel、静的解析ツール、GitHub Actions、Docker)
- AWSを使っての本番環境構築(EC2、RDS、ALB、Route53)
- APIドキュメントの作成(OpenAPI)
- 詳細設計、機能設計、DB設計、バッチ設計
- テスト仕様書作成、テスト(単体テスト、結合テスト)
- 認証(JWT、Cognito、Auth０）
- RDB(MySQL)/NoSQL(mongoDB)
- 外部API連携(OmniGrid,microCMS)
- 言語、フレームワーク(PHP/Laravel/React/Vue/TypeScript)

### 報連相力
IT業界に入ってより力が付いたと思います。
入社して直後の自分の報告は下記のような形でした。

> 本日は〇〇案件の実装に入っていました。
> 実装の方法は〜でXXのところまで終わってます。
> 明日は△△の作業に入っていきます。

これだと予定通りに進んでいるのか、作業を進めていく上で問題は無いのか等がわからないので、上長が望む頻度や内容を意識しきれていなかった報告の仕方だったと思います。

> 本日は〇〇案件の実装に入っていました。
> 進捗は〇〇%ほどで予定通り順調に進んでおります。
> 実装前に仕様を再度確認することで手戻りが少なくなりました。
> 明日は外部連携機能の仕様が確認できるので、後回しにしておいた〇〇の実装に着手していきます。
> 懸念点として、初めて行う実装なので調べる箇所が多く手を動かす前に時間がかかってしまいそうです。
> ある程度自分でトライして、難しいようでしたら〇〇の実装に詳しい△△さんにアドバイス頂こうと考えております。

上記のように実績を数値化して進捗状態を具体的に報告し、考察や懸念点などを添えることで上長が気になる部分を意識して報告できるようになったと思います。
報告することで自分を客観視することも出来るので、間に合わなそうならすぐに相談してヘルプを出すことができました。

自分は懸念点があったり、時間がかかりそうな場合は早めにヘルプを出すように心がけてます。
「ギリギリまで自分で頑張ってやったけど納期に間に合いませんでした！」と言われてもどうしようもないですからね...

### 課題解決能力
エンジニアの業務はわからないことだらけで、解決に向けてどのように立ち回るかがお仕事のような気もしてます。
未経験エンジニアは何もかも解らないことが多いので、まず問題にぶち当たったらとりあえず関連する単語をググるところから始めます。
実装における課題を例とすると、自分は以下の流れで進めていきます。

`単語の意味を調べる→Qiitaの記事などで概要を掴む→公式ドキュメントで詳細を詰める→実装してみる→(エラーor上手くいかない)→デバッグしながら原因を調査→どうしても解らなければ先輩に質問`

先輩に質問する際に注意なのですが、駆け出しがやりがちな質問の仕方で

**「この実装のしたいんですけど、上手くいかないので教えてください！」**

上記の質問方法ですと、質問された側は**情報が少なすぎて何に困っているのか解らない**ですし、**自分でちゃんと調べてから質問して**と言われてしまいます。

先輩に質問する時にはなるべく先輩方の時間を奪わないように、私は以下のように整理してから質問するようにしています。

1. 達成したいこと
1. 調べたこと、試したことを具体的に
1. 自分なりに考えた上手くいかない原因や、この部分をクリアできれば達成できるなど
1. 参考にした記事やドキュメントのリンクを添付する

職場の先輩に質問しすぎてしまうのも申し訳ない気持ちでしたので、**MENTA**などのサービスを利用して技術的な質問をしたり、Twitterのベテランエンジニアの方にアドバイスをいただいたりして課題解決したこともありました。

**手札を多く持ち手段を限定せずにおく**と視野が広がって気持ちにも余裕が出来るので良かったです。

## 取り組んで良かった事
ITエンジニアライフの中で取り組んできて、より成長できたと感じた事やQOL上がったなと感じた事が２つあります。

1. アウトプット
1. 社外エンジニアとの交流

### 1. アウトプット

- Qiitaで振り返りや技術記事を書く
- アプリ作成
- Twitterでの発信

アウトプットは続けて来てよかったなと思うので詳細を書いていこうと思います。

**Qiitaで振り返りや技術記事を書く**
自分が実務で経験したり、学んだ技術を記事としてアウトプットすることで記憶の定着にもなりますし、後で振り返った時に成長を感じることができ、自己肯定感も上がるのでオススメです。

技術記事に関しては**ベテランのエンジニアの方がアドバイス**をくれたりもします。
具体的により良いコードの書き方を示してくれたり、別の実装方法の案を出してくれたり良いことしかないです！

**アプリ作成**
書籍や動画教材を**見ただけよりも実際に手を動かした方が技術力は上がりやすい**と思います。
動画を見ただけでは実際にアプリを作れるようにはならないので...

私はUdemyのハンズオン教材などで実際に手を動かしてアプリを作ることが多かったです。
実際にコードを書くことで処理の流れやエラーが起きたときの対処法などがより身についたと感じます。
GitHub上にも上げておくと振り返りもできて良いですよ。

**Twitterでの発信**
自分が業務で行ったタスク、~~仕事の愚痴~~、勉強した事...など何でもツイートしてました。
投稿に反応あるとモチベアップにも繋がりますし、自分の置かれている状況が周りと比べてどうなのか客観的に知ることも出来るので、固定観念から抜け出せる部分もあるなと感じました。

同じような状況の方達と情報共有も出来るので孤独感を紛らわすには良いツールだなと思います。

### 2. 社外エンジニアとの交流
勉強会やオフ会などで積極的に社外のエンジニアとも交流していました。

**勉強会**
他のエンジニアの発表を聞くと刺激になって自分も頑張らなきゃと思えますし、
他社のエンジニアがどんな技術を使って仕事をしているのか知ることが出来るのでシンプルに面白いです。
全く知らない技術もあれば、知ってるけどこんな使い方できるんだ、とか毎回発見があります。

私は主に**Connpass**というエンジニアの勉強会プラットフォームを利用して参加しています。

**コミュニティ運営、オフ会参加**
自分の運営しているコミュニティや勉強会、Twitterで知り合ったエンジニアとオフ会したりもしてます。

エンジニアを目指して勉強し始めた頃はあまり同じ境遇の知り合いもおらず、孤独感が強かったので、技術的やキャリア的な相談はもちろん、雑談や一緒にゲームしたり、ご飯行ったり、飲みに行ったり出来るようになったことで孤独感も解消されてQOL上がったと思います。

## 駆け出しやエンジニア転職を目指している方達へ
IT業界は勉強することが多いですし、何ひとつわからなすぎて凹む日も多いです。
職場の先輩の技術力の高さやSNSのエンジニアの情報発信を自分と比べて気にしすぎてしまうことも...
そのせいなのかメンタルやられる駆け出しも多いですが、あまり思い詰めず日々積み重ねていけば結果は出てきます。

**楽しみながら(辛い時もあるけど)前向きに取り組むこと**が駆け出しがエンジニアを続けていく上で大切だと感じました。

## みなさまからの質問

### Q.慣れない仕事で気力や体力を一年間どうやって維持しましたか？

### 回答
単純にプログラミングやエンジニアの仕事が楽しかったのが大きいと思います。
保守改修で自分の作った機能が初めてリリースされてお客様にフィードバックもらえた時は感動しました。
新規開発ではゼロから技術選定もして自分達で一つのアプリを作成した時はとてもやりがいを感じました。

気力を維持できない日もありましたが、そういう時は開き直って自分の好きな事して気分転換してました。
私の場合は景色をぼーっと眺めるのが好きなので、よく外にお出かけして気を紛らわしてました。

実装が上手く出来ない時や、~~納期が迫って詰められた時も~~**思い詰めないこと**が大切だと思います。

**体力面に関して**
エンジニアのお仕事は一日中座ってパソコンに向かうことが多いのです。
体力が衰えないように定期的にジムに通ってランニングや筋トレしてました。
**運動した後は頭がさっぱりして集中できる**のでオススメです。

### Q.エンジニアになって良かったことは？

### 回答
以下の３つの部分でメリットを感じています。

- スキルの汎用性
- 仕事のしやすさ
- 交流

**スキルの汎用性**
以前勤めていた製造業では、その会社しか通用しないスキルが多かった気がします。
会社にある機械の操作方法や仕事の仕方、技術などは活かせる範囲が限定的でした。

一方、エンジニアに必要な知識はある程度体系立てられてまとまっていることが多いと感じました。
(プログラミング言語、ネットワーク、データベースなど)
たとえ他の会社に転職したとしても、そのまま活かせるスキルが多いと思います。

**仕事のしやすさ**
ITエンジニアはPCがあれば仕事が進められるので、他の要素にあまり縛られずに作業ができます。
プログラミング作業に関しては環境構築してあればどこでもいつでも実装や検証ができますが、製造業ではそうはいきません。
ちょっとした検証を行うにも工作機械が無いと出来ませんし、人手も必要になってきます。

また、製造業は怪我が付き物でちょっとした誤操作が大事故につながります。(実際私も怪我したことがあります)
その心配が無くなったことで心理的に楽になった部分もあります。

**交流**
ITエンジニアの方は向上心が高い方や積極的な方が多いと感じています。
勉強会やコミュニティに参加している方も多いので、仕事の話がいろんな人とできて交流しやすいです。
仲良くなったエンジニアの方と飲みに行って仕事の話やプライベートの話も出来たりするので、
交友範囲が広まったと思います。おかげさまで楽しく過ごせています。


### Q.平日のルーティーンを教えてください
### 回答

#### 業務開始前
仕事を始める前に1日のスケジュールを確認してToDoリストを作成します。
大きく以下の項目に分けてタスク管理を行なっています。

- 毎日定期的にあるタスク（社内技術ナレッジの記述など）
- 今日予定されているタスク/時間見積もり
- 予定外に追加されたタスク
- 今後やる必要があるタスク
- ノート（なんでもメモ欄）

朝初めにタスクを整理することで効率よく仕事進められるのでオススメです。
後で見返して振り返りもできるので良いです。ツールは**Obsidian**を使っています。

#### 業後
出社日は帰りにジムに行って軽く運動してます。
家に帰ってからは仕事で使う技術や資格の勉強をしたりなど。
気分が乗らない日はゲームしたり、動画見たり...etc

## 終わりに
以上になります。
最後まで読んでいただき有難うございました。
皆さんの参考になれば幸いです。