React Japan light logo
article hero
Steven Sacks
スティーブン・サックス

ESLint - 意見の分かれるルール

これらのルールはより主観的です。なぜこれらを使用するのかについて説明します。使用するかどうかは自由に決めてください。

命名規則の徹底

このプラグインは、プロジェクトで使用する命名規則の自動強制を提供します。README にその使用方法が説明されています。ルールは主観的で、あなたの会社が名前を付ける方法に基づいています。

自動的に命名規則を強制するルールを持つことは、プロジェクトに新しく参加する人々にとって特に時間を節約し、コードレビューで命名規則を取り上げる必要がなくなります。

const checkFileConfig = [
  {
    plugins: {
      'check-file': checkFile,
    },
  },
  {
    files: ['app/**/*'],
    name: 'check-file',
    rules: {
      'check-file/filename-naming-convention': [
        'error',
        {
          // React hook files must be camelCase (to match the hook name)
          '**/hooks/*.{ts,tsx}': 'CAMEL_CASE',
          'app/state/*.tsx': 'KEBAB_CASE',
          // React component files must be named index.tsx
          'app/{components,pages}/**/!(assets|hooks|state|tests|utils)/*.tsx':
            'index+()',
          // Generally, non-component files must be named kebab-case
          'app/{components,pages}/**/!(hooks)/*.ts': 'KEBAB_CASE',
          // Non-component files inside specific components folders must be kebab-case
          'app/{components,pages}/**/(assets|state|tests|utils)/*.{ts,tsx}':
            'KEBAB_CASE',
          'test/**/*.ts?(x)': 'KEBAB_CASE',
        },
        {
          ignoreMiddleExtensions: true,
        },
      ],
      'check-file/folder-match-with-fex': [
        'error',
        {
          // require stories and test files to be inside tests folders
          '*.(stories|test).{ts,tsx}': 'app/**/tests/',
        },
      ],
      'check-file/folder-naming-convention': [
        'error',
        {
          // enforce PascalCase component folders, and allow assets, hooks, tests, and utils subfolders
          'app/components/**/':
            '(assets|hooks|state|tests|utils|[A-Z][a-zA-Z0-9]*)',
        },
      ],
    },
  },
  {
    files: ['test/**/*.*'],
    name: 'check-file/test-files',
    rules: {
      'check-file/filename-naming-convention': [
        'error',
        {
          'test/**/*.ts?(x)': 'KEBAB_CASE',
        },
        {
          ignoreMiddleExtensions: true,
        },
      ],
    },
  },
];

アロー関数のみを使用

React は関数型プログラミング原則に基づいて構築されています。関数型コードは、アロー関数を使用して最もよく書かれます。すべて関数にアロー関数を使用することで、コードに一貫性が生まれます。

ルールセットにprefer-arrowプラグインを追加することで、これを強制することができます。

私がアロー関数のみを使用する他の理由:

  • 既に多くの場所で使用されており、クロージャーや map、filter、reduce などの関数内の無名関数パラメーターで使用されています。
  • 関数型プログラミングや React では this を使用すべきではありません。
  • ホイスティングが起こりません。ホイスティングは「魔法」です。関数の順序について明示的であることは、コードに明確さをもたらします。アロー関数が呼び出されている場合、その行の上にあることがわかります。
  • より短く、読み書きしやすいです。
  • 暗黙の戻り値があります。

私が使用している設定は次のとおりです:

const preferArrowConfig = [
  {
    name: 'prefer-arrow',
    plugins: {
      'prefer-arrow': preferArrow,
    },
    rules: {
      'prefer-arrow/prefer-arrow-functions': [
        'error',
        {
          classPropertiesAllowed: false,
          disallowPrototype: true,
          singleReturnOnly: false,
        },
      ],
    },
  },
  {
    files: ['**/*.d.ts'],
    name: 'ts-definition-files/prefer-arrow-off',
    rules: {
      'prefer-arrow/prefer-arrow-functions': 'off',
    },
  },
];

no-switch-statements

switch を使用することは if else よりも望ましくないという多くの記事が書かれており、おそらく全く使用すべきではありません。このプラグインは、コードベースで switch の使用を防止します。ただし、このプラグインは「修正」をサポートしていませんが、一部の IDE には変換する機能があります。このルールを有効にしたら、すべての switch 文を置き換えるのに長い時間はかかりません。

const noSwitchStatementsConfig = [
  {
    name: 'no-switch-statements',
    plugins: {
      'no-switch-statements': noSwitchStatements,
    },
    ...noSwitchStatements.configs.recommended,
  },
];

前の記事: ESLint - 状況に応じたルール

主な記事: ESLintの保存時の修正でワークフローを次のレベルに上げる方法