未経験ママエンジニア、転職して2ヶ月経ちました

# 10月からエンジニアへ転職
過去の記事で書きましたが、10月からエンジニアデビューしました。
10月から今までの2ヶ月、あっという間で毎日充実していて、エンジニアになろうと思って転職した自分を褒めたいです。とても楽しい。

この記事では、未経験で入社してから2ヶ月で
- どんな仕事をしていたのか
- 気づき、学び

などを共有したいと思います。
未経験でエンジニアになった後って、どんなことするんだろう？と興味がある方、エンジニアを目指している方のお役に立てたら幸いです。

# 転職前の学習歴
転職前はJavaScriptを1年半ほど学習していて、仕事(前職)で使えるメール文のテキスト作成ができるwebアプリ（フロントエンド：Next.js、バックエンド：firebase）を個人開発し、リリースしました。
バックエンドの知識はNoSQL以外ほぼ皆無で、SQLはデータベースのこと、というわずかな認識で入社しました。
フロントエンドの知識が少しあるくらいの未経験者です。

# どんな仕事をしていたのか

### 入社初日(10/1)
配属部署：クラウド事業部
開発に携われる部署へ配属と聞いてとても嬉しかったです。
面接をして下さった方が上司で、かなり環境に恵まれました。

また、AWSに力を入れていて、資格取得を推奨しています。
多くの方がAWSの資格をどんどん取得しており、今後はAzureにも力を入れるとの事でした。
インフラからバックエンドまで様々な案件があるようで、自分がどんな案件に携われるのかワクワクしていました。

### 10/2〜10/23
- paizaでPHPの勉強
→Bランク10問と課題のAランクの問題を解き終わる
- paizaでSQLの勉強
→基礎的な問題10問、応用問題10問、おまけ5問を解き終わる
- 新人課題の担当部分（フロントエンド）を完了させる

初めは研修としてPHPとSQLの習得でした。
JSの知識があったのでPHPの基礎は早めに理解できました。
SQLも書き方はわかってきて、ある程度取りたいデータを取ってくることができるようになりました。
paizaの有料ラーニングすっごく良くて、理解しやすい！
今後も初めて触れる言語に出くわした時はpaizaで学ぼうと思います。

新人課題はサーバーを構築してAPIを作ってAPIが発火したらフロント側で結果を表示させるwebアプリを開発しよう！という課題です。
新人メンバーが複数人いるので、役割を割り振った結果、私はフロントを担当し、ひとまずAWSのS3にホスティングするところまで完了しました。

### 10/24〜11/1
- 11月からアサインする案件の概要の理解とテスト
- マイグレーションファイルの作成

案件に既にアサインされている先輩が作った画面のテストをしながら、開発指示書の概要を理解したり、テストをしながらコードを読んだりして開発ってこういうことするんだ〜！と勉強させてもらいました！

その案件の言語がPHPだったので、paizaで言語の学習をさせてもらっていたということですね。
学習した言語で案件に入らせてもらえたのはとてもありがたいことでした。

### 11/5〜11/8
- バッチ実装
- ログ書き込み用のクラス作成

laravelの開発に参加し、バッチの実装とログ書き込み用のクラスを作成しました。

#### バッチの実装
バッチというのは、定期的に実行したい処理のことです。
その処理をcronというプログラムが設定した日時に実行してくれるという流れで、以下の2種類のバッチを実装しました。
- 毎日画像を削除
- 年に1度メッセージの削除

#### ログ書き込み用のクラス作成
ログ書き込み用のクラスとは、呼び出すだけでログに処理結果を出力できるようにする処理のことです。

この作業の理解が低くて、何のためにこれやるんだろ…？なんなんだこれ？状態でした。
ただ、調べるうちに「○○がログインしました」「○○が××をしました」といったログを書き残しておけば、メンテナンスやセキュリティ対策にも役立つと知りました。
誰が何をしたかを明確に分かりやすく残すためにログへ処理結果を書き込みます。
この処理の大切さが分かり、学びになりました。

### 11/11〜11/13
- バッチ実装

このバッチがとても難しくて(自分の中で)、学びが多い実装でした。
メッセージが未読のまま数時間経った相手に対してリマインドメールを送るという内容でした。

メールアドレスは未読メッセージがあるアカウント、本文にはメッセージを送ったアカウント名を記載するという、ちょっと複雑なデータの取得に手間取り、解決までたどり着けず上司に引き継ぎました。悔しい。

### 11/14〜11/26
- 画面の実装

ある画面の実装を任されまして、こちらもとっっても勉強になりました。

### 学びが多かった実装たち
- フロントエンドからバックエンドへ検索条件を渡す
- Ajax
- アカウントごとに画面の一部の表示/非表示を切り替える
- 検索条件の保持
- 検索後のデータを編集しデータベースに保存

#### フロントエンドからバックエンドへ検索条件を渡す
最初はもう本当に何も分かりません状態でした(笑)

まず、laravelは「Controller」「Service」「Repository」に分けて記述するということに慣れるまで時間がかかりました。
また、HTMLはbladeというファイルに書くということも初めて知り、bladeのformで送信した値をController→Servise→Repositoryに渡し、RepositoryでSQLのクエリビルダを書いてデータを取ってくるという流れを理解しました。

「Controller」「Service」「Repository」のそれぞれの役割については以下の記事が参考になりました。
https://qiita.com/os1ma/items/25725edfe3c2af93d735
https://qiita.com/KyungJoon960/items/c474951c6dc3b80cb186

#### Ajax
JavaScriptで書く非同期処理(リロードせず画面の表示を変える技術)です。
今回は複数の検索条件を設定したので、上で選んだ条件によって下の条件をリロードせず表示させるためにAjaxという技術を使いました。
JQuery(JavaScriptのライブラリ)で書き、非同期で必要な条件だけ取ってくる実装を完了させました。
Ajaxについては以下の記事が参考になりました。
https://qiita.com/charita/items/42089ea96a962149c157

#### アカウントの権限ごとに画面の一部の表示/非表示を切り替える
アカウントによって権限が違う関係で、管理者側のみが見られる画面とユーザーが見られる画面で検索条件を細かく分ける必要があり、その分岐に苦労しました。

この後対応するデザインの当てこみにも影響しましたし、このアカウントで見られるはずのボタンがない？！といった不具合が起き、最後まで調整が必要でした。

#### 検索条件の保持
検索条件を設定して検索ボタンを押したとき、検索後の画面では検索条件が初期に戻ってしまう不具合がありました。
検索したあとも検索条件を引き継ぎたいとなったとき、どうやって保持するのか苦戦しました。

localstrageに一時的に保存する方法でプルダウンの条件は上手く行きましたが、チェックボックスのチェックの保持ができておりません、、
ここはまた出勤次第すぐ対応します。

#### 検索後のデータを編集しデータベースに保存
出力した検索結果を表で表示し、一部のセルを編集可能にし、データベースに保存する実装も難しかったです。
特にクリックしたらプルダウンになる→プルダウンを変更したらデータベースに保存
この実装の流れがなかなか掴めず、時間がかかりましたが完了しました。

### 11/27〜11/29
- デザインの当てこみ

見本を見ながらその通りに画面のデザインを当て込んでいきました。
cssの知識が少しあったのでこちらもスムーズに進み、自分が対応した画面以外の当てこみもさせていただきました。
cssのあて方も特徴があって、勉強になりました。

### 感想
未経験でありながら少し難易度が高い部分を対応させてもらい、とても勉強になりました。
期限も長めにとっていただき、最後まで対応させてもらえたことも大変ありがたいです。

バックエンドの知識は10月に学習したpaizaのみでしたが、分からないことは先輩に聞きながら、chatGPTにも助けを借りて実装できました。

間違った情報もあるchatGPTですが、検索スピードが早いので期限が決まったタスクをこなすのにとても重宝しています。

# 気づき、学び
たくさんありますが、未経験でエンジニアを目指されている方に向けた気づき、学びを共有します。

- 未経験こそコミュニケーションが大事
- 1つの言語をある程度使いこなすことができていれば、他の言語の習得もなんとかなる

### 未経験こそコミュニケーションが大事
未経験者が実務に入った時、ほとんどが初めて扱う言語や技術を使って、作業を進めなければなりません。
また、設計書や開発指示書を読んでいて、分からないな、、と思うことは必ずあります。

分からないことを調べるスキルは大事ですが、詰まったらすぐに助けを求めることも大事だなと感じました。

その理由は簡単で、個人で開発していたり、勉強したりしているときはなかった「納期」が、実務では必ずあります。

質問したり助けを求めたりするのが恥ずかしい、と思っているその時間も納期までの時間の一部になってしまうのです。

私もまだまだ未経験の域を出ないので、この考えを心に持ちながら、納期に遅れないように怖がらず質問していこうと思います。

#### 1つの言語をある程度使いこなすことができていれば、実務もなんとかなる
これも身に染みて感じたのですが、入社前にJavaScriptやReact、Firebaseを学習していたおかげでPHP・SQLがすんなり理解できました。

実務も分からないことだらけでしたが、自分でwebアプリを作ったことがあったおかげで分からないながらも調べたり聞いたりして完了させることができました。

自分で学習したり個人開発したことが役に立ったので、引き出しはたくさん作っておくことに越したことはないと考えます。
特にフロントエンドからバックエンドまで簡単でいいので1つwebアプリを作ることは本当に役に立ちます。
私の場合NoSQLでデータベースを構築してバックエンドを簡単にし、とりあえず完成させることを目標にwebアプリを作りましたが、そのおかげでバックエンドの理解が早かったように感じます。

今、学習や個人開発を頑張っている方も、その努力は絶対に今後役立ちますので、最後まで頑張って欲しいなと思います。

# まとめ
以上が転職してからの2ヶ月間でした。

実務をさせてもらえるのはもっと先だと思っていたので(研修期間が3ヶ月間のため)、こんなに早く仕事をさせてもらえてとても嬉しいですし、最後のテストまでやり抜きたいです。

また、次の案件も決まってるとの事で、楽しみです。

転職してから最初の1週間こそ緊張しましたが、毎日プログラミングができるので職場に行って続きをしたくてウズウズしています。

12月からは今の案件のテストに入るので、自分の作った画面が問題なく動くのか、しっかり検証しつつリリースまで走り切ります。

長くなりましたが、未経験者がエンジニアに転職した初めの2ヶ月間についてお話しました。

間違えている箇所や今後のアドバイス、質問等ありましたらお気軽にコメントをください。

また学びや共有したいことがありましたら、記事にしたいと思います。