2020年2月21日金曜日

Gitブランチ間の差分ステップ数を取得する。

はじめまして、オフィス狛のyuckieee(ゆっきー)です。

初投稿となる今回は、技術よりではなく開発付帯作業で使えそうなツールをご紹介しようと思います。

はじめに

みなさんが関わっているプロジェクトが、割とガッチリしたところだと「生産性の分析」のために開発ステップ数を集計されているのではないでしょうか。
例えば、母体のソースコードのステップ数、変更後の追加・修正・削除ステップ数などです。

狛ではソースコードをGitで管理しており、Git自体にもブランチ間の差分をとるdiffコマンドが存在します。ですが、このdiffコマンドがイケていない(笑)

そこで、幾つかネットで探して、最終的に「cloc」というオープンソースのツールを導入してみることにしました。
これが割と快適だったので、導入方法や出力イメージなどをご紹介します。

1.clocについて

「cloc(Count Lines of Code)」は、指定ディレクトリ又はファイルのステップ数を解析してくれる便利ツールです。Git diffコマンドとの大きな違いは、ブランチ間の差分ステップ数を「追加」「変更」「削除」で識別し、カウントしてくれる点です。
 現在、オープンソースとしてGitHubに公開されており無償で利用が可能です。

 GitHub : cloc
 ※clocは、他のソースからコピーされた部分を除きGNU General Public License v2の下でライセンスされています。

2.導入方法

「cloc」は、MacBookやWindows、Linuxなど幅広いOSで利用が可能です。
今回は、私が開発で使っているのがMacBookなので、そちらへの導入方法をご紹介します。

インストール環境:MacOS Catalina バージョン 10.15.2

①HomeBrewをインストール

今回は、HomeBrewを使用してインストールするため、HomeBrew自体をインストールします。 MacOSへのインストール要件はコチラを参照ください。

最初に対象のMacにHomeBrewがインストールされているかどうか確認します。
% brew --version
zsh: command not found: brew

インストールされていない場合は、ターミナルから下記のコマンドを実行し、インストールしてください。 ※インストールコマンドはHomeBrewの公式ページより取得
% /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

実行完了後、正常にインストールされた事を確認します。
% brew --version
Homebrew 2.2.5

②clocをインストール

cloc本体のインストールを行います。
ターミナルを立ち上げ、以下のコマンドを実行してください。
% brew install cloc

実行完了後、正常にインストールされた事を確認します。
% cloc --version
1.84

導入作業はこれで完了です🎉

3.利用方法

主目的はブランチ間の差分ステップ数取得ですが、今回は2つ利用方法をご紹介します。

パターン① 現行のブランチに対するステップ数解析

①ターミナルを立ち上げ、該当のGitローカルリポジトリに対しclocコマンドを実行します
% cloc /Users/yuckieeee/Gitローカルリポジトリ

<実行結果(例)>
    3000 text files.
    3000 unique files.                                          
      500 files ignored.

github.com/AlDanial/cloc v 1.84  T=5.70 s (355.9 files/s, 33435.9 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Java                           350           4000              350          25000
XML                            250           2500              300         12000
 ・
 ・
 ・
-------------------------------------------------------------------------------
SUM:                          1500       10000            2000     60000
-------------------------------------------------------------------------------

パターン② ブランチ間のステップ数の差分解析

①比較対象のブランチ2つをGitからダウンロードしてください
 GitLabだとリポジトリのトップ画面右上にダウンロードアイコンがあります。

②ターミナルを立ち上げ、ダウンロード先のディレクトリに移動します

③下記のclocコマンドを実行してください
 zipやtarのままでもステップ数の解析が可能です。
% cloc --diff master.tar branch.tar
※圧縮ファイルの場合は、拡張子まで指定してください

<実行結果(例)>
     300 text files.
     300 text files.
          0 files ignored.                                         

github.com/AlDanial/cloc v 1.84  T=1.55 s (337.8 files/s, 22344.2 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Kotlin
 same                          200           1800            400          12000
 modified                      90                  0                 0               180
 added                             3             300           122              1300
 removed                         0                 0                0                100
XML
 same                          100            800             50            10000
  ・
  ・
  ・
-------------------------------------------------------------------------------
SUM:
 same                          100           200           100          10000
 modified                       20                0                3               100
 added                           20            200           150            1800
 removed                      30               10               0               100
-------------------------------------------------------------------------------

これでブランチ間の追加・修正・削除ステップ数が確認できました。 clocは、改行、コメントやコードごとに集計されるので、非常に分かり易いです。
欲を言うなら、パータン②のダウンロード作業が無くなってくれれば最高です☺️←

4.コマンドオプション

最後に、重宝しそうなオプションをいくつか紹介して終わろうと思います。

・比較対象を指定

clocはディレクトリ、ファイル、Git hashによる比較対象の指定が可能です。
Git hashでのコマンド指定を例示します。
// ローカルリポジトリに遷移
% cd /Users/yuckieeee/ローカルリポジトリ/
// 対象コミットのハッシュを確認する
% git log
// 上記で確認したハッシュを指定する
% cloc --diff <コミットハッシュ①> <コミットハッシュ②> 

・ファイルごとに解析結果を表示

何も指定しない場合は、プログラム言語ごとに集計されます。
ファイル単位に確認したい場合は、以下のように--by-fileオプションを追加すればOKです。
% cloc --diff master.tar branch.tar --by-file

・CSVファイル出力

CSVファイル出力したい場合は、以下のようにcsvタイプ指定と出力先指定をすればOKです。
% cloc --diff master.tar branch.tar --csv > result.csv

まとめ

開発の付帯作業の必要性は分かるものの、出来るだけ時間を掛けたくなですよね。。
これからも便利そうなツールや機能があれば紹介していきたいと思います。

0 件のコメント:

コメントを投稿