2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[ESLint]関数の最大長を設定し、リファクタリングに役立てる。

Posted at

関数の行数は絶対的な指標ではないですが、リファクタリング対象の関数を検出するのに使うことができます。

例えば、300行の関数があったと想像してみましょう。
多分、この関数はやりたいことが多すぎる気がしています。
関数内でごちゃごちゃやってそうなので、テストもしづらいでしょう。
関数名も実態を表していないがしてきました。
また、300行のどこかにコメントが書いてあったとして、メンテ忘れも発生しそうですね。
よくないことだらけです。

そんな行数の関数書かないよと思うかもしれませんが、
何年も稼働しているサービスだと300行まではいかなくても、
長めの関数はそこそこあるのではないでしょうか。

ESLintにルールを設定して、長すぎるコードを検出して、
既存プロジェクトのリファクタリングをしていきましょう。

ESLintのmax-statementsを設定する。

ESLintのmax-statementsルールを使うことで、関数の最大長を指定できます。

enforce a maximum number of statements allowed in function blocks (max-statements)

ESLintのルールに記述しましょう。今回は.eslintrc.jsonに記述します。

{
  ~~
  "rules": {
    "max-statements": ["warn", 30]
  }
}

errorでもいいですが、とりあえずwarnで設定しました。

スクロールしなくてすむ限界値かなということで30行で設定しています。
チーム次第ではもっと短くした方がいいと思います。
これで、30行以上の関数に警告が出るようになったかと存じます。

ただ、これだと関数コンポーネントも警告対象になってしまいます。
JSXやpropsの記述もあるのでコンポーネントが30行縛りだとちょっと苦しいですね。

関数コンポーネント内の関数を検出対象にする

オプションとしてignoreTopLevelFunctionsを設定すればOKです。

{
  "extends": [
		// 省略
  ],
  "rules": {
		// 省略
    "max-statements": ["warn", 30, { "ignoreTopLevelFunctions": true }]
  }
}

これで、関数コンポーネント内の関数のみ警告が出るようになります。


他の人が読みやすいコードという前提で、関数は短い方がいいと思います。
リファクタリング対象を見つけてどんどん短くしていきましょー。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?