Laravel8でのコードレビューのメモ

Laravel8でのコードレビューのメモ

52 回閲覧されました

みなさんこんにちは、jonioです。

最近ChatGPT4にコードレビューをしてもらっているのですが次に同じことをした時にレビューに引っかからないようにメモとしてこの記事を残します。

新しい内容が出るたびに追記します。

やりたいことが伝わる変数名・メソッド名・アクション名にする

複数人で開発をしている時にいい加減な名称をつけると自分は分かっても他人が分かりません。

また1週間経った時に自分で見ても何に対する名称なのかが分からなくて理解するのに時間がかかります。

いい例が「index」アクションです。

PostsControllerのindexアクションだったら「投稿の一覧かな〜」って連想できますが複数の種類の一覧があると何に対しての一覧なのかが分からないので投稿の一覧なら「postsIndex」とした方が可読性が上がると思います。

条件を絞り込んで表示するときはコントローラーで行う

下記のコードを書いたとします。

//アクション

public function index()
{
  $demos = Price::all();

        
  return view ('price.index', compact('demos'));
}


//ビュー
@foreach($demos as $demo)
  @if($demo->flag == 0)
    {{ $demo->title }}
  @endif
@endforeach

コントローラーで全ての情報を取得してビューで表示する時に絞り込みをするのではなく最初からコントローラーで絞り込みをします。

修正したコードが下記になります。

//アクション

public function index()
{
  $demos = Price::where('flag', 0)->get();

        
  return view ('price.index', compact('demos'));
}


//ビュー
@foreach($demos as $demo)
  {{ $demo->title }}
@endforeach

データがない時も考慮に入れる

foreachでデータを表示できますがデータがまだない場合もあります。

その時にforeachが動作すると無駄な処理が入ってパフォーマンスが落ちるのでただforeachを書くのはよくないです。

コードを下記にします。

@forelse($demos as $demo)
  データがある時の記述
@empty
  データがない時の記述
@endforelse

長ったらしくなる書き方をせずまとめる

下記の書き方をしたとします。

Price::select(DB::raw('YEAR(created_at) as year'), DB::raw('MONTH(created_at) as month'), DB::raw('SUM(total_price) as total_price'))->groupBy(DB::raw('year'), DB::raw('month'))->orderBy(DB::raw('year'), 'ASC')->orderBy(DB::raw('month'), 'ASC')->get();

可読性を上げる為にまとめることができる所はまとめた方がいいです。

また「→」の位置も揃えた方が可読性は上がると思います。

Price::selectRaw('YEAR(created_at) as year, MONTH(created_at) as month, SUM(total_price) as total_price')
->groupBy('year', 'month')
->orderBy('year', 'ASC')
->orderBy('month', 'ASC')
->get();

コミットメッセージの書き方

下記の書き方をしました。

月額の使用料金を表示
$monthly_total_pricesは月毎に使ったお金
Models/Price.phpの$fillableでdelete_flagを許可して$attributesでデフォルト値を0に設定
price/index.blade.phpでデータがない場合もあるのでforeachをforelseに変更また月毎に使った金額の項目も追加

メッセージの書き方は下記にしないといけないみたいです。

  • タイトル行 : 変更の概要を簡潔に記述(50文字以内が推奨)。
  • 本文 : 変更の詳細を記述。必要に応じて複数行にわたる説明を追加。各行は一つの変更点にフォーカスし、具体的に何をしたのか、なぜそれが必要だったのかを説明。

よって下記に変更しました。

月額の使用料金を表示
- $monthly_total_pricesを追加して月ごとの使用料金を計算
- Models/Price.phpでdelete_flagを$fillableに追加しデフォルト値を0に設定
- price/index.blade.phpでデータがない場合に備えてforeachをforelseに変更
- 月ごとの使用料金を表示する項目を追加