本記事は、Fusic Advent Calendar その2の17日目の記事です。
昨日の記事は、@nmbakfm によるActiveStorageで恒久的なURLを取得するでした!
はじめに
2019年ももう終わりですね。
私はこの4月からWeb業界に入りました。
HTML/CSS/JSの研修から始まり、
CakePHPのドキュメントを読みながらチュートリアルで学び、
5-6ヶ月間のOJTでは、経費立替申請を行える社内用Webシステムを作り上げるに至りました。
「ほ?DOMってなになに?」
状態だった自分が、
今Laravel・Vueで開発が出来ているのも、研修で基礎をしっかり作り上げてもらったからです。
(感謝の極み)
さてさて、本記事では、
この半年間+αを振り返るために、研修期間で頂いたレビューの数々をただただ羅列していきます。
皆さんにもこういう右も左も分からないという時期があったのではないでしょうか?
(「こんなのお前だけや」という声はグッと堪えましょう。)
※ 基本的にCakePHP関連です。
頂いたレビューをコメント付きで羅列
OJT前(〜2019年6月)
「マイグレーションにはup/down以外にもchangeがあるよ」
存在は知っていたものの違いが分からず、とりあえずup/downで書いてたところ、
このようにとても丁寧にコメントを書いて頂きました。
こんなに時間を使って書いていただけるのありがたいですね🙇♂️
「コメントアウトしてはダメですー」
当時csrfが何かよく分かっていなかったので、
ajax通信でcsrfが原因のエラーになったとき、Cake側のcsrfミドルウェアを切って「やったー通信できたー:D」とか言ってました。
正しくは、もちろんcsrf対策のミドルウェアは切らず(笑)、ajax通信にcsrfトークンを埋め込んであげることですね。
懐かしい
(Cakeのドキュメントもうちょっと書いてくれ。。ミドルウェア - 3.8)
「toList()は、ただの配列になってしまうので、ここでは正しくありませんー」
toList()では、idではなく配列の添字が入ってしまいます。
ここはfind(‘list’)にkeyFiledとvalueFieldを設定するのがよさそうですね。
OJT期間(2019年6月〜10月)
「toArrayって必要なのかな?」

そして、debugやconsole.logなどと同様に、コミット前にdiffでしっかり確認しましょう。
「言語の関数を活用しましょう」

私は一時期、手元にPHPの関数リファレンス本を横において開発していました。
様々なケースに対する実装例がまとめてあるので、たまに見ると面白いです。
「view側にSession情報をそのまま読むのはイマイチだなー」
Cakeのviewであるctpファイル内です。
当時は、MVCが何なのかよく分かっていませんでした。
ここで言われているのは、Viewは受け取ったデータを見せるだけ
でデータの加工とか他の処理はModel/Controllerでしましょうね
、ということです。
このコメントを頂いてからMVCについて少しずつ理解が出来てきました。
「この辺の判定はentityにまとめるとよいと思います。」
CakeはModelがTableクラスとEntityクラスに分かれており、処理の対象によって書き分ける事ができます。
例えば、このシーンであるレコードに対する判定を作るとすると、Entityに↓のようなgetter(アクセサー)を書くと良いと思います。
protected function _getIsReapplyable()
{
return
/* 条件1 */ ($this->application_status !== ApplicationsDefine::STATUS_RETURNED)
&&
/* 条件2 */ (!$this->admin_submit_flg);
}
もっというと、
・プロパティを利用する場合は、$this→properties[‘field name’]
のように書く
・条件1も _getIsReturned()
とgetter化する
とより良いかなと思います。
ちなみに、当時getterは仮想的なカラムを定義するものだよ
と言われてもよく意味が分からなかったのですが、
メソッドであるにも関わらずプロパティにアクセスするように$this→is_reapplyable
と書けるからだと少しあとに理解しました。
当時はこういう点もあまりよく分かっていなかったのです。
「これは『なぜ』これを返したいかを書いておいたほうがいいです。」

「これはfirst()で止めてしまうと、データがなかった時のことが検討されていないです。」
(もしtarget_month_idがないデータだったら、この行の時点でnullになり、→sumでPHPエラーが発生する)
データを取り出す時は、必ず存在するデータ
か存在しない可能性のあるデータ
かに注意する必要があります。前者の想定で仮にデータが無かった場合はシステムエラーであるため、しっかりExceptionを出しましょう。
「html でコメントアウトすると、ユーザーにコメントが見えてしまいますので、phpでコメントを書きましょう」

<?php /* 対象月表示*/ ?>
「cdn からjs や css をとってくる場合は、href=“//cdnjs.cloudflare.com/…” みたいに書くのが一般的です。」

「これController側の処理いらない?」

おわりに
まだまだ無数にありますが、上記のアドバイスらのおかげで考え方や視野が広がりました。
皆さまも今年一年をGithubで振り返ってみるのはいかがですか?
振り返りで何かまた得られるものがあるのではないかと思います。
また、本記事を読んで、自分もこんな時があったなと懐かしい思いにふける一方、
新人のレビューをする際には、こういう点が分かっていないんだろうな、という何かのヒントになればいいなと思います。
それでは良いお年を。
明日は @seike460 です!お楽しみに!