2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

bashのコードメトリクス測定ツールをgolangで実装してみた

Posted at

何の話?

シェルスクリプトって、速度重視でついつい適当に書いちゃいますよね。
プロダクション環境に納品するものであっても、動けばいいや感もあったり。
で、こんな現状を打開すべく、なんかいいツールなり何なりないかな?って思って探してみました。

codestyle

Googleのstyleguideがしっくりきました。
日本語訳していただいている、すばらしい記事もあります。(ちょっと古いかも)

shellcheck

上述のstyleguideでも記載されていますが、規模の大小問わず、shellcheckはしましょうと言っています。完全同意。
最初は指摘がうっとうしいな〜と思うのですが、慣れてくると問題ないかと。

comment

Googleのstyleguideにおけるコメントの記述を抜粋します。

先頭

#!/bin/bash
#
# Perform hot backups of Oracle databases.

関数

#######################################
# Cleanup files from the backup directory.
# Globals:
#   BACKUP_DIR
#   ORACLE_SID
# Arguments:
#   None
#######################################
function cleanup() {}

こんな感じですね。これはこれで良いと思うのですが、ワタシの職場では、
シェルは仕様書も出せ!とかよく言われます。(シェル読んだほうが早いんですが、納品とか色々あるので)
Googleのスタイルだと仕様書の自動生成とかが難しいので、
こんなスタイルにすれば、markdownに変換できるので、
納品前に一気にドキュメント化とかしちゃえばいいのかなと。shdoc

メトリクス

これがないんですよねぇ。そもそもbashにメトリクスもクソもないってことなのかな。
ワタシが使ったことがあるlizardにはbashってないんですよねぇ。
tokeiだとサイクロマティック複雑度測れないし。。。

ってことで作りました。golangで作ったので、linuxでもmacでもwindowsでも動きます。

usage

Usage: shccn path
これだけです。パスはディレクトリでもファイルでもかまいません。
ディレクトリの場合はディレクトリ以下のシェルすべて(再帰的に見るのではなく、直下のシェルのみ)をチェックします。

output

--------------------------------------------------------------------------------
Name                      Lines       Code   Comments     Blanks  Functions
--------------------------------------------------------------------------------
make.sh                       8          8          0          0          0
tshare.bash                  30         24          0          6          3
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
Name                                           Code                  CCN
--------------------------------------------------------------------------------
BARE_CODE@make.sh                                 7                    1
BARE_CODE@tshare.bash                             6                    4
play@tshare.bash                                  2                    1
start@tshare.bash                                 3                    1
usage@tshare.bash                                 4                    1
--------------------------------------------------------------------------------

こんな感じです。このあたりはlizardだったりtokeiにインスパイアされてます。
また、小さいシェルだと関数とか作らずにバンバンコード書いていきますので、
そのようなコードはBARE_CODEという名前で統計を取っています。

ダウンロード

ここにおいています。

2
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?