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

CLOC (Count Lines of Code) は、ディレクトリ内のファイルを分析し、様々なプログラミング言語のコード行、コメント行、および空白行の数をカウントするコマンドラインツールです。開発者が自分たちのプロジェクトの構成を理解したり、生産性を測定したり、プロジェクトの複雑さを見積もったりする際に、非常に役立つツールです。
CLOC (Count Lines of Code) は、複数のプログラミング言語にまたがるコード行、コメント行、および空白行をカウントすることで、開発者がコードベースを分析するのに役立つ強力なユーティリティです。
このステップでは、CLOC の基本的な構文を使ってプロジェクトを分析する方法を学びます。
CLOC を使用するための基本的な構文は次の通りです。
cloc [options] <file/directory>
セットアップ時にクローンした Flask プロジェクトを CLOC で分析してみましょう。
cd ~/project/flask
cloc .
.
は現在のディレクトリを表すので、このコマンドは CLOC に現在のディレクトリとそのサブディレクトリ内のすべてのファイルを分析するよう指示します。
コマンドを実行すると、CLOC は次の情報を含む表を表示します。
出力は次のようになります。
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 を使うと、特定のファイルタイプを分析したり、特定のファイルを分析対象から除外したりすることができます。これは、複数のプログラミング言語を含む大規模なプロジェクトを扱う際に特に便利です。
特定の拡張子を持つファイルのみを分析するには、--include-ext
オプションを使用し、その後にカンマ区切りのファイル拡張子のリストを指定します。
cd ~/project/flask
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 は、異なるプロジェクトを比較し、様々な形式でレポートを生成する機能を提供します。これらの機能は、時間の経過に伴う変更を追跡したり、異なるコードベースを比較したりする際に特に有用です。
Flask と比較するための簡単なプロジェクトを作成しましょう。
cd ~/project
mkdir sample_project
cd sample_project
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
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 レポートを作成しましょう。
cd ~/project/flask
cloc --csv --out=flask_stats.csv .
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 は、より詳細でカスタマイズ可能な分析を行うためのいくつかの高度なオプションを提供しています。これらのオプションを使用すると、コードベースに対するより深い洞察を得ることができます。
大規模なプロジェクトを分析する際には、進捗状況を確認できると便利です。--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) を使用してコードベースを分析し、プロジェクトの構成に関する貴重な洞察を得る方法を学びました。以下に、あなたが達成したことのまとめを示します。
基本的な使い方:基本的な cloc
コマンドを使用してディレクトリを分析し、さまざまなプログラミング言語のコード行数、コメント行数、空白行数をカウントする方法を学びました。
フィルタリングと対象指定:--include-ext
を使用して特定のファイルタイプに分析を絞り込む方法と、--exclude-dir
を使用してディレクトリを除外する方法を調べました。
比較とレポート生成:--diff
オプションを使用して異なるコードベースを比較する方法と、CSV や XML などのさまざまな形式でレポートを生成する方法を学びました。
高度な分析:進捗追跡、重複ファイル検出、パターンマッチング、ファイルごとの分析など、より詳細な洞察を提供する高度なオプションを発見しました。
CLOC は、開発者、プロジェクトマネージャー、コード監査者がコードベースのサイズと複雑さを定量的に評価するための強力なツールです。CLOC を効果的に使用することで、以下のことができます。
これらの機能により、CLOC はコード分析とプロジェクト管理において、すべての開発者のツールキットに欠かせないツールとなっています。