Technology部の菊池です。
この記事では静的解析で設定しておきたいルールについて解説します。
なお、チェックに使用する静的解析ツールは「ESlint」を使う前提で記載しています。技術選定を実施するアーキテクトやSE、テクニカルディレクターの方のご参考になれば幸いです。
目次
静的解析が必要な理由
静的解析とは、プログラムを実行することなくソースコードに問題がないかを検証する手法のことを指します。静的解析が必要な理由は以下の通りです。
※ESlint以外でルール設定が可能な項目に関しても記載しています。
- コード品質の向上
- コーディング規約の確認
- セキュリティの向上
- バグの発見
コード品質の向上
まず、コードの構造や書き方に関する問題をチェックしてコードの品質を向上させることで、保守性や拡張性を高める目的があります。
たとえば、コンポーネント、ファイル、メソッド、クラスの追加が発生した際も対応しやすいように整える、修正時に他のクラスやコンポーネント、モジュールへの影響を発生させないようにするといった意図です。
コーディング規約の確認
エンジニアによってコーディングされたコードが、コーディング規約に従って書かれているかどうかもチェックできます。
コーディング規約に従って書かれたコードは可読性が高く、ひいては保守性の向上にもつながります。
セキュリティの向上
悪意のあるユーザーによるSQLインジェクションやXSS攻撃などを仕掛けられるリスクに備え、セキュリティの観点でコードが問題ないかを検出するという目的もあります。
なお、セキュリティチェックを実施するためには、Coverityなどの静的解析ツールを利用します。
バグの発見
メモリリークの危険の発見、セミコロンの欠落など、バグのリスクになりうる要素の早期発見につなげる狙いもあります。
静的解析のフロー
静的解析はPull Request実施時のCI/CDにおいて実施することで、レビュー時にエンジニアが事前確認することが可能です。
結果として、本流ブランチの品質担保につなげることができます。
ESlintのパッケージについて
ESlintでは、特定のコーディングスタイルや、フレームワークに対するルールパッケージがプラグインとして提供されています。
パッケージ名 | 説明 |
---|---|
eslint-config-airbnb | AirbnbのJavaScriptスタイルガイドに基づくESLint設定。ReactやJSXもサポートしています。 |
eslint-config-google | GoogleのJavaScriptスタイルガイドに基づくESLint設定。 |
eslint-config-standard | JavaScript Standard Styleに基づくESLint設定。シンプルで一貫性のあるスタイルが特徴です。 |
eslint-config-prettier | PrettierとESLintが競合しないように、Prettierと互換性のあるルールセットを提供するESLint設定。 |
eslint-plugin-react | Reactのベストプラクティスとアンチパターンに対するルールを提供するプラグイン。 |
eslint-plugin-jsx-a11y | JSX要素のアクセシビリティルールを提供するプラグイン。 |
eslint-plugin-import | ES2015+のimport/export構文に関するルールを提供するプラグイン。 |
eslint-plugin-node | Node.jsのベストプラクティスと標準スタイルに関するルールを提供するプラグイン。 |
ESlintに追加しておきたいルール集
上記のようなパッケージ以外で、ソースコードの可読性とメンテナンス性をあげるために、追加した方がよいルールもあります。実際のルール設定については、ESlintのDocsページも参照してください。
命名規則チェック
ファイル名やクラス名、変数名が統一されていること(たとえばクラス名はアッパーキャメル形式に統一する、変数名はパスカル形式にするなど)
制御構造文チェック
制御構造文のネストの深さが閾値以上となっていないこと
メソッドチェック
- 1行当たりのコード文字数制限
- 引数の数の閾値
- 未使用変数チェック
- 未使用の式チェック
- 関数内のコード行数制限
- 1クラス当たりの行数
その他
- 三項演算子の禁止
- Tabの禁止(Formatterで整形するのもあり)
- 未使用モジュールチェック
まとめ
静的解析のルールは、事実上のコーディング規約といえます。コーディング規約にはパッケージなどのフレームワークが存在するため適宜選択しつつ、パッケージに存在しないルールは独自で設定しましょう。
CI/CDにおいて実施することで、Pull Request時に各エンジニアにおいてセルフチェックが可能となります。結果的にスキルの低いメンバーでも、ソースコードレビューを織り交ぜながらであれば、一定の品質のソースコードを担保できるでしょう。
また、LIGブログではAIやアプリ・システム開発など、テクノロジーに関するお役立ち記事をお届けするメルマガを配信しています。
- <お届けするテーマ>
-
- 開発プロジェクトを円滑に進めるためのTIPS
- エンジニアの生産性が上がった取り組み事例
- 現場メンバーが生成AIを使ってみた
- 開発ツールの使い方や開発事例の解説
- AIをテーマにしたセミナーの案内
- 最新のAI関連ニュースまとめ など
「AIに関する最新情報を集めたい!」「開発ツールの解説や現場の取り組みを知りたい!」とお考えの方は、ぜひお気軽に無料のメルマガをご購読くださいませ。