Salesforce開発にも便利に使えるステップカウンタ「cloc」のご紹介

April 27, 2021 Tomoyuki Kayama


今回は、ステップカウンタclocをご紹介します。
https://github.com/AlDanial/cloc
Salesforce開発で利用する場合のメリットと、ちょっとした注意点を踏まえてご説明したいと思います。

clocは空白行、コメント行、実際のソースコードの行数を分けてカウントしてくれます。 clocは、以下のようなSalesforceの各リソースに対応していますので、Salesforce開発にもすぐに使うことができます。

  • Apex Class (.cls)
  • Apex Trigger (.trigger)
  • Visualforce Component (.component)
  • Visualforce Page (.page)

カウントの対象として、以下のものを指定できます。Gitに対応しているので、SFDXとも非常に相性が良いです。

  • ファイル
  • ディレクトリ
  • 圧縮ファイル(tar balls, Zip files, Java .ear files)
  • Gitのコミットハッシュ、またはブランチ名

では早速使ってみましょう。
(以下の内容は全てmacOS Catalina 10.15.7 で動作確認しました。)
clocをインストール

% brew install cloc

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

% cloc --version
1.88

SalesforceのTrailheadのモジュールを使ってステップ数を確認してみましょう。
ブラウザで以下のURLを表示します。
https://github.com/trailheadapps/lwc-recipes
Zipファイルをダウンロードして、計測してみましょう。
Code から、 Download ZIP を選択してください。

コマンドを実行

% cd downloaded/directory
% cloc lwc-recipes-master.zip
     575 text files.
     493 unique files.                                          
      94 files ignored.

github.com/AlDanial/cloc v 1.88  T=0.92 s (522.1 files/s, 71787.4 lines/s)
-----------------------------------------------------------------------------------
Language                         files          blank        comment           code
-----------------------------------------------------------------------------------
JSON                                35              0              0          27295
JavaScript                         183           4641           4152          22328
XML                                116             11              0           3138
HTML                                80             52              5           2139
YAML                                13            122            128            562
Markdown                            10            163              0            423
CSS                                 29             30             10            331
Apex Class                           9             38             34            264
Visualforce Page                     3             12              8            132
Bourne Shell                         1              6              3             38
DOS Batch                            1             10              4             38
Visualforce Component                1              1              0             18
-----------------------------------------------------------------------------------
SUM:                               481           5086           4344          56706
-----------------------------------------------------------------------------------

Lightning Web Componentのモジュールなので、JavaScriptのステップ数が多いですね。 また、Apex Class、Visualforce Page、Visualforce Componentなどもバッチリカウントされています。

今度はディレクトリやファイルをカウントしてみましょう。
Zipファイルを解凍してもカウントできますが、以降の手順で使うので今回はcloneします。URLの右のアイコンをクリックするとURLがコピーできますので、そのURLを使って、git cloneします。

% git clone https://github.com/trailheadapps/lwc-recipes.git
Cloning into 'lwc-recipes'...

ダウンロードしたディレクトリをカウントします。

% cloc lwc-recipes
     575 text files.
     493 unique files.                                          
      95 files ignored.

github.com/AlDanial/cloc v 1.88  T=0.65 s (736.3 files/s, 101255.9 lines/s)
-----------------------------------------------------------------------------------
Language                         files          blank        comment           code
-----------------------------------------------------------------------------------
JSON                                35              0              0          27295
JavaScript                         183           4641           4152          22328
XML                                116             11              0           3138
HTML                                80             52              5           2139
YAML                                13            122            128            576
Markdown                            10            163              0            423
CSS                                 29             30             10            331
Apex Class                           9             38             34            264
Visualforce Page                     3             12              8            132
Bourne Shell                         1              6              3             38
DOS Batch                            1             10              4             38
Visualforce Component                1              1              0             18
-----------------------------------------------------------------------------------
SUM:                               481           5086           4344          56720
-----------------------------------------------------------------------------------

ファイルをカウントします。

% cloc lwc-recipes/force-app/main/default/classes/AccountController.cls
       1 text file.
       1 unique file.                              
       0 files ignored.

github.com/AlDanial/cloc v 1.88  T=0.01 s (104.6 files/s, 1673.3 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
Apex Class                       1              1              0             15
-------------------------------------------------------------------------------

 

今度は、Gitのコミットハッシュを使って差分をカウントしてみましょう。
Gitの画面で、適当なPull request を選択します。

Commitsからコミットハッシュをコピーします。

コピーしたハッシュのコミットとHEADを比較してみましょう。

% cd lwc-recipes
% cloc --diff c99e9dad8e894603038e96c0584dfb6a2bff34ad HEAD
       3 text files.
       3 text files.
       0 files ignored.                             

github.com/AlDanial/cloc v 1.88  T=0.67 s (4.5 files/s, 18135.1 lines/s)
-------------------------------------------------------------------------------
Language                     files          blank        comment           code
-------------------------------------------------------------------------------
JSON
 same                            0              0              0          12012
 modified                        2              0              0             54
 added                           0              0              0              1
 removed                         0              0              0              6
YAML
 same                            0              0              0              2
 modified                        1              0              0              0
 added                           0              0              0             14
 removed                         0              0              0              0
-------------------------------------------------------------------------------
SUM:
 same                            0              0              0          12014
 modified                        3              0              0             54
 added                           0              0              0             15
 removed                         0              0              0              6
-------------------------------------------------------------------------------

変更が無い行数、修正行数、追加行数、削除行数が表示されました。 今回はコミットハッシュを使用しましたが、--diff はディレクトリ同士やzipファイル同士を指定して比較することもできます。

本稿執筆時点(2021/1/5)では、 --diff で コミットハッシュを使って比較した場合、比較対象のファイル名に全角文字が入っている場合は、エラーになってしまいました。
Salesforceの場合、layoutsやprofilesなどに全角の日本語ファイル名でファイルが作成されてしまうことがありますので、clocを使う前提の場合、API名を全体的に半角英数で定義していただいたほうが良いかもしれません。
そのようにエラーが出る場合は、zip同士で比較すると、日本語ファイル名のファイルはエラーは出しながらも、それ以外のファイルでは比較することができました。layoutsやprofilesなどのステップ数を真面目に比較することはあまり無いと思いますので、このZip比較の方法でも十分に役に立つと思います。

比較用のzipファイルは、先ほどのpull requestの画面からだと、<>を選択すると、

リポジトリの画面でコミットを指定した状態になります。ここでCodeをクリックすると、その時点のZipをダウンロードすることができますので、これを使ってZip同士を比較してください。

% cloc --diff a.zip b.zip

 

オプションに --csv を使用すると、csv形式で出力することができます。報告書などに使用する場合に便利です。

% cloc --csv --diff c99e9dad8e894603038e96c0584dfb6a2bff34ad HEAD > diff.csv

 

私の場合、以前はかぞえチャオ!に大変お世話になっていました。
しかし当時は .javaの定義ファイルをコピーして.classとして定義して、.JSPの定義ファイルをコピーして.pageに定義して…と手間を踏んでやっとステップ数をカウントしていたのですが、このツールのおかげで非常に楽になりました。

以上、clocのご紹介でした。

 


・・・・・・・・・・・・

一緒に働きませんか?

現在弊社では、プロジェクトマネージャー、シニア・コンサルタント、コンサルタント、ソリューションアーキテクト、アカウントエグゼクティブの5つのポジションの採用を行っております。

アピリオの仕事にご興味のある方は、こちらをご覧ください。
アピリオのリソースハブにもさまざまな資料を掲載しています。

著者について

Tomoyuki Kayama

システム開発のスピード感と品質を追求すべく、日々、鼻息をあらげています。 将来的には、考えただけで仕事を片付けてくれるシステムを開発したいと思っています。

Tomoyuki Kayama のコンテンツをもっと見る

戻れません

次へ
コールアウトがあるバッチの単体テストクラス作成に、Apex初心者が挑んだ話 - 基本編
コールアウトがあるバッチの単体テストクラス作成に、Apex初心者が挑んだ話 - 基本編

今回は、業務を通して、コールアウトがあるバッチの単体テストクラスを書く機会がありましたので、その中で得た知識を2回に渡り掲載します。ちなみに、Apexで初めて単体テストクラスを書きました。 1回目は、単体テストクラ...

アピリオまでお気軽にお問合せください

ご質問はこちら