Boolean変数した命名規則

6 min read

背景

Boolean 型の変数に適した命名規則をあらためて考えてみた。

適切な命名規則に従うことで、コードの可読性が向上しメンテナンス性も良くなる。

プレフィックス

Boolean 型の変数には、 ishasshould などの意味をもつプレフィックスを使用する。

// isを使った例
const isExpired = true;
const isFinished = false;

// hasを使った例
const hasPermission = true;
const hasError = false;

// shouldを使った例
const shouldShowModal = true;
const shouldFetchData = false;

プレフィックスを付ける理由は、その変数が真偽値を表していることが明確になり、コードの可読性を向上させるためである。たとえば、isExpired という変数名は、その変数が有効期限切れかどうかを表していることが明確になる。expired という変数名だけでは、何が期限切れなのかが明確ではない。

また、真偽値を表す変数にプレフィックスを付けることで、コードエディタのサジェストでヒットしやすくなる。

どのような条件なのか分かりやすくする

変数名には、真偽値がどのような条件を表しているかを示す名前を付ける。

// 有効期限切れかどうかを示す
const isExpired = true;

// 許可があるかどうかを示す
const hasPermission = true;

// モーダルを表示する必要があるかどうかを示す
const shouldShowModal = true;

変数名には、その変数の真偽値が何に対する条件であるかを示す名前を付ける。たとえば、isExpiredという変数名は、有効期限が切れたかどうかを表していることが分かる。これに対して、isEnabledという変数名だけではどのような条件に対して真偽値が返されるかを明確に表現できない。

否定形を避ける

// 🆖避ける例
const isNotExpired = false;

// 🆗推奨する例
const isExpired = true;

Boolean 型の変数を使う場合、否定系の単語を使うと、変数の意味が逆になってしまって、読みやすさが損なわれてしまう。たとえば、isNotExpiredは否定系の単語を使っているため、意味が逆転してしまい、読み手が混乱してしまうことがある。また、否定形を使うと条件式が複雑になって、読み手が理解するのに時間がかかることもある。そのため、できるだけ肯定系の単語を使うことを推奨する。たとえば、isExpiredではなく、isValidという単語を使うことができる。

同じ意味の単語を避ける

// 同じ意味を持つ単語を避ける例
const isAvailable = true;
const isEnabled = true;
const isAllowed = true;

// 避ける必要がない例
const hasPermission = true;
const canAccess = true;

同じ意味の単語を避ける理由は、開発者が同じ意味を持つ単語を違う方法で使うと、読み手が混乱してしまう場合もある。たとえば、isAvailableisEnabledisAllowedは同じような意味を持っているが、使う単語が違うので、開発者がそれらを使い分ける必要があると読み手が理解するのに時間がかかる。したがって、似たような意味を持つ単語を避け、プロジェクトで共通の命名規則を使うことが重要である。これによって、コードが読みやすくなり、メンテナンスやデバッグがしやすくなる。

プロジェクトの命名規則やコーディング規約に従う

// プロジェクトの命名規則に従った例
const isExpiredDate = true;
const hasEditPermission = true;
const shouldShowPaymentModal = true;

秩序を保つためにもプロジェクト全体で決めた書き方を守ることがまずは大切である。

プロジェクトで決めた命名規則やコーディング規約にしたがってコードを書くことで、ほかの開発者がコードを理解しやすくなり、コードの修正や保守もスムーズに行える。各プロジェクトによって規約は異なるため、プロジェクトの方針に合わせた規約へ従うことが大切である。


Linter で矯正する

もしフロントエンド環境で ESLint を導入していて、@typescript-eslintを利用している環境であれば、@typescript-eslint/naming-conventionルールを適用することで Boolean 型変数の命名に接頭辞をチェックできる。

// .eslintrc.js
module.exports = {
  // ...
  rules: {
    '@typescript-eslint/naming-convention': [
      'error',
      {
        selector: 'variable',
        types: ['boolean'],
        prefix: ['is', 'has', 'should'],
      },
    ],
  },
};

このページをシェアする

関連タグ

関連記事

[ESLint] 特定のimportにおいてパスの末尾スラッシュを禁止する方法

背景 / やりたいこと / @typescript-eslint/no-restricted-imports を利用した / 余談(末尾のスラッシュ自体を禁止にする)

[Next.js] Google Adsenseを表示させる方法

環境 / 条件 / 方法

[CSS] カスケードレイヤー(@layer)とITCSSの概念を組み合わせた設計を考える

カスケードレイヤーとは / ITCSS のレイヤー / ITCSS のレイヤーをカスケードレイヤーに落とし込む / 参考

[CSS設計] ITCSSとは

TL;DR / CSS の問題 / ITCSS / 参考

[CSS設計] ITCSSをプロダクトに利用した所感

CSS の問題点 / CSS 設計 / ITCSS とは / ITCSS のメリット / おわり / 参考