システム開発

Web System

hero

コードレビューについて

 

コードレビューで意識することをまとめていきます。

 

マジックナンバーが含まれていないか

マジックナンバーとは、コード内に直接数値リテラル(例えば 3 や 100 などの数値)が埋め込まれていて、その意味が分かりにくい状態のことを指します。
マジックナンバーがあると、コードが読みにくく、メンテナンスや拡張が難しくなるため、良いコーディング習慣では避けるべきものとされています。

 

たとえば、次のようなコードがあります

if (user.age >= 18) {
    console.log("User is an adult");
}

この 18 という数値は「成人年齢」を表していると推測できますが、コードだけでは具体的な意味が明確にされていません。このような状況では、将来的にその値を変更する際や他の人がコードを理解する際に困難が生じる可能性があります。

 

マジックナンバーを避ける方法

マジックナンバーを避けるためには、その数値に意味を持たせた定数を使う方法が一般的です。

const ADULT_AGE_THRESHOLD = 18;

if (user.age >= ADULT_AGE_THRESHOLD) {
    console.log("User is an adult");
}

このように定数を使うことで、コードの可読性が向上し、値の意味が明確になります。また、同じ値を複数箇所で使用している場合にも、一箇所で定義するだけでメンテナンスがしやすくなります。

 

 

条件が複数ある場合は、その条件を変数に分解してから if 文に入れる

コードの可読性が向上し、条件の意図が分かりやすくなります。また、同じ条件を再利用する場合にも便利です。

 

たとえば、以下のような場合を考えます

// before: 複雑な条件が直接if文に入っている
if (user.age >= 18 && user.isMember && (user.subscription === 'premium' || user.subscription === 'standard') && !user.isSuspended) {
  console.log("User has access");
} else {
  console.log("Access denied");
}

上記のコードは条件が長く、何をチェックしているのかが一目で理解しにくいです。これを変数に分解して、条件を整理しましょう。

 

リファクタリング後

const isAdult = user.age >= 18;
const isMember = user.isMember;
const hasValidSubscription = user.subscription === 'premium' || user.subscription === 'standard';
const isActive = !user.isSuspended;

if (isAdult && isMember && hasValidSubscription && isActive) {
  console.log("User has access");
} else {
  console.log("Access denied");
}

isAdult, isMember, hasValidSubscription, isActive という名前をつけることで、各条件の意味が分かりやすくなります。

if 文がシンプルになり、何を確認しているのかが読みやすくなります。

 

さらに関数化する例

場合によっては、条件ごとに関数を作成すると、さらに可読性が高くなることがあります。
たとえば、アクセス権限を確認するロジックを関数化する方法です。

const isAdult = (user) => user.age >= 18;
const isMember = (user) => user.isMember;
const hasValidSubscription = (user) => user.subscription === 'premium' || user.subscription === 'standard';
const isActive = (user) => !user.isSuspended;

function hasAccess(user) {
  return isAdult(user) && isMember(user) && hasValidSubscription(user) && isActive(user);
}

if (hasAccess(user)) {
  console.log("User has access");
} else {
  console.log("Access denied");
}

このように、条件ごとに関数を分けることで、個々の条件を再利用できるようにもなり、テストも行いやすくなります。
条件がさらに複雑になる場合、関数を使用することで、コードの管理が容易になります。

 

 

PHPDocを書きましょう

PHPDocとは、PHPのコードに対してドキュメントコメントを追加するための規格です。
このコメントは、コードの可読性を向上させ、他の開発者や自分が後からコードを理解しやすくするために使用されます。
PHPDocコメントを使用することで、IDE(統合開発環境)やドキュメント生成ツールがコードの説明を理解し、自動的にドキュメントを生成したり、コード補完を提供したりすることが可能になります。