OJT期間で学んだことをまとめてみた

https://note.com/projapan/n/n7bac181a5620

# はじめに
　入社してから数ヶ月、キリの良いタイミングということで今まで学んだことをアウトプット出来ればと思い書きました。
　今回の記事ではOJT期間中に学んだこと、感じたことを書いていこうと思います。細かい事まで書くとどこまで書けばいいのか分からなくなりそうなので、ざっくりと学んだことやOJT期間中のタスク管理について書いていきます。

OFF-JT期間にどんなことをしていたかは是非上の記事をお読み下さい！

# この記事の対象者
新人エンジニアの方

# 目次
1.入社前の基礎知識～Off-JT期間
2.OJT期間
3.フレームワーク（cakephp）を利用するにあたって
4.レビューをお願いする前に気を付けること
5.テストについて
6.セキュリティ
7.タスクの管理について
8.OJT期間中に感じた不安とか
9.終わりに

# 1.入社前の基礎知識～Off-JT期間
## 入社前
私は大学で情報系の学部で学んでいました。（一応）
主に学んだのはc言語やITの基礎的な部分。基本情報技術者試験に出てくるようなことからどこで使うのそれ～と思うようなことです。
テキストエディタはemacsを利用していたので研修中にvscodeを使ったときに感動しました。拡張ツール偉い。（vscodeは大学在学中にはほとんど使用してませんでした）
Linuxは在学中に利用していたのでそこはありがたかったですね。
## Off-JT期間
詳しくはこちらで→https://note.com/projapan/n/n7bac181a5620

# 2.OJT期間
### OJT期間中の流れ
環境構築(cakePHP4)→テンプレートエンジン（smarty）の導入→研修中に作成した画面を移行→ログイン機能の実装→テストケース作成→テスト実施→バグ修正

環境構築のときに以下の記事も書きました。
[cakePHP4をインストールしてVScode でRemoteContainerにdocker構築してみた](https://qiita.com/tajima_haru/items/a8a4aba912d285868e56)

### cakephp4について
新人エンジニアのみなさんはフレームワークって知っていますでしょうか。
ちなみに私は聞いたことすらなかったです。フレームワークとは簡単に言えば開発を助ける機能の詰め合わせのようなものです。
今回のOJT期間中ではCakePHP4を利用して開発を行いました。
CakePHPの特徴として、MVCアーキテクチャで構築されたフレームワークとなっていることが挙げられます。
**MVCアーキテクチャ**
**Model（モデル）**：データベースとのやり取りを行う機能
**View（ビュー）**：ブラウザへの表示を行う機能
**Controller（コントローラー）**：全体の制御を行う機能
それぞれの機能が独立しているので担当を決めて開発しやすいです。

加えてbake機能というものがあり、ベースとなるコードを簡単に生成することができます。
今回のOJTではsmartyというテンプレートエンジンを利用したのでこの機能はView部分ではあまり使いこなせませんでしたが、コントローラやモデル作成時には大変ありがたかったです。


## 3　フレームワーク（cakephp）を利用するにあたって
**環境構築から始める**
　とにかく素人でありますから環境構築が難しい作業であったことは確かです。（ある意味楽しい）開発に辿り着くまではこれ進んでるのか…？と疑心暗鬼になってしまうこともありました。しかし乗り越えた先には便利な開発が待っていると思いワクワクしながらCakePHPの環境構築をしてました。やっとcake使える！ってなった時は感動。笑
環境構築は**分からないことを一つづつ潰していく。違ったら別パターンを試していく**のが結果的に問題の解決に近づいて行きました。（実際何に対してもそうなのかもしれません）
　
**フレームワークって色んな機能が最初からあるなら簡単に開発出来るじゃん。**
　そうです。フレームワークは便利なんです。ただ使いこなせるようになるには慣れなのかもしれません。まず、MVCアーキテクチャってなんなのか分からない。MVCは分かったけどどうやって使うのか分からない。データベースからのデータの取り出し方が分からない。etc....
とにかく調べても調べても分からないことだらけなのでどう取り組むか分からない状態になりました。
CakePHPの分からないことは**公式に聞く**といいです。CakePHPは特に日本語のサイトが充実してるので便利でした。

<dl>
 <dt>分からないときの取り組み<dt>
 <dd>公式を見る</dd>
 <dd>簡単なコードを書いてみる。</dd>
 <dd>人に聞こう（何でも）</dd>
</dl>

フレームワークを扱うことで調べる力が少しついたような気がします。

## 4　レビューをお願いする前に気を付けること
　書いたコードをgitでプルリクエストするとき気を付けるべきことは多くあります。
　見てもらう立場であることを忘れずに理解しやすいコードを心掛けるべきです。リーダブルコードを意識したコードを書くようにします。
[リーダブルコード要約](https://qiita.com/gfmc121212/items/b140e1ee6a6e3c64e687)
　CakePHPにはコード規約もあります。（途中まで知らなかった。）フレームワークに沿ったコードを書くことで期待してる動作を行うことが出来るようになりこともあります。
[CakePHP4のコード規約](https://book.cakephp.org/4/ja/contributing/cakephp-coding-conventions.html)
 プルリクエストのマージをお願いするときは編集している部分のみ差分として見てもらう。そのほうが見やすいですよね、手間も減ります…

<dl>
 <dt>レビューをお願いする前に気を付けるべきこと<dt>
 <dd>リーダブルコードを意識したコードを書く</dd>
 <dd>修正点以外は差分として表示させない</dd>
 <dd>☆レビューしてもらっているということを忘れない</dd>
</dl>


## 5　テストについて
　テストを作成するのは正解があるのか分からないので苦手でした。機能が十分に足りているか(正常系)、予期せぬ操作に対応出来るか(異常系)、想定の範囲内の予定外の操作に対応出来ているか（準正常）。これらは各テストレベルの目的に合わせて実行するべきです。
　テスト後には問題なかったと証明できるエビデンスを作成しておきます。（テスト実行後の画面のスクリーンショット等）

<dl>
 <dt>テストで気を付けるべきこと</dt>
 <dd>誰がやってもできるテストを作成する。</dd>
 <dd>テスト観点(何をテストするものなのか明確にする)</dd>
 <dd>エビデンスは誰が見ても理解出来るものをとる</dd>
</dl>

## 6　セキュリティ
　**脆弱性を知らないと問題も対策も分かりません。**なのでまず大事なことは脆弱性を知ることだと思います。
　CakePHPはある程度の脆弱性を自動的に対処出来ます。今回意識して対策しようとしたのはcsrf,XSS,sqlインジェクション等ですが、このうちcsrf,sqlインジェクションはCakePHPが色々とやってくれるのであまり意識しなくとも解決はしてくれちゃったりします。
　様々な脆弱性が存在するので、全てに対応するのは難しい。知識も足らなければそこまで意識する余裕があるとも思えません。少なくとも今回出したcsrf対策,XSS,sqlインジェクションは頭の片隅に収納しておきます。そうすれば他のセキュリティ対策にも目を向けることが出来るんじゃないかなと思います。
こちらのサイトではcakePHPのセキュリティ対策について書いてくれています。
[CakePHP セキュリティ対策について考える（SQLインジェクション、XSS、CSRF）](https://hijiriworld.com/web/cakephp-security/)

## 7　タスクの管理について
　タスクの時間管理をかなりやらせていただいたのでとても良い経験になりました。しかし、上手くやれた気は全くしません。難しい…
特に自分の課題として常にあったのが、不明な点が膨大過ぎるとき期限をいつまでにすべきか分からないという点でした。ある程度は経験則かもしれませんが...
　タスク管理するときは最終的には以下のこんなことを意識すべきという結論になりました。

<dl>
 <dt>タスクを管理するときに意識するべきこと</dt> 
 <dd>☆2割共有する</dd>
 <dd>見た時に分かりやすい状態にする</dd>
 <dd>残作業を書き出す</dd>
 <dd>不明な部分の粒度を細かくしていく</dd>
 <dd>エビデンスを元に期限を決める</dd>
 <dd>難しいことから取り組む</dd>
 <dd>他人が絡む作業は予期せぬ事態になる可能性があるので早く対処する</dd>
</dl>

<dl>
 <dt>期限に間に合わないとき</dt>
 <dd>分かったタイミングで相談</dd>
 <dd>間に合わない原因を残す→次回のタスク管理に利用する</dd>
</dl>

## 8　OJT期間中に感じた不安とか
　OJT期間中によくある？かもしれない不安が一つあります。
勝手に言っているだけですが『隣の芝生が青く見える現象』です。
会社の同期のみならず、情報系の学部だった故に大学の同期もIT系に行っている人が多かったです。話をするときに必ず話題に上がるのが「今、何やってる？」です。笑
　当たり前ですが、それぞれやることは違いますよね。自分と違うことをやっていることに少し不安を覚えてしまいました。ありがたいことに先輩と相談する機会は何度も頂けたのでそんな不安は実務に入ったときにちゃんと出来るのだろうか....なんて不安に遷移していきましたが。
不安に解決策はなかなかないと思いますが相談するのが一番いいと思います。
なので、これからも相談を大切にしていきたいです。

結局、気にしてもしょうがないことは気にしない方がいいんでしょうね。笑

『何もできないので伸びしろしかない』
そんなメンタルでこれからも成長出来たらなと思います。
　

## 9　終わりに
　多くのことを学ぶ機会を頂きましたが、この記事では学んだ中でもこれからも意識し続けるべきことを簡単にではありますがまとめさせていただきました。たまに見ては初心を取り戻せればなと思います。


# 参考
[CakePHPとは？基礎知識とできることをわかりやすく解説](https://hnavi.co.jp/knowledge/blog/cakephp/)
[リーダブルコード要約](https://qiita.com/gfmc121212/items/b140e1ee6a6e3c64e687)
[CakePHP4のコード規約](https://book.cakephp.org/4/ja/contributing/cakephp-coding-conventions.html)
[CakePHP セキュリティ対策について考える（SQLインジェクション、XSS、CSRF）](https://hijiriworld.com/web/cakephp-security/)