5 ポイント 投稿者 GN⁺ 2023-11-25 | 1件のコメント | WhatsAppで共有

ShellCheck の紹介

  • ShellCheck はシェルスクリプトのバグを見つけてくれるツールです。
  • ローカル環境では cabal、apt、dnf、pkg、brew を通じてインストールできます。
  • スクリプトを貼り付けると、ShellCheck が解析結果を出力します。

ShellCheck の特徴

  • ShellCheck は GPLv3 ライセンスで自由に利用できます。
  • ShellCheck Wiki にドキュメントがあり、GitHub でソースコードを確認できます。
  • ほとんどのディストリビューションやパッケージマネージャーですでにパッケージ化されています。
  • 主要なエディタで統合リンターとしてサポートされており、CodeClimate、Codacy、CodeFactor を通じて GitHub リポジトリのコードを自動で検査できます。
  • Haskell 言語で書かれており、これに関心のあるユーザーに適しています。

謝辞

  • GitHub Sponsors への特別な感謝を表します: Gitpod、Mercedes-Benz、BashSupport Pro、per1234、WhitewaterFoundry、cavcrosby、dcminter、photostructure、Cronitor、djdefi、steve-chavez など。

GN⁺ の意見

  • この記事で最も重要なのは、ShellCheck がシェルスクリプトのバグを見つけるのに役立つツールだという点です。
  • ShellCheck は無料で、さまざまなプラットフォームやエディタでサポートされており、使いやすい点が人々の興味を引くかもしれません。
  • 特に、オープンソースコミュニティの支援と Haskell 言語で開発されている点が、ソフトウェア開発者にとって魅力的に映る可能性があります。

1件のコメント

 
GN⁺ 2023-11-25
Hacker Newsのコメント
  • スクリプト作成時の注意点

    • -u (nounset) オプションを使い、宣言されていない変数の使用時にエラーにすることが推奨される。配列展開時に空配列が unbound と見なされる場合は例外。
    • -n (noexec) オプションを使うと、コマンドの実行を防ぐドライラン (dry-run) を試せる。
    • -e (errexit) オプションも有用だが、失敗した "naked" コマンドだけが終了を引き起こす点に注意が必要。これを避けるため、コマンドに || fail "..." を追加するほうを好む。
  • シェルスクリプトの脆弱性の発見

    • 算術展開による権限昇格の脆弱性を発見した。たとえば、$((1 + ENV_VAR)) によって $ENV_VAR を制御できるなら、コードを注入できる。
    • Shellcheck はデフォルト設定ではこれを検出できない。セキュリティ上重要な機能を実装するときは、シェルを使わないほうがよい。
  • Shellcheck と strictbash

    • Shellcheck は非常に有用。
    • strictbash はスクリプト実行前に Shellcheck を実行するラッパーで、エラーがあるとスクリプトを実行できなくする。また、Bash の "strict mode" フラグをすべて設定する。
  • Shellcheck への言及

    • Shellcheck への言及は多く、最後の大規模な議論は 2021 年にあった。
  • Haskell と Turtle の使用

    • Haskell を使い、Turtle ライブラリとともにデプロイスクリプトを変換することで、重複を大幅に減らした。
    • その結果、コードはずっと短くなった。
  • Shellcheck と linter の使用

    • 「すべての警告を修正してからコミットする」という原則に従い、Shellcheck や他の linter を pre-commit 設定に含めている。
    • ほとんどのシェルスクリプトは .gitlab-ci.yml ファイルに含まれているため検査しにくい。これを自動で検査するラッパーを作った。
  • Bash 言語サーバー

    • Bash 言語サーバーも存在する。
  • Shellcheck の学習効果

    • Shellcheck を使って最初の本番用 /bin/sh スクリプトを検査したとき、80年代からスクリプトを書いてきた経験があるにもかかわらず、新しいことを学べた。
  • Bach の使用推奨

    • Bash を使わなければならないときは Bach を使うことが推奨される。十分に長い処理に Bash を使うのは適切でないかもしれない。
  • Shellcheck と source/import 処理

    • Shellcheck はすばらしいが、source や import の扱いは非常に煩雑。これは sh が悪夢のようだから生じる問題だ。