本記事では、clocをインストールしてソースのステップを計測する方法を説明する。
インストールするバージョンは、cloc v2.00 (2024/06/09時点で最新)
clocとは?
様々なプログラム言語のソースコードの空行、コメント行、物理行を計測することができるツール。
代表的な特徴は以下。
- 2バージョン間の空行、コメント行、物理行の差分計測が可能
- 対象としてテキストファイル、ディレクトリ以外にも、gitレポジトリ、アーカイブ(tar、zip…)を受付け、
- 結果はテキスト、SQL、JSON、XML、YAML、CSVフォーマットで出力可能
インストール環境
- Windows 11 Home 23H2
インストール方法
手順1. 公式サイトからダウンロード
公式サイトのStable releaseから最新版をダウンロードする (cloc-2.00.exe)
※cloc.exeに名前変更して便利な場所に配置しておくと良い
手順2. 動作確認
以下のコマンドでヘルプが表示されることが確認できれば問題無し。
cloc.exe --help
主な使用方法
単一バージョンの計測
ソースコードの物理行とコメントを計測するには、
cloc.exe [options] <file(s)/dir(s)/git hash(es)>
*<file(s)/dir(s)/git hash(es)>にファイル、ディレクトリ、gitコミットを指定可能。
2点間の差分計測
2点間の物理行とコメントを計測するには、
cloc.exe [options] --diff <set1> <set2>
*<set1> <set2>でファイル、ディレクトリ、gitコミットのペアを指定。
主なオプション
多用しそうなオプションのみを以下にまとめる。
すべてのオプションを確認したい場合は、公式サイトのOptionsを参照。
入力オプション
| No. | オプション | 説明 |
|---|---|---|
| 1 | –list-file=<file> | 計測するファイルを<file>から読み込む。<file>では1行に1ファイル/ディレクトリを記載し、相対パスはcloc実行フォルダからの相対パスとなる |
| 2 | –diff-list-file=<file> | 差分計測するファイルをから読み込む |
処理オプション
| No. | オプション | 説明 |
|---|---|---|
| 1 | –by-file | ファイル毎の計測結果を出力する |
| 2 | –by-file-by-lang | ファイル毎の計測結果に加えて言語毎の結果も出力する |
| 3 | –count-and-diff <set1> <set2> | <set1>と<set2>それぞれのステップ計測した後に、差分計測する |
| 4 | –diff <set1> <set2> | <set1>と<set2>間の差分を計測する |
| 5 | –diff-timeout <N> | 処理に<N>秒以上かかるファイルを無視する(デフォルト: 10秒、上限なしは0を指定) |
| 6 | –git | 入力をgitコミット、ブランチ名だと強制解釈する |
| 7 | –git-diff-rel | –git –diffと同じ。2コミット間で変更があったファイルのみ比較される |
| 8 | –git-diff-all | リポジトリ内の2コミット間のすべてのファイルを比較する |
フィルタオプション
| No. | オプション | 説明 |
|---|---|---|
| 1 | –include-content=<regex> | <regex>正規表現に一致するファイルのみ計測対象にする |
| 2 | –exclude-content=<regex> | <regex>正規表現に一致するファイルを計測対象外にする |
| 3 | –exclude-dir=<D1>[,D2,] | D1、D2、…ディレクトリを計測対象外にする |
| 4 | –exclude-ext=<ext1>[,<ext2>[…]] | ext1、ext2、…拡張子のファイルを計測対象外にする |
| 5 | –exclude-lang=<L1>[,L2[…]] | L1、L2、…言語のファイルを計測対象外にする |
| 6 | –exclude-list-file=<file> | 計測対象外にするファイルを<file>から読み込む。<file>では1行に1ファイル/ディレクトリを記載し、相対パスはclocの実行フォルダからの相対パスとなる |
| 7 | –include-ext=<ext1>[,ext2[…]] | ext1、ext2、…拡張子のファイルのみ計測対象にする |
| 8 | –include-lang=<L1>[,L2[…]] | L1、L2、…言語のファイルを計測対象にする |
| 9 | –skip-win-hidden | Windowsにおいて隠しファイルを計測対象外にする |
デバッグオプション
| No. | オプション | 説明 |
|---|---|---|
| 1 | –diff-alignment=<file> | <file>にどのファイルが追加、削除、比較されているかを出力する。指定すると、–diffオプションが強制ONになる |
| 2 | –help | clocの使用方法を出力する |
| 3 | –version | clocのバージョンを出力する |
出力オプション
| No. | オプション | 説明 |
|---|---|---|
| 1 | –csv | 結果をCSVで出力 |
| 2 | –csv-delimiter=<C> | CSVにおける”,”の替わりのセパレータ。指定すると、–csvオプションが強制ONになる |
| 3 | –file-encoding=<E> | 結果ファイルのエンコード |
| 4 | –json | 結果をJSONで出力 |
| 5 | –md | 結果をmd(マークダウン)で出力 |
| 6 | –out=<file> | report-fileと同じ |
| 7 | –report-file=<file> | STDOUTの代わりに<file>に結果を出力する |
| 8 | –sql=<file> | SQLのCREATE、INSERT分を<file>に出力する |
| 9 | –sql-append | –sql=<file>に指定したファイルにINSERT文のみ出力する(CREATE文を出力しない) |
| 10 | –xml | 結果をXMLで出力 |
| 11 | –xsl=<file> | XML出力において、参照するスタイルシート |
使用例1. カレントディレクトリで、以下のディレクトリ以外をファイル毎、言語毎に計測し、結果をcloc-reportに出力する。
- .angular
- .git
- .vscode
- .VSCodeCounter
- dist
- node_modules
cloc.exe . --by-file-by-lang --exclude-dir=.angular,.git,.vscode,.VSCodeCounter,dist,node_modules --out=cloc-report
使用例2. コミット703a184~b8fe80e間で、差分をファイル毎に計測し、結果をCSV形式でcloc-reportに出力する。
cloc.exe --diff 703a184 b8fe80e --by-file --csv --out=cloc-report
識別可能な言語
公式サイトのRecognized Languages参照。
VS Code Counterとの比較
VS Code Counterよりも機能が多彩で、より細かな計測が可能。
例えば、
- VS Code Counterは直前からの差分比較しかできないが、clocは任意の2点間で差分比較が可能
- 計測対象もファイルやディレクトリのみならず、アーカイブやgitコミットのハッシュ指定まで可能
- 結果の出力フォーマットもsqlやxmlまでサポートしている
…etc
プロジェクトの終盤の報告や品質分析時などでは、VS Code Counterよりclocを使用した方が素早く正確な計測結果を得ることができそう。

