プロジェクトの規模を把握したり、開発の進捗を可視化したりする際に、ソースコードの行数を計測したいことがあります。そんなときに便利なのが『cloc(Count Lines of Code)』というツールです。
git diff
でも各ファイルの追加・削除した行数を計測できますが、clocを使うとより詳細に計測できます。
この記事では『cloc』について、以下の内容をわかりやすく解説します。ご参考になれば幸いです。
- clocとは
- clocのインストール方法
- clocの使い方
- 現在のディレクトリのコード行数を計測
- 特定のディレクトリのコード行数を計測
- 特定のファイルのコード行数を計測
- 特定の拡張子のコード行数を計測
- 特定のディレクトリを除外してコード行数を計測
- 特定の拡張子を除外してコード行数を計測
- 特定のファイルを除外してコード行数を計測
- 圧縮ファイル(zip, tar, gzip)のコード行数を計測
- 計測したコード行数をCSVで出力
- ファイル単位でコード行数を計測
- Gitリポジトリのコード行数を計測
- GitのコミットID時点でのコード行数を計測
- 過去のコミットとのコード差分を計測
- clocの出力結果の見方
clocとは
cloc(Count Lines of Code)は、ソースコードの行数を計測するツールです。単なる行数ではなく、コメント行、空行、実際のコード行(論理LOC)を区別して計測してくれるため、多くの開発者に利用されています。
clocの特徴
- プログラミング言語ごとにソースコードの行数を分類してくれる
- 「コメント行」「空行」「実コード行(論理LOC)」を区別して計測できる
- 圧縮ファイルのソースコード行数も計測できる
- Gitリポジトリのソースコード行数も計測できる
- コミット間のソースコード行数の差分を計測できる
- 過去のコミット時点のソースコード行数を計測できる
- CSV、JSON、YAMLなどの形式でデータを出力できる
clocのインストール方法
clocは複数の方法でインストールできますが、ここではnpmを使用してインストールします。Node.jsがインストールされていれば、以下のコマンドでclocをインストールできます。
npm install -g cloc
clocのインストール後、以下のコマンドでバージョンを確認できます。
cloc --version
その他のインストール方法
MacではHomebrewを使用してインストールします。以下のコマンドを実行するとclocをインストールできます。
brew install cloc
Ubuntuでは以下のコマンドを実行するとclocをインストールできます。
sudo apt install cloc
それぞれの環境に合わせて、上記のコマンドを実行してください。なお、詳細なインストール方法については、公式リポジトリを参照してください。
clocの使い方
ではこれから、clocの様々な使い方について説明します。
現在のディレクトリのコード行数を計測
以下のコマンドを実行すると、現在のディレクトリ(.
)にあるファイルのソースコード行数を計測できます。
cloc .
特定のディレクトリのコード行数を計測
例えば、src
ディレクトリ内のソースコード行数を計測したい場合、以下のコマンドを実行します。
cloc src
特定のファイルのコード行数を計測
例えば、index.js
のソースコード行数を計測したい場合、以下のコマンドを実行します。
cloc index.js
src
ディレクトリ内のindex.js
のソースコード行数を計測したい場合には、以下のコマンドを実行します。
cloc src/index.js
特定の拡張子のコード行数を計測
特定の拡張子のファイルだけを対象にしてソースコード行数を計測したい場合は、--include-ext
オプションを使います。
例えば、src
ディレクトリ内のJavaScript(.js
)とTypeScript(.ts
)ファイルのソースコード行数を計測したい場合、以下のコマンドを実行します。
cloc --include-ext=js,ts src
特定のディレクトリを除外してコード行数を計測
特定のディレクトリを除外してソースコード行数を計測したい場合は、--exclude-dir
オプションを使います。
例えば、現在のディレクトリ(.
)内のnode_modules
とdist
ディレクトリを除外して、ソースコード行数を計測したい場合、以下のコマンドを実行します。
cloc --exclude-dir=node_modules,dist .
特定の拡張子を除外してコード行数を計測
特定の拡張子のファイルを除外してソースコード行数を計測したい場合は、--exclude-ext
オプションを使います。
例えば、現在のディレクトリ(.
)内の.html
と.css
ファイルを除外して、ソースコード行数を計測したい場合、以下のコマンドを実行します。
cloc --exclude-ext=html,css .
特定のファイルを除外してコード行数を計測
特定のファイルを除外してソースコード行数を計測したい場合は、--exclude-list-file
オプションを使います。
まず、除外したいファイルリストを作成します。
echo "README.md" >> exclude-files.txt
echo "src/App.test.js" >> exclude-files.txt
例えば、現在のディレクトリ(.
)にあるファイルのソースコード行数を計測する際に、上記で記述したファイルを除外したい場合、以下のコマンドを実行します。
cloc --exclude-list-file=exclude-files.txt .
圧縮ファイル(zip, tar, gzip)のコード行数を計測
圧縮ファイル内のソースコード行数を解析することも可能です。以下のコマンドを実行すると、my_project.zip
やmy_project.tar.gz
内のソースコード行数を計測できます。
cloc my_project.zip
cloc my_project.tar.gz
計測したコード行数をCSVで出力する方法
計測したソースコード行数をCSVで出力したい場合は、--csv
オプションを使います。
例えば、現在のディレクトリ(.
)にあるファイルのソースコード行数を計測する際に、CSV形式で出力したい場合、以下のコマンドを実行します。
cloc --csv .
上記のコマンドを実行すると、以下に示すようにCSV形式の出力がターミナル(標準出力)に表示されます。
cloc --csv .
14 text files.
14 unique files.
4 files ignored.
files,language,blank,comment,code,"github.com/AlDanial/cloc v 2.04 T=0.13 s (105.7 files/s 123278.8 lines/s)"
3,JSON,0,0,16095
5,JavaScript,6,7,55
2,CSS,6,0,45
1,Markdown,32,0,38
1,HTML,3,20,20
1,Text,0,0,3
1,SVG,0,0,1
14,SUM,47,27,16257
CSVファイルとして保存したい場合は、リダイレクト>
を使って出力結果をファイルに保存します。以下のコマンドではcloc_output.csv
というファイルに出力結果を保存しています。
cloc --csv . > cloc_output.csv
ファイル単位でコード行数を計測
ファイル単位でソースコード行数を計測したい場合は、--by-file
オプションを使います。
例えば、現在のディレクトリ(.
)にあるファイルのソースコード行数を計測する際に、ファイル単位でソースコード行数を計測したい場合、以下のコマンドを実行します。
cloc --by-file .
Gitリポジトリのコード行数を計測する
例えば、オープンソースのJavaScriptライブラリlodash
のリポジトリをクローンし、そのソースコード行数を計測するには、以下の手順を実行します。
# lodash のリポジトリをクローン
git clone https://github.com/lodash/lodash.git
# クローンしたディレクトリに移動
cd lodash
# ソースコード行数を計測
cloc .
GitのコミットID時点でのコード行数を計測
引数にコミットIDを渡すことで、その時点でのソースコード行数を計測できます。
cloc --git <コミットID>
例: 特定のコミット f42859a15c39f0efd28382e7e7031895247cc085 時点でのソースコード行数を計測する場合
cloc --git f42859a15c39f0efd28382e7e7031895247cc085
過去のコミットとのコード差分を計測
過去のコミットとのソースコード差分を計測するためには、以下のコマンドを実行します。
cloc --diff <コミットID1> <コミットID2>
例
cloc --diff 1144918f3578a84fcc4986da9b806e63a6175cbb 059a26260610ee2878e4929ec3adcc880b43c313
<コミットID1>
が過去(古いコミット)、<コミットID2>
が現在(新しいコミット)になります。
clocの出力結果の見方
clocの出力結果は以下のようになります。
$ cloc .
14 text files.
14 unique files.
3 files ignored.
github.com/AlDanial/cloc v 2.04 T=0.12 s (114.0 files/s, 132982.0 lines/s)
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
JSON 3 0 0 16095
JavaScript 5 6 7 55
CSS 2 6 0 45
Markdown 1 32 0 38
HTML 1 3 20 20
Text 1 0 0 3
SVG 1 0 0 1
-------------------------------------------------------------------------------
SUM: 14 47 27 16257
-------------------------------------------------------------------------------
各列の意味
- Language:プログラミング言語
- files:その言語のファイル数
- blank:空行の数
- comment:コメント行の数
- code:実際のコード行の数
files ignored
はコード計測していないファイルの数です。clocではpng
ファイルやico
ファイルは無視するので、そのようなファイルがあればfiles ignored
にカウントされますし、--exclude-ext
オプション等で除外したファイルがあれば、files ignored
にカウントされます。
また、コミット間のコード差分を計測した場合、clocの出力結果は以下のようになります。
$ cloc --diff 1144918f3578a84fcc4986da9b806e63a6175cbb 059a26260610ee2878e4929ec3adcc880b43c313
11 text files.
12 text files.
2 files ignored.
github.com/AlDanial/cloc v 2.04 T=25.51 s (0.4 files/s, 2140.2 lines/s)
-------------------------------------------------------------------------------
Language files blank comment code
-------------------------------------------------------------------------------
JavaScript
same 0 0 13104 26881
modified 5 0 6 142
added 0 18 41 54
removed 0 0 0 1
Markdown
same 0 0 686 7278
modified 2 0 0 322
added 1 10 0 25
removed 0 0 0 0
JSON
same 0 0 0 5897
modified 2 0 0 6
added 0 0 0 8
removed 0 0 0 0
YAML
same 0 0 8 104
modified 1 0 1 4
added 0 0 0 0
removed 0 0 0 0
-------------------------------------------------------------------------------
SUM:
same 0 0 13798 40160
modified 10 0 7 474
added 1 28 41 87
removed 0 0 0 1
-------------------------------------------------------------------------------
各行の意味
- same:変更されていない行数
- modified:変更された行数(元のコードが修正された)
- added:新しく追加された行数
- removed:削除された行数
本記事のまとめ
この記事では『文字を入力する』について、以下の内容を説明しました。
- clocはソースコードの行数を計測するツール
- 特徴
- 言語ごとに分類(コメント・空行・実コード行を区別)
- 圧縮ファイルやGitリポジトリも計測可能
- コミット時点や差分の計測ができる
- CSV/JSON/YAML形式で出力可能
- インストール方法
- npm:
npm install -g cloc
- Homebrew(Mac):
brew install cloc
- Ubuntu:
sudo apt install cloc
- npm:
- clocの使い方
- 現在のディレクトリ:
cloc .
- 特定のディレクトリ:
cloc src
- 特定のファイル:
cloc index.js
- 特定の拡張子:
cloc --include-ext=js,ts src
- 特定のディレクトリを除外:
cloc --exclude-dir=node_modules,dist .
- 特定の拡張子を除外:
cloc --exclude-ext=html,css .
- 特定のファイルを除外:
cloc --exclude-list-file=exclude-files.txt .
- 圧縮ファイル(zip, tar, gzip):
cloc my_project.zip
- CSVで出力:
cloc --csv .
- ファイル単位:
cloc --by-file .
- GitのコミットID時点:
cloc --git <コミットID>
- 過去のコミットとのコード差分:
cloc --diff <コミットID1> <コミットID2>
- 現在のディレクトリ:
お読み頂きありがとうございました。