CLOC でコード行数をカウント

LinuxBeginner
オンラインで実践に進む

はじめに

CLOC (Count Lines of Code) は、ディレクトリ内のファイルを分析し、さまざまなプログラミング言語におけるコード行数、コメント行数、空白行数をカウントするコマンドラインツールです。プロジェクトの構成を理解し、生産性を測定し、プロジェクトの複雑さを推定しようとする開発者にとって、非常に貴重なリソースです。

CLOC tool interface

CLOC とその基本的使用法の理解

CLOC (Count Lines of Code) は、複数のプログラミング言語にわたるコード行数、コメント行数、空白行数をカウントすることにより、開発者がコードベースを分析するのに役立つ強力なユーティリティです。

このステップでは、プロジェクトを分析するために、CLOC をその基本的な構文で使用する方法を学びます。

基本的な CLOC コマンド

CLOC を使用するための基本的な構文は次のとおりです。

cloc [options] <file/directory>

セットアップ中にクローンされた Flask プロジェクトを分析するために、CLOC を使用してみましょう。

  1. タスクバーのターミナルアイコンをクリックして、ターミナルを開きます。
  2. Flask プロジェクトディレクトリに移動します。
cd ~/project/flask
  1. プロジェクト全体を分析するために、基本的な CLOC コマンドを実行します。
cloc .

. は現在のディレクトリを表すため、このコマンドは CLOC に現在のディレクトリとそのサブディレクトリ内のすべてのファイルを分析するように指示します。

出力の理解

コマンドを実行すると、CLOC は次の情報を含むテーブルを表示します。

  • Language: プロジェクトで検出されたプログラミング言語
  • Files: 各言語のファイル数
  • Blank: 空白行数
  • Comment: コメント行数
  • Code: コード行数

出力は次のようになります。

      56 text files.
      56 unique files.
      16 files ignored.

github.com/AlDanial/cloc v 1.90  T=0.11 s (428.1 files/s, 72093.6 lines/s)
--------------------------------------------------------------------------------
Language                      files          blank        comment           code
--------------------------------------------------------------------------------
Python                           41           3061           2088           7012
Markdown                          5            175              0            314
YAML                              2             10              3             84
make                              1             21             30             46
TOML                              1              6              0             19
--------------------------------------------------------------------------------
SUM:                             50           3273           2121           7475
--------------------------------------------------------------------------------

この出力は、Flask プロジェクトのコードベース構成の包括的な概要を示しています。

✨ 解答を確認して練習

CLOC による特定のファイルタイプの分析

CLOC を使用すると、特定のファイルタイプを分析したり、分析から特定のファイルを除外したりできます。これは、複数のプログラミング言語を含む大規模なプロジェクトを扱う場合に特に役立ちます。

特定のファイル拡張子の分析

特定の拡張子を持つファイルのみを分析するには、--include-extオプションの後に、カンマ区切りのファイル拡張子のリストを指定します。

  1. まだ移動していない場合は、Flask プロジェクトディレクトリに移動します。
cd ~/project/flask
  1. プロジェクト内の Python ファイルのみを分析するために、CLOC を実行します。
cloc --include-ext=py .

出力には、プロジェクト内の Python ファイルに関する情報のみが表示されるようになります。

      41 text files.
      41 unique files.
       0 files ignored.

github.com/AlDanial/cloc v 1.90  T=0.05 s (886.0 files/s, 264066.7 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Python                          41           3061           2088           7012
-------------------------------------------------------------------------------
SUM:                            41           3061           2088           7012
-------------------------------------------------------------------------------

特定のディレクトリの除外

--exclude-dirオプションを使用して、分析から特定のディレクトリを除外することもできます。

cloc --exclude-dir=tests .

このコマンドは Flask プロジェクトを分析しますが、testsディレクトリを除外します。出力には、testsディレクトリ内のファイルを除く、すべてのプロジェクトファイルの統計が表示されます。

      34 text files.
      34 unique files.
      14 files ignored.

github.com/AlDanial/cloc v 1.90  T=0.07 s (372.3 files/s, 45941.8 lines/s)
--------------------------------------------------------------------------------
Language                      files          blank        comment           code
--------------------------------------------------------------------------------
Python                           25           1546           1103           3421
Markdown                          5            175              0            314
YAML                              2             10              3             84
make                              1             21             30             46
TOML                              1              6              0             19
--------------------------------------------------------------------------------
SUM:                             34           1758           1136           3884
--------------------------------------------------------------------------------

これらのフィルタリングオプションを使用することで、ニーズに最も関連性の高いコードベースの特定の部分に分析を集中させることができます。

✨ 解答を確認して練習

プロジェクトの比較とレポート生成

CLOC は、さまざまなプロジェクトを比較し、さまざまな形式でレポートを生成する機能を提供します。これらの機能は、時間の経過に伴う変更を追跡したり、異なるコードベースを比較したりするのに特に役立ちます。

2 つのディレクトリの比較

Flask と比較するためのシンプルなプロジェクトを作成しましょう。

  1. プロジェクトディレクトリに移動します。
cd ~/project
  1. シンプルな Python プロジェクト用の新しいディレクトリを作成します。
mkdir sample_project
cd sample_project
  1. いくつかのコードを含むいくつかの Python ファイルを作成します。
echo 'def hello_world():
    """
    A simple function that prints Hello World
    """
    print("Hello, World!")

if __name__ == "__main__":
    hello_world()' > main.py
echo 'class Calculator:
    """A simple calculator class"""
    
    def add(self, a, b):
        """Add two numbers"""
        return a + b
        
    def subtract(self, a, b):
        """Subtract b from a"""
        return a - b' > calculator.py
  1. 次に、CLOC の diff 機能を使用して、このサンプルプロジェクトと Flask プロジェクトを比較してみましょう。
cd ~/project
cloc --diff flask sample_project

出力には、2 つのプロジェクト間のコードメトリクスの差が表示されます。

       2 text files.
       2 unique files.
       0 files ignored.

github.com/AlDanial/cloc v 1.90  T=0.01 s (195.2 files/s, 1756.8 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Python                           2              3              4             11
-------------------------------------------------------------------------------
SUM:                             2              3              4             11
-------------------------------------------------------------------------------

Diff by file type:
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Python                          39           3058           2084           7001
Markdown                         5            175              0            314
YAML                             2             10              3             84
make                             1             21             30             46
TOML                             1              6              0             19
-------------------------------------------------------------------------------
SUM:                            48           3270           2117           7464
-------------------------------------------------------------------------------

さまざまな形式でのレポートの生成

CLOC は、CSV や XML など、さまざまな形式でレポートを生成できます。Flask プロジェクトの CSV レポートを作成しましょう。

  1. Flask プロジェクトに移動します。
cd ~/project/flask
  1. CSV レポートを生成します。
cloc --csv --out=flask_stats.csv .
  1. 生成されたレポートの内容を表示します。
cat flask_stats.csv

CSV 形式の CLOC 分析が表示されます。

files,language,blank,comment,code,"github.com/AlDanial/cloc v 1.90 T=0.09 s (571.3 files/s, 96263.8 lines/s)"
41,Python,3061,2088,7012
5,Markdown,175,0,314
2,YAML,10,3,84
1,make,21,30,46
1,TOML,6,0,19
50,SUM,3273,2121,7475

この CSV 形式は、スプレッドシートやその他のデータ分析ツールへのインポートに特に役立ちます。

同様に、XML レポートを生成できます。

cloc --xml --out=flask_stats.xml .

これらのレポート機能により、CLOC はコード分析とプロジェクト管理のための多用途ツールとなります。

✨ 解答を確認して練習

詳細分析のための高度な CLOC オプション

CLOC は、より詳細でカスタマイズされた分析のためのいくつかの高度なオプションを提供します。これらのオプションを使用すると、コードベースに関するより深い洞察を得ることができます。

分析中の進捗状況の表示

大規模なプロジェクトを分析する場合、進捗状況を確認すると便利です。--progress-rateオプションを使用して、進捗状況の更新を表示します。

cd ~/project/flask
cloc --progress-rate=10 .

このコマンドは、10 個のファイルを処理するごとに進捗状況の更新を表示します。

パターンに一致するファイルの分析

--match-fオプションを使用して、特定のパターンに一致するファイルを分析できます。

cloc --match-f='test_.*\.py$' .

このコマンドは、「test_」で始まる Python ファイルのみのコード行数をカウントします。出力には、Flask プロジェクト内のテストファイルの統計が表示されます。

      15 text files.
      15 unique files.
       0 files ignored.

github.com/AlDanial/cloc v 1.90  T=0.03 s (541.8 files/s, 155547.1 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Python                          15           1337            736           3193
-------------------------------------------------------------------------------
SUM:                            15           1337            736           3193
-------------------------------------------------------------------------------

この機能は、大規模なプロジェクト内の特定のファイルパターンに焦点を当てたい場合に特に役立ちます。

ファイルごとの結果の表示

言語別だけでなく、個々のファイルごとの分析の内訳を表示するには、--by-fileオプションを使用します。

cloc --by-file --include-ext=py src/

このコマンドは、srcディレクトリ内の Python ファイルを分析し、各ファイルの結果を個別に表示します。

    7 text files.
    7 unique files.
    0 files ignored.

github.com/AlDanial/cloc v 1.90  T=0.01 s (648.3 files/s, 180431.1 lines/s)
-------------------------------------------------------------------------------
File                          blank        comment           code
-------------------------------------------------------------------------------
src/flask/ctx.py                123            193            539
src/flask/app.py                284            490            999
src/flask/blueprints.py         100            191            421
src/flask/cli.py                126            188            557
src/flask/helpers.py            136            227            538
src/flask/templating.py          28             60            123
src/flask/globals.py             22             63             74
-------------------------------------------------------------------------------
SUM:                            819           1412           3251
-------------------------------------------------------------------------------

この詳細なビューは、コードベースのサイズに最も貢献している特定のファイルを特定するのに役立ちます。

これらの高度なオプションにより、CLOC はさまざまなシナリオで包括的なコード分析を行うための多用途ツールとなります。

✨ 解答を確認して練習

まとめ

この実験では、CLOC(Count Lines of Code)を使用してコードベースを分析し、プロジェクト構成に関する貴重な洞察を得る方法を学びました。以下は、達成したことの概要です。

  1. 基本的使用法: 基本的なclocコマンドを使用して、ディレクトリを分析し、さまざまなプログラミング言語にわたるコード行数、コメント、および空白行をカウントする方法を学びました。

  2. フィルタリングとターゲティング: --include-extを使用して特定のファイルタイプに分析を集中させ、--exclude-dirを使用してディレクトリを除外する方法を検討しました。

  3. 比較とレポート: --diffオプションを使用して異なるコードベースを比較する方法、および CSV や XML などのさまざまな形式でレポートを生成する方法を学びました。

  4. 高度な分析: 進捗状況の追跡、重複ファイルの検出、パターンマッチング、ファイルごとの分析など、より詳細な洞察を提供する高度なオプションを発見しました。

CLOC は、開発者、プロジェクトマネージャー、およびコード監査人にとって、コードベースのサイズと複雑さを定量化するための強力なツールです。CLOC を効果的に使用することにより、次のことが可能になります。

  • プロジェクトの構成を理解する
  • コーディングの生産性を追跡する
  • プロジェクトの複雑さを推定する
  • コードアーキテクチャとメンテナンスについて情報に基づいた意思決定を行う
  • ドキュメントと分析用のレポートを生成する

これらの機能により、CLOC は、コード分析とプロジェクト管理を行うすべての開発者のツールキットに不可欠なツールとなります。