いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Goメモ-494 (scc)(clocに似たステップカウンタ, すごく速い)

関連記事

GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ

概要

以下、自分用のメモです。忘れないうちにメモメモ。。。

知り合いがスター付けていたので、存在を知りました。

github.com

clocとかに似たステップカウンタで、動作がめちゃ速いと書いてあります。ついでに複雑度も算出してくれるみたい。

Goで作成されているので、インストールがめちゃ簡単です。

試してみた

インストール

Goが入っている環境なので、go install で入れました。HomebrewとかScoopとかのメジャーなパッケージマネージャには対応しているみたいですね。

$ go install github.com/boyter/scc/v3@latest

$ file $(which scc) | tr ':,' '\n'
/workspace/go/bin/scc
 ELF 64-bit LSB executable
 x86-64
 version 1 (SYSV)
 dynamically linked
 interpreter /lib64/ld-linux-x86-64.so.2
 Go BuildID=7F_COVd6PGPpI83_Y8m4/JuQfl7ePbFo4MrG2qB3d/Zmjqi84Ac9pdwsUrzFfA/2ad1BG-AYQxRbZge1ro2
 with debug_info
 not stripped

実行

自分のリポジトリで試してみました。結構、Goのソース書いているので数万行はあるはずです。

gitpod /workspace/try-golang (main) $ time scc .
───────────────────────────────────────────────────────────────────────────────
Language                 Files     Lines   Blanks  Comments     Code Complexity
───────────────────────────────────────────────────────────────────────────────
Go                         938     53779     8524     17684    27571       3235
Markdown                   133      3307      741         0     2566          0
YAML                       112      1743      202       100     1441          0
Makefile                    16       186       39         2      145         10
Plain Text                   9        12        0         0       12          0
HTML                         5       152       25         0      127          0
Dockerfile                   3        62       13         8       41          1
C                            2        30        6         0       24          3
Go Template                  2         2        0         0        2          0
INI                          2        32        4         4       24          0
C Header                     1        81       23        10       48          0
Docker ignore                1         8        1         2        5          0
JSON                         1        28        1         0       27          0
License                      1        21        4         0       17          0
Python                       1        13        4         0        9          1
Shell                        1         8        2         1        5          1
XML                          1         5        0         0        5          0
───────────────────────────────────────────────────────────────────────────────
Total                     1229     59469     9589     17811    32069       3251
───────────────────────────────────────────────────────────────────────────────
Estimated Cost to Develop (organic) $1,030,350
Estimated Schedule Effort (organic) 13.91 months
Estimated People Required (organic) 6.58
───────────────────────────────────────────────────────────────────────────────
Processed 1525617 bytes, 1.526 megabytes (SI)
───────────────────────────────────────────────────────────────────────────────

real    0m0.037s
user    0m0.052s
sys     0m0.044s

おー、速いですね。

なんか下の方にEstimateなんちゃらって行が出てますね。何だこれって訳してみるとこんな意味。

見積開発コスト (オーガニック方式):1,030,350ドル
見積所要期間  (オーガニック方式):13.91ヶ月
見積必要人員  (オーガニック方式):6.58人

簡易見積もりみたいなのも出してくれるみたい

オーガニック方式って何?ってPerplexityさんに聞いてみたところ、以下の回答をしてくれました。聞いたことない単語ですねこれ。海外ではメジャーな用語なのかしら。

「オーガニック方式」とは、ソフトウェア開発において比較的小規模なチームで、チームメンバーが緊密に連携しながら進める開発手法を指します。

clocでも試してみた

ついでなので、clocもインストールして実行してみました。

$ sudo apt update
$ sudo apt install cloc

$ file $(which cloc) | tr ':,' '\n'
/usr/bin/cloc
 Perl script text executable

$ time cloc .
    1279 text files.
    1243 unique files.                                          
      85 files ignored.

github.com/AlDanial/cloc v 1.90  T=0.35 s (3448.4 files/s, 170934.7 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Go                             941          10587          15686          27612
Markdown                       133            741              0           2566
YAML                            93            166             84           1270
make                            13             39              2            139
HTML                             4             17              0             83
C/C++ Header                     1             23             10             48
Dockerfile                       3             13              8             41
JSON                             1              1              0             27
C                                2              6              0             24
INI                              1              2              2             12
Python                           1              4              0              9
Bourne Shell                     1              2              0              6
XML                              1              0              0              5
-------------------------------------------------------------------------------
SUM:                          1195          11601          15792          31842
-------------------------------------------------------------------------------

real    0m0.515s
user    0m0.368s
sys     0m0.146s

なんか、ちょっと結果が異なってますが除外対象とかの考え方の違いであると思っておこうと思います。(調べるのがめんどくさい)

速度は確かに scc の方が速いですね。

参考情報

Goのおすすめ書籍


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。