scc: コード量と複雑度をGitの履歴に重ねて読む
Sloc、Cloc、Code: scc は、純粋な Go で記述された複雑さの計算と COCOMO 推定を備えた、非常に高速で正確なコード カウンターです。
ひと目でわかる
- これは何?
- sccはGoで書かれた単一バイナリのコードカウンターで、コード、コメント、空行、複雑度、重複、COCOMO、Gitの履歴を横断して集計します。
- 誰に向いている?
- 複数のリポジトリを素早く比較し、読むべきファイルや変更の集中箇所を探したい開発者に向きます。複雑度の数値をASTベースの品質判定や言語間の絶対比較として扱う人には向きません。
- 商用利用できる?
- できます。MIT は寛容なライセンスで、著作権表示とライセンス表示を残せば、使用・改変・販売が可能です。
- 今もメンテナンスされている?
- されています。最後のコミットは 2 日前です。
- 何の言語で書かれている?
- 主に Go です(GitHub の言語統計による)。
回答はプロジェクトの GitHub データ(最終同期:2026年9月14日)と当サイトの分析に基づくもので、法的助言ではありません。
オープンソース詳細解説
scc: これは何か
scc はソースコードを数えるコマンドラインツールです。コード行、空行、コメント行、物理行を数えます。cloc、sloccount、tokei に似ています。プロジェクトは Go で書かれており、目標は可能な限り高速なコードカウンタであること、同時に COCOMO 計算、LOCOMO 見積もり、コード複雑度の近似、ユニークコード行または DRYness メトリクスを実行することです。プロジェクトは GitHub の boyter/scc リポジトリにあり、現在 8592 スターと 329 フォークがあります。
scc: インストール方法
README にはいくつかのインストール方法が記載されています。Go ツールチェーン(Go バージョン 1.25 以降が必要)、Snap、Homebrew、Fedora の COPR リポジトリ、MacPorts、Scoop、Chocolatey、WinGet、FreeBSD パッケージ、Docker です。例えば、Go で最新の安定版をインストールするには: go install github.com/boyter/scc/v3@latest。Windows、GNU/Linux、macOS 向けのビルド済みバイナリは、プロジェクトの releases ページから入手できます。
scc: カウントの動作
README には他のツールとの重要な違いが2つ記録されています。コメント内の空行はコメントとして数えられます。例えば、空行を含むブロックコメントは4行のコメントとして数えられます。scc は逐語的文字列も正しく数えます。C# では、@ で始まる文字列はエスケープ文字を無視して末尾の引用符で終わるため、後続のコメントが文字列と誤認されてコードとして数えられることはありません。このツールはまた、処理したバイト数も報告します(ほとんどの出力形式で)。README は、これが静的解析ツールの実行コストを見積もるのに役立つと述べています。
scc: 複雑度の推定
複雑度の数値は、コード内の分岐文やループ文(for、if、switch、while、else、||、&&、!=、== など)を探し、そのファイルのカウンタを増やすことで計算されます。これは循環的複雑度の近似であり、AST を構築しないため正確な計算ではありません。スキャン中に安価なルックアップを実行するだけです。この数値は同じ言語のファイルを比較するためだけに使うべきで、言語間の比較には使えません。一部の言語はループの代わりに再帰を使う可能性があるからです。README は、プロジェクト内で最も複雑なファイルを見つけるために scc --by-file -s complexity を使うことを提案しています。
scc: ULOC と DRYness
ULOC(ユニークコード行)は、言語、ファイル、プロジェクト全体にわたるユニークな行を表します。このアイデアは cmcenroe.me の記事に由来し、標準 Unix ツールの sort -u *.h *.c | wc -l を使用します。これは SLOC よりもプロジェクト複雑度のより良い推定を意図しています。空行や閉じ括弧のような反復構造は割り引かれ、コメントは数えられますが、すべてのファイルに現れるライセンスヘッダが結果を膨らませることはありません。DRYness パーセンテージは ULOC を SLOC で割ったものです。数値が高いほど重複コードが少ないことを示します。ULOC は -u または --uloc で有効になり、DRYness は -a または --dryness で有効になります。README は ULOC 計算で実行時間が2倍になる可能性があると警告しています。
scc: COCOMO と LOCOMO の見積もり
scc は各実行で COCOMO 見積もりを表示します。開発コスト、スケジュール工数、必要な人員です。これらは organic、semi-detached、embedded モデルを選択するか、--cocomo-project-type "custom,1,1,1,1" のようにカスタムパラメータを指定して設定できます。LOCOMO(LLM 出力コストモデル)は、大規模言語モデルでコードベースを再生成するコストを推定する実験的な非業界標準の見積もりツールです。人間の作成コストを推定する COCOMO とは異なり、LOCOMO は既知のコードの再生成コストを推定します。これはオプトインです。--locomo または --cost-comparison で両方を表示できます。LOCOMO はモデルプリセット(large、medium、small、local)を提供し、価格、スループット、レビュー時間、内部パラメータの上書きを許可します。
scc: Git インサイトレポート
README はフラグで選択できる5つの git 対応レポートを説明しています。--hotspots(変更頻度の高い複雑なファイル)、--coupling(一緒に変更されるファイルのペア)、--coupling-for(特定ファイルの爆発半径)、--by-author(最後に触れた人の帰属)、--timeline(時間経過ビュー)です。これらのレポートは通常の scc 実行よりもはるかに遅いです。なぜなら、git バイナリを呼び出さずに、純 Go の Myers diff を使用してコミットごとに1つの diff を実行し、リポジトリ履歴を走査するからです。深さは --depth フラグで制御されます(デフォルト1000コミット、0は全履歴)。
scc: ライセンス
このプロジェクトは MIT ライセンスの下で提供されています。このライセンスは、著作権表示と許可表示がすべてのコピーに含まれることを条件に、ソフトウェアの複製、使用、変更、頒布、サブライセンス、販売の権利を付与します。ソフトウェアは「現状のまま」提供され、商品性、特定目的への適合性、非侵害性の保証を含むいかなる種類の保証もありません。ライセンス文書はサポートやセキュリティ更新については何も述べていません。上記の権利のみを付与します。
sccの数値は同じ条件で比較して初めて役に立ちます。対象ディレクトリ、除外する生成物、Git履歴を読むかどうかを固定し、まず`--by-file -s complexity`で上位ファイルを出します。複雑度は構文木を構築した判定ではなく、言語ごとのトークンを数える近似なので、JavaScriptとGoの値を同じ尺度のように並べません。ULOCとDRYnessは通常のカウントより時間と解釈の負担が増え、`hotspots`、`coupling`、`timeline`は履歴の深さにも影響されます。COCOMOは人間の開発費用、LOCOMOは大規模モデルが再生成する費用の推定で、見積もりを実績と呼ぶものではありません。出力形式とコマンドラインを保存し、リポジトリの変更後に同じ条件で再計測できる状態にします。
編集部の結論
複数のリポジトリを素早く比較し、読むべきファイルや変更の集中箇所を探したい開発者に向きます。複雑度の数値をASTベースの品質判定や言語間の絶対比較として扱う人には向きません。最初に既知の小さなリポジトリで`scc --by-file -s complexity`を照合し、`--uloc`、`hotspots`、`coupling`、`timeline`を別々に測って実行時間と出力の意味を確認してください。
コミュニティノート