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

LinuxLinuxBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

CLOC (Count Lines of Code) は、ディレクトリ内のファイルを分析し、様々なプログラミング言語のコード行、コメント行、および空白行の数をカウントするコマンドラインツールです。開発者が自分たちのプロジェクトの構成を理解したり、生産性を測定したり、プロジェクトの複雑さを見積もったりする際に、非常に役立つツールです。

CLOC ツールのインターフェイス

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/PackagesandSoftwaresGroup(["Packages and Softwares"]) linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/PackagesandSoftwaresGroup -.-> linux/wget("Non-interactive Downloading") subgraph Lab Skills linux/ls -.-> lab-273383{{"CLOC でコード行数をカウントする"}} linux/wget -.-> lab-273383{{"CLOC でコード行数をカウントする"}} end

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 個のファイルが処理されるたびに進捗更新を表示します。

重複ファイルのカウント

CLOC は、プロジェクト内の重複ファイルを識別してレポートすることができます。この機能の使い方を見てみましょう。

cloc --duplicate-threshold=15 .

--duplicate-threshold オプションは、2 つのファイルが重複と見なされるために必要な重複コードの最小割合を設定します。この例では、15% の閾値を使用しています。つまり、少なくとも 15% の内容を共有するファイルは重複としてレポートされます。

重複ファイルが見つかった場合、重複ファイルに関する情報を含む出力が表示されます。

Duplicate files:
[some file paths will be listed here]

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

--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 はコード分析とプロジェクト管理において、すべての開発者のツールキットに欠かせないツールとなっています。