プロジェクトの規模を把握したり、開発の進捗を可視化したりする際に、ソースコードの行数を計測したいことがあります。そんなときに便利なのが『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 clocclocのインストール後、以下のコマンドでバージョンを確認できます。
cloc --versionその他のインストール方法
MacではHomebrewを使用してインストールします。以下のコマンドを実行するとclocをインストールできます。
brew install clocUbuntuでは以下のコマンドを実行するとclocをインストールできます。
sudo apt install clocそれぞれの環境に合わせて、上記のコマンドを実行してください。なお、詳細なインストール方法については、公式リポジトリを参照してください。
clocの使い方
ではこれから、clocの様々な使い方について説明します。
現在のディレクトリのコード行数を計測
以下のコマンドを実行すると、現在のディレクトリ(.)にあるファイルのソースコード行数を計測できます。
cloc .特定のディレクトリのコード行数を計測
例えば、srcディレクトリ内のソースコード行数を計測したい場合、以下のコマンドを実行します。
cloc src特定のファイルのコード行数を計測
例えば、index.jsのソースコード行数を計測したい場合、以下のコマンドを実行します。
cloc index.jssrcディレクトリ内の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,16257CSVファイルとして保存したい場合は、リダイレクト>を使って出力結果をファイルに保存します。以下のコマンドでは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>
- 現在のディレクトリ:
お読み頂きありがとうございました。