この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
Linterを用いてのチェックを行う場合、個人的に一番厄介なのはシェルスクリプト。いずれの環境でも問題なく動かせることを見送るとしても、それでもWarning表示がなかなか消えません。
ShellCheckを使った、OSX環境でのWarning対処として実践してみたことについて書いてみました。
ShellCheck環境の設定
ShellCheckを有効にしておきます。
brew install shellcheck
この記事での実行は coc-diagnostic
にて。
:CocInstall coc-diagnostic
とあるスクリプトのWarning潰し
よくあるシェルスクリプトもWarningの宝庫です。
#!/bin/sh
CURRENT=$(cd $(dirname $0) && pwd)
cd $CURRENT
ポイントは一行に複数のWarning表示が含まれているところ。今回該当したチェックポイントは以下の通り。
- SC2086: Double quote to prevent globbing and word splitting
- SC2046: Quote this to prevent word splitting
- SC2164: Use 'cd … || exit' or 'cd … || return' in case cd fails
Warningが出ないように修正をいれます。
#!/bin/sh
CURRENT="$(cd "$(dirname "$0")" && pwd)"
cd "$CURRENT" || exit
処理の中断を防ぐために1行目にはダブルクオーテーションを適用し(SC2046 & SC2086)、2行目も同じくダブルクォーテーションを適用しつつ(SC2086)、想定外の箇所への移動を防ぐため分岐で中断するようにします(SC2164)。
適用するLintの限定
全般で指定したい場合は .shellcheckrc
にて。
% cat ~/.shellcheckrc
disable=SC2164
特定のスクリプトファイル限定でLintを外したい場合は、シェルスクリプト内でIDを指定します。
#!/bin/sh
# shellcheck disable=SC2164
CURRENT=$(cd $(dirname $0) && pwd)
cd $CURRENT
GitHub Actionsでの導入
手間を掛けずに定期チェックする場合は以下のActionを使う手もあります。
- name: Run ShellCheck
uses: ludeeus/action-shellcheck@master
env:
SHELLCHECK_OPTS: -e SC2059 -e SC2034 -e SC1090
あとがき
厳密に適用を考え始めると、相当な手直しが発生するはずです。優先して対処したいのは、不測の場所での処理が誤実行されるケースでしょうか。可能であればCICD等を通してLintをいれておきましょう。