レビューで保守性のためにした
コメントをふりかえってみた
2021/12/1
株式会社ラクスさま主催
エンジニアの勉強法ハックLT- vol.6
hiro(@etBeEP5e7dwmw7P)
廣川 高久
hiro(@etBeEP5e7dwmw7P)
技術スタック Laravel,vue.js,postgresql
最近取り組んでいること
・月1回 LT発表
・テストコード(コードカバレッジ、laravel dusk導入)
・ノボロックウォーク21(ボルダリング)
・Go
保守性とは?
メンテナンスのしやすさ
(英: Maintainability)
保守性がないとどうなるの?
どこになにが書いてあるのかわからない ☠
コードが古文書みたいで読むのに時間がか
かる☠
追加開発したらバグが発生した ☠
後々コード見る開発者 (未来の自分)が地獄を見ます☠
①名前が変数・処理の内容を表している
②FW・言語が提供する機能の使用
③1つの処理でやってることがハッキリしている
保守性の高いコードの具体例
ここからは Laravelのコードを例に、
具体例をいくつか紹介していきたいと思います!
Point1. 名前が変数・処理の内容を表している
☠チェックした結果が int? bool? 取得したデータ?
function checkActivePost(int $product_id)
{
return Post::where('id', $product_id)->where(‘active’, true)->exists();
}
function searchByUserId(int $user_id)
{
return Post::where('user_id', $user_id)->get();
}
☠戻り値が array? colletion?
Point1. 名前が変数・処理の内容を表している
☠チェックした結果が int? bool? 取得したデータ?
function checkActivePost(int $product_id)
{
return Post::where('id', $product_id)->where(‘active’, true)->exists();
}
function searchByUserId(int $user_id)
{
return Post::where('user_id', $user_id)->get();
}
☠戻り値が array? colletion?
Point1. 名前と型・処理内容の一致
function searchByUserId(int $user_id)
{
return Post::where('user_id', $user_id)->get();
}
function getByUserId(int $product_id)
{
return Post::where('user_id', $user_id)->get();
}
get()を使ったメソッドということがわかる!
Point1. 名前と型・処理内容の一致
function checkActivePost(int $product_id)
{
return Post::where('id', $product_id)->where(‘active’, true)->exists();
}
function isActive(int $product_id)
{
return Product::where('id', $product_id)->where(‘active’, true)->exists();
}
結果がbool値であることが直感的にわかる
Point2. FW・言語が提供する機能の使用
戻り値が array? colletion(ラッパークラス)? わからない。。。
$review = Review::where($request->product_id)
->where($request->user_id)
->find();
if (is_null($review)) {
Review::create($request->validated());
} else {
$review::update($request->validated());
}
ユーザーがある商品のレビューをしたことがあれば更新、なければ新規登録
意味はわかるが、処理が冗長
Point2. FW・言語が提供する機能の使用
戻り値が array? colletion(ラッパークラス)? わからない。。。
$review = Review::updateOrCreate(
[
'product_id', $request->product_id,
'user_id', $request->user_id
],
[
'title', $request->title,
'body', $request->body
]
);
FWが提供するメソッドを使っているので、何をしているかが簡単にわかる
Point3. 処理が分割されている
public function show(Request $request)
{
// 1.入力値のバリデーション
$validator = Validator::make($request->all(), [
'post_id' => 'required|integer|exists:posts.id|'
]);
// 2.商品情報の取得
$post = Post::find($request->post_id);
// 3.ユーザーのアクセス権限チェック
if (! Gate::allows('show-post', $post)) {
abort(403);
}
// 4.表示用に情報を整形
$post->stockStatus();
}
いろいろな処理を1つのメソッドに集約している
Point3. 処理内容がクラスの責務で分割されている
public function show(ShowRequest $request)
{
// 入力値のバリデーション・認証は ShowRequestで済
// 情報の整形はResourcesで行う
return Post::find($request->post_id);
}
クラスごとで行う処理が明確になり、
機能を変更する時の見通しが立ちやすい!
保守性に関する指摘は、
個人の好みが反映されやすいところもあります。
たがいを尊重するきもちも忘れずにレビューをしましょうね♪
保守性に関する指摘は、
個人の好みが反映されやすいところもあります。
たがいを尊重するきもちも忘れずにレビューをしましょうね♪
本日もありがとうございました
12/17(水)PHP8.1をもっと語り合うPHP TechCafe
でお会いしましょう!

レビューで保守性のためにした コメントをふりかえってみた