検索
ニュース

コードの品質を上げる、地味だけど重要な「コードリンティング」を解説コードに紛れ込んだ「糸くず」を取り除こう

TechTargetは、「コードリンティング」に関する記事を公開した。コードリンティングはデバッグプロセスにおける重要な準備手順の一つだ。シンプルなミスを早い段階で解決すれば、少ない負担でコーディングの品質を向上させられるだろう。

Share
Tweet
LINE
Hatena

 TechTargetは2024年3月7日(米国時間)、「コードリンティング」に関する記事を公開した。

画像
コードリンティングのテクニックとツールを理解する(提供:TechTarget)

 ソフトウェアが品質基準を確実に満たすために開発チームが実行すべき基本的な作業の一つが“コードリンティング”(code linting)だ。コードリンティングを実施することで、プログラミングの基本的なミス、スタイル上の見落としなど、コード品質を低下させる可能性のある問題点を早期に特定できる。

コードリンティングとは

 コードリンティングとは「構文エラーはないか」「コーディングスタイルに違反していないか」などをチェックする、コード評価プロセスだ。静的コード分析の一種であり、実行中のアプリケーションではなく、ソースコード自体をデバッグする。従って、コードリンティングを実施するためには、ソースコードにアクセスする必要がある。

 コードリンティングは、アプリケーションのソースコードの品質を向上させるために最もよく使用されるが、それ以外のコードに対応したコードリンティングツール(以下、リンター)もある。例えばHTMLなどの言語で記述されたマークダウンコードや、「Puppet」などのツールで記述される構成コードなどを対象にしたリンターがある。

コードリンティングの目的

 コードリンティングの目的は、アプリケーションでバグを引き起こす可能性のある「コード品質上の問題」を見つけることだ。スタイル上の問題点をチェックすることで、開発者はコードが機能する仕組みを理解しやすくなり、開発チーム全体の「コーディングスタイル」の一貫性確保に役立つ。コードリンティングによって検出できるミスの例には「冗長な変数宣言」や「関数の閉じかっこの欠落」などがある。

 忘れてはならないのは、コードリンティングの目的がアプリケーション内の複雑な問題を見つけることではないということだ。例えば、アプリケーションが入力を正しく検証しているかどうかなどはコードリンティングではチェックできない。同様に、セグメンテーションエラーを引き起こすメモリ管理の問題点を見つけることもコードリンティングの役割ではない。コードに潜む複雑な問題点を見つけて解決したいのであれば、開発者は他の手法を利用すべきだ。

 リンティングという用語は、1970年代に「C」言語のコードのエラーを解決するために開発された「Lint」というプログラムに由来している。Lintというツール名は、生地の品質を高めるため、生地から糸くず(Lint)を取り除くことを表している。洗濯物に付いた糸くずを取り除くと見た目はすっきりするが、洗濯物の汚れや破れがなくなるわけではない。それと同じで、コードリンティングしてもバグが解決するわけではないが、コードが読みやすくなり、基本的なミスを減らせる。つまり、コードリンティングはコードの品質を最大限に高める初歩的な手順といえる。

コードリンティングするタイミング

 コードリンティングによって見つかる問題点は、基本的には簡単に解決できるもののはずだ。そのため、コードリンティングは、ソフトウェア開発ライフサイクル(SDLC)の早い段階で実施することが多い。開発者が新たにコードを作成した直後、あるいは、コードが想定通りに動作するかどうかをテストする「受け入れテスト」や「パフォーマンステスト」といった複雑なテストの前にコードリンティングするのが一般的だ。

 一部の統合開発環境(IDE)はリアルタイムにコードリンティングできるもののある。そういったIDEであれば、開発者が記述しているコードを即座に評価し、構文ミスなどの問題を確認できる。

リンターの分類

 リンターは多くの種類があるが、大体、次の特性に合わせて分類される。

  • サポートしている言語:大半のリンターは特定のプログラミング言語でしか機能しない。そのため、適切な言語をサポートするリンターを見つける必要がある
  • 実行するコードリンティングの種類:スタイルの分析など、コードリンティングの具体的な機能を対象に設計されているものもあれば、ソースコード内の多種多様なミスを見つける汎用(はんよう)性の高いものもある
  • 実行する場所:開発者がコマンドラインから直接実行できるリンターもあれば、IDEに統合されるツールもある
  • 実行タイミング:リンターの多くは、開発者が意図したタイミング(ツールを実行したタイミング)でコードリンティングするように設計されている。しかし、新しいコードが画面に表示されるとともにその内容を評価し、コーディング上の問題点を特定するリンターもある。ただし、リアルタイムにコードリンティングするためには、開発者が使っているIDEにツールが統合されている必要がある

 適切なリンターを選択したいのであれば、これらの要素を検討するといいだろう。例えば、開発チームがIDEで直接コードリンティングしたいのであれば、使用中のIDEに統合できるリンターが有力な選択肢となる。コードリンティングを開発プロセスとは別に実行するのであれば、スタンドアロンのリンターを選ぶ方がよいだろう。

 以下に挙げるのは、広く使われているプログラミング言語に対応した人気の高いリンターの一覧だ。

  • 「Pylint」(「Python」に対応)
  • 「Cppcheck」(Cと「C++」に対応)
  • 「Golint」(「Go」に対応)
  • 「Clippy」(「Rust」に対応)
  • 「Checkstyle」(「Java」に対応)

コードリンティングのベストプラクティス

 コードリンティングによって、コードの品質と一貫性を確保できるようになる。コードリンティングの効果を最大限に高めるには、開発者は次のようなプラクティスを実践する必要がある。

開発ライフサイクルの一環として、コードリンティングを自動化する

 場当たり的にコードリンティングするのではなく、コードリンティングのプロセスを自動化した上で、定期的かつ体系的に実施されるようソフトウェア開発プロセスに組み込むことが重要だ。

コーディングプラクティスの改善につなげる

 コードリンティングのプロセスによって繰り返し明らかになるコードの問題点の種類を見極め、その問題点の再発防止策を考え、実施する。最終的には、繰り返し発生する間違いを修正するためだけでなく、開発プラクティスを改善するためにリンティングを使用することが目標となる。

複数種類のコードリンティングを実施する

 コードリンティングによって検出できる問題点はさまざまだ。リンティングプロセスの範囲を広げることで、スタイル上の問題、コードの一貫性の問題、潜在的なバグ、その他リンターが表面化できる欠陥をチェックできる。

ソースコード以外もリンティングする

 ソースコード以外にもマークダウンコード、構成コードなど、多様なコードの問題点をコードリンティングでチェックできる。対象とするコードの種類を増やすほど、コードリンティングによって引き出せる価値も多くなるだろう。

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る