プログラムのソースコードレポジトリの行数を計測する方法の備忘録です。
はじめに
ソースコードを読みながら、ふとそのレポジトリ全体の行数を知りたくなったときがありました。
やり方の備忘録を残します。
ソースコードの行数をカウントする
コマンドで行数をカウントする
下記コマンドで、gitレポジトリ全体の行数をパッと計測できます。
git ls-files | xargs wc -l
git ls-files
でgit レポジトリ内で管理されているファイルを一覧で取得し、その内容をxargs wc -l
で行数カウントしています。
特定のファイルのみを対象にカウントしたい場合は、例えば下記のように間にgrepを挟みます。
git ls-files | grep '\.go' | xargs wc -l
上記の例では、.go
拡張子を持つファイルのみを対象として行数カウントしています。
任意の正規表現でカウント対象をgrepでフィルタ可能です。
具体例として、pythonのrequestsライブラリのソースコードのうち、.py
拡張子を持つものの行数をカウントしてみます。
# git clone https://github.com/psf/requests.git # cd requests git ls-files | grep '\.py' | xargs wc -l 86 docs/_themes/flask_theme_support.py 386 docs/conf.py 132 setup.py 180 src/requests/__init__.py 14 src/requests/__version__.py 50 src/requests/_internal_utils.py 540 src/requests/adapters.py 157 src/requests/api.py 314 src/requests/auth.py 17 src/requests/certs.py 79 src/requests/compat.py 561 src/requests/cookies.py 151 src/requests/exceptions.py 134 src/requests/help.py 33 src/requests/hooks.py 1032 src/requests/models.py 30 src/requests/packages.py 831 src/requests/sessions.py 128 src/requests/status_codes.py 99 src/requests/structures.py 1094 src/requests/utils.py 14 tests/__init__.py 23 tests/compat.py 58 tests/conftest.py 8 tests/test_adapters.py 27 tests/test_help.py 22 tests/test_hooks.py 428 tests/test_lowlevel.py 13 tests/test_packages.py 2839 tests/test_requests.py 78 tests/test_structures.py 165 tests/test_testserver.py 926 tests/test_utils.py 0 tests/testserver/__init__.py 134 tests/testserver/server.py 17 tests/utils.py 10800 total
合計で10800行の.py
コードがあることが分かりました。
ツールで行数をカウントする
ソースコードの行数をカウントするツールも世の中に多く存在しており、ざっと有名どころを調べただけでもこれだけあります。
- GitHub - AlDanial/cloc: cloc counts blank lines, comment lines, and physical lines of source code in many programming languages.
- GitHub - XAMPPRocky/tokei: Count your code, quickly.
- GitHub - boyter/scc: Sloc, Cloc and Code: scc is a very fast accurate code counter with complexity calculations and COCOMO estimates written in pure Go
今回は、有名なclocを試してみます。
まずは各種パッケージマネージャーでclocをインストールします。
npm install -g cloc # https://www.npmjs.com/package/cloc sudo apt install cloc # Debian, Ubuntu sudo yum install cloc # Red Hat, Fedora sudo dnf install cloc # Fedora 22 or later sudo pacman -S cloc # Arch sudo emerge -av dev-util/cloc # Gentoo https://packages.gentoo.org/packages/dev-util/cloc sudo apk add cloc # Alpine Linux doas pkg_add cloc # OpenBSD sudo pkg install cloc # FreeBSD sudo port install cloc # macOS with MacPorts brew install cloc # macOS with Homebrew winget install AlDanial.Cloc # Windows with winget choco install cloc # Windows with Chocolatey scoop install cloc # Windows with Scoop
では先ほどの例と同様、requestsライブラリをclocでカウントしてみます。
# git clone https://github.com/psf/requests.git # cd requests cloc . 93 text files. 81 unique files. 23 files ignored. github.com/AlDanial/cloc v 2.02 T=0.28 s (285.3 files/s, 60468.6 lines/s) ------------------------------------------------------------------------------- Language files blank comment code ------------------------------------------------------------------------------- Python 35 1997 1994 6809 reStructuredText 16 858 243 1931 Markdown 9 589 6 1626 DOS Batch 1 34 2 227 make 2 34 7 202 YAML 9 33 36 177 CSS 1 32 2 143 HTML 3 30 3 114 INI 1 3 0 15 Text 2 0 0 10 TOML 1 1 0 9 SVG 1 0 0 1 ------------------------------------------------------------------------------- SUM: 81 3611 2293 11264 -------------------------------------------------------------------------------
このように言語ごとのファイル数と、空白行/コメント行/コード行の数が計測できます。
ちなみにPythonコードについては、
1997(空白) + 1994(コメント) + 6809(コード) = 10800(合計)
なので、先述のコマンドでの計測結果と一致しますね。
他にも、gitコミットを指定してカウントしたり、差分を計測したりと多様な使い方があります。 興味ある方はcloc公式レポを参照ください。
おわりに
以上、gitレポジトリのソースコード行数をカウントする方法を簡単にメモしました。
どなたかの参考になれば幸いです。
[関連記事]
参考
- Can you get the number of lines of code from a GitHub repository? - Stack Overflow
- bash - Count number of lines in a git repository - Stack Overflow
- GitHub - AlDanial/cloc: cloc counts blank lines, comment lines, and physical lines of source code in many programming languages.
- GitHub - XAMPPRocky/tokei: Count your code, quickly.
- GitHub - boyter/scc: Sloc, Cloc and Code: scc is a very fast accurate code counter with complexity calculations and COCOMO estimates written in pure Go