【小ネタ】未経験者が実務に入ったら最初にやること＆事前にやっておきたいこと

## 1. 前提
・30代前半、IT業界未経験。
・私がWebエンジニアを目指し始めたのは2020年5月のこと。
・Progateなどで学習を開始してLaravelでアプリを作って転職活動して12月に内定..という流れです。
・2021年3月よりバックエンドエンジニアとして実務を開始しております。

## 2. どんな記事？
実務に入ると初日からやることがたくさんあります。
私自身、実務開始から半月が経過したので、これから未経験で実務に入る方が入社時のイメージが持てるように、ざっくりとやること&準備できることを記しておきたいと思います。技術的な部分はバックエンドの内容が中心になりますが、おおよそ職種で共通することも多いと思うのでフロントな方もお読みいただけたら嬉しいです。

<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675596/efff59e9-35a8-3224-8295-fded585666ae.png width=35%>
初日は挨拶や基本の研修などが済んだら、PCを受け取って作業開始。
私の会社ではMacBook Proが支給されたので、慎重に開封の儀を行いつつ早速設定作業をやっていきます。

## 3. やること
### ①コミュニケーションツールの導入

|項目|目的と位置付け|やること|
|:--|:--|:--|
|Gmail|会社のメールを使えるようにする|GoogleアカウントとGmailを登録|
|Slack|コミュニケーションの要|会社のアドレスでワークスペースに招待してもらう|
|oVice|バーチャルオフィス|Slackに招待リンクをもらう|
初日で最優先すべきはコミュニケーションツールを使える状態にすること。
私の場合、1日目こそオフィス出社だったものの翌日からは在宅での勤務だったため、これがないと何もできないという位置付けでありました。
外部のネットワークからアクセスできることも確認する必要があったので、iPhoneのテザリングでもテストしてみます。

ここまでできたら、Slackで会社の方々に挨拶と自己紹介をすると良いでしょう。
またリモートワークだと自分を知ってもらう機会がほとんどないので、各種プロフィールも充実させておくと打ち解けやすいと思います。

### ②開発管理と開発環境の整備
|項目|目的と位置付け|やること|
|:--|:--|:--|
|Git|バージョン管理|ローカルにUser作成|
|GitHub|ソース管理プラットフォーム|登録してorganizationに招待してもらう|
|VSCode|コードエディタ|インストールしたら必要なプラグインや設定などを|
|Backlog|タスクやスケジュール管理|招待してもらって登録|
このあたりはエンジニアとして仕事をしていく上で欠かせないものですね。
管理ツールやエディタの種類は現場によるので、それぞれ必要に応じて導入する形になります。

### ③各種クライアントツールの導入
|項目|目的と位置付け|備考|
|:--|:--|:--|
|GitKraken|GitのGUIツール|SourceTreeあたりの方がメジャーかも|
|TablePlus|SQLのGUIツール|Sequel Aceあたりの方がメジャーかも|
こちらも現場によって種類は異なりますし、そもそも使わないとかもあるので状況に応じて。

### ④会社の手続きあれこれ
|項目|目的と位置付け|備考|
|:--|:--|:--|
|労務管理あれこれ|勤怠や給与の管理を行う|社員情報とか登録|
|案件管理あれこれ|自社のプロジェクトの稼働状況が見れる|招待してもらってログイン|
|Qiitaや社内ブログ|情報の発信や共有|organizationに入れてもらう|
それなりの規模の会社だと事務手続きや管理するアカウントもたくさんあるので、留意しておきたいところです。
基本的な手続きは入社前に終えていたのですが、それでもやることはたくさんあります。。

このあたりまでできたらPCをより快適に使うために、いろいろとカスタマイズしておくと良いでしょう。
ユーザ辞書とかFinderの設定とか、MacならAlfledやiTerm2などのツール導入と設定とかそのあたりです。


## 4. 実務的な作業
ツールとアカウントの設定や庶務が終わったら、会社によって研修に入るコースと実務にアサインされるコースがあるかと思います。私の場合は相談しながらどちらか選べる感じだったのですが、実務未経験ではあったものの個人開発や共同開発などである程度勉強はしてきていたということもあり、より成長の早い(と思われる)実務アサインコースへ進むことになりました。

ここからは特に現場によってやることは異なってくると思うので、１つの事例として読んでいただければと思います。

### ①ローカル開発環境を構築する！
実際の案件をやることになったら、まずはローカルでの開発環境を構築することから着手します。
・Dockerをインストールする
・リバースプロキシを設定する
・GitHubからプロジェクトをクローンする
・環境ファイルやdockerfileなどその他の必要なファイルなどを共有してもらう
・コンテナを起動してアプリケーションを稼働させ、ブラウザやDBにアクセスする
(だいたいここでうまくいかなかったりするので、自走しつつ適宜助けてもらうことになります..)

### ②デプロイできるようにする！
最初は新規でコードを書くよりも既存案件の修正対応が多いと思いますが、
修正作業が終わったら上長に確認をいただきつつ、稼働している環境にデプロイ反映させる必要があります。

デプロイ方法も案件によって異なるのですが、私が最初にアサインいただいた案件では<a href=https://deployer.org/docs/getting-started.html>Deployer</a>を使用していたので、その導入を行いつつサーバーへのSSH接続の設定などを行います。

・Deployerをinstallしつつ、サーバーにsshで接続できるようにする
・公開鍵ペアを作成し、公開鍵をサーバー管理者に登録してもらう
・踏み台サーバー(外部ネットワークから接続できるようにするための別のサーバー)の設定なども必要
..と、このあたりは解説すると長くなるので(いつか)別記事にまとめたいと思います。
※追記：最近はGitHub Actionsを導入している案件が多めです

### ③アサインされた案件でコードをいじる！
環境構築やデプロイ準備までできたら、実際にコードをいじっていきます。
私の場合は既存案件の修正対応や機能追加だったので、ディレクターや先輩から指示を貰ってやりとりしながら、目的の形にしていきます。作業が完了したらGitでプルリクエストを作成したり、デプロイ作業を行います。

## 5. 【おまけ】 実務に入る前に学習しておいた方が良いと思うこと
### ①GitをGit-Flowブランチモデルで習得しておく
一般に学習期の個人開発ではmaster(main)ブランチのみで作業している方も多いですが、実務を想定したブランチモデルで自分でプルリクエストする形とするか、コミュニティなどで共同開発の経験を積んでおいたほうが良いです。
具体的にはmain, develop, featureなどのブランチがあって、実装はfeatureブランチで行うやつですね。
実務ではこの辺が理解できていることが前提になります。

またGitは一般的にCLI(コマンド)で操作することが多いと思いますが、会社や現場によってはCLIではなくGUIツールで作業する場合もあります。ですので、無料で使える<a href=https://www.sourcetreeapp.com/>SourceTree</a>あたりは触れておいても良いかもしれません。
(私の場合はGitKrakenが推奨でした)

### ②Linuxの基本コマンドは習得しておく
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675596/2145565e-3370-cc4c-9fb9-fcf90267f9c9.png width=30%>

特にバックエンドの場合ですが、これは全ての仕事の土台になると思います。
いきなりシェルスクリプトを作ることはないですが、各種ファイル操作やviでファイル編集などはできて当たり前という位置付けになります。先輩に画面共有しながらテキパキと操作を行うシーンもあるので、スムーズにコマンド操作ができるように日頃から手を動かして習得しておきたいものです。

### ③データベースあれこれを知っておく
「MySQLでクライアントツールに接続して〜」という指示を先輩からもらったりします。
学習期にフレームワークでORMのみを使っているとDBML自体の使い方はあまり馴染みがないかもしれませんが、DBはCLIでもGUIでも普通に使えるようにしておきたいものです。

### ④SSHとか公開鍵認証とか理解しておく
「サーバーにSSH接続して〜」とか「鍵を作成して送って〜」というのも言われます。
テスト環境や本番環境のサーバーを触るので具体的な作業は先輩に確認しながらになりますが、
SSH接続や公開鍵の仕組みぐらいは理解しておかないと、そもそも話についていけないということになります。。

### ⑤ネットワークなどの基礎概念を学んでおく
ポートとかIPアドレスとかリバースプロキシとか、そういうやつです。
Webエンジニアの実務なので当然ではありますが、理解している前提で会話が飛び交います。

鍵の話もそうですが、このあたりでオススメなのは基本情報技術者の午前試験レベルを勉強することです。
<a href=https://www.amazon.co.jp/%E3%82%AD%E3%82%BF%E3%83%9F%E5%BC%8F%E3%82%A4%E3%83%A9%E3%82%B9%E3%83%88IT%E5%A1%BE-%E5%9F%BA%E6%9C%AC%E6%83%85%E5%A0%B1%E6%8A%80%E8%A1%93%E8%80%85-%E4%BB%A4%E5%92%8C03%E5%B9%B4-%E3%81%8D%E3%81%9F%E3%81%BF%E3%82%8A%E3%82%85%E3%81%86%E3%81%98/dp/4297117819/ref=pd_lpo_14_t_0/356-0280583-4175914?_encoding=UTF8&pd_rd_i=4297117819&pd_rd_r=b847f93c-9bd4-42aa-b482-063259680970&pd_rd_w=rhNw4&pd_rd_wg=1ThNv&pf_rd_p=cb2cef9d-b0a3-4b58-a575-45abfc5e07e8&pf_rd_r=PKCB4PWHF6WSDN12T11P&psc=1&refRID=PKCB4PWHF6WSDN12T11P>キタミ式イラストIT塾</a>あたりの参考書ならマンガを読む感覚でわかりやすく勉強できます。そのまま広く学習しつつ午後試験も対策してしまって、資格取得に挑戦してしまうのも大いにアリだと思います。


### ⑥Dockerはやっぱり学んでおく
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675596/f637f43d-f9a7-db95-4ee0-feb75f8b7312.png width=25%>
一部SNSでは「現場でいきなり使わないので初学者はDockerまでやらなくて良い」といった意見もありますが、普通にDockerは使います。
むしろ使えて当たり前な空気感でもあるので、概念理解しつつ基本的なコマンドや環境構築は身に付けておいた方が良いと思います。(逆に「Dockerって何？」って感じだと辛いと思われますね。。)

### ⑦タイピングスキルは習得しておく
これはデスクワークなら当然ですが、特にリモートでの勤務の場合Slackでのやり取りがメインになるので素早く文章を作成できるのは必須なスキルです。またオンラインでミーティングをしながらブラインドタッチでメモや議事録を作成することになります。
ですので、目安としては寿司打で手元をほとんど見ずに1万円コースを余裕でクリアできるようにしておきたいものです。

### ⑧Notionなどのメモツールを整備しておく
<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675596/6336d284-9403-5065-b30d-12421d5af6c2.png width=30%>
これは好みが分かれるところではありますが、Webアプリ上で使えるメモツールは使えるようにしておきたいものです。
初日〜２週間はめちゃめちゃ覚えることや整理しておくことが多いので、仕事上のメモだったりプログラミングノートをどのように整理していくか、その基盤はしっかり準備しておいたほうが良いと思います。
<br>
以上、やや主観的な情報も多分に混ざりましたが最後までお読みいただきありがとうございました..！