何の話?
シェルスクリプトって、速度重視でついつい適当に書いちゃいますよね。
プロダクション環境に納品するものであっても、動けばいいや感もあったり。
で、こんな現状を打開すべく、なんかいいツールなり何なりないかな?って思って探してみました。
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
という名前で統計を取っています。
ダウンロード
ここにおいています。