Slide 1

Slide 1 text

gocloc Umeda.go 2019 Winter 2019.01.18

Slide 2

Slide 2 text

whoami Hideo Hattori (hhatto) 関西圏でソフトウェアエンジニアをしています Rust, Python, Go, C などが好きです

Slide 3

Slide 3 text

今日お話しすること gocloc 作ってみました 得られた知見

Slide 4

Slide 4 text

gocloc とは?

Slide 5

Slide 5 text

gocloc ソースコードの行数を数えるツール Perl 実装のcloc がベース

Slide 6

Slide 6 text

モチベーション cloc が遅いので速いツールが欲しかった Rust でも同じような実装があったのでGo でもどれ くらい高速になるか試したかった

Slide 7

Slide 7 text

実行イメージ $ gocloc . ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ Language files blank comment code ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ Go 13 164 42 1369 Markdown 1 20 0 149 Makefile 1 5 0 14 TOML 1 2 0 9 YAML 1 2 0 8 ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ TOTAL 17 193 42 1549 ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

Slide 8

Slide 8 text

主な機能 言語毎のファイル数/ 空行数/ コメント行数/ コード 行数の表示 ファイル毎のファイル数/ 空行数/ コメント行数/ コ ード行数の表示( ­­by­file オプション) 出力結果が多様なフォーマットに対応

Slide 9

Slide 9 text

得られた知見

Slide 10

Slide 10 text

得られた知見 goroutine 使わなくてもGo で実装するだけで動作 が軽量なツールが実装できる シングルバイナリでツールを提供できて配布が楽 ファイルの言語判定にはsrc-d/enry を使うとより高 速になる generaltso/linguist がもともと存在していた が、src-d/enry に切り替えたところ高速に動作 した

Slide 11

Slide 11 text

得られた知見 boyter/scc というGo の別実装が登場 ファイルの言語判定が自前なので速い goroutine を使っていてgocloc よりさらに高速 gocloc もgoroutine 使えばさらに高速化できる かもしれない ATS という言語で実装されているPolyglot というツ ールが最速

Slide 12

Slide 12 text

合わせて読むと良いかもしれないリンク集 gocloc - fast cloc implementation | hexacosa.net 実装初期にまとめたgocloc 誕生の経緯など Sloc Cloc and Code Revisited - Optimizing an already fast Go application | Ben E. C. Boyter Yet Another なGo で実装されたcloc クローン。 gocloc より速い!! Polyglot Is the Fastest Code-counting Tool Available Polyglot という最速のcloc クローン。ATS という 言語で実装されている

Slide 13

Slide 13 text

Thank you!!