Bashプログラミング
 Computer >> コンピューター >  >> プログラミング >> Bashプログラミング

ShellCheckとは?シェルスクリプトのバグや問題点を検出できる静的解析ツールの使い方

ShellCheckは、bash/shシェルスクリプトに含まれる問題のあるコードに対して、警告や改善提案を表示してくれる静的解析ツールです。利用方法は複数あります。たとえば https://www.shellcheck.net にアクセスし、オンラインエディタ(Ace – JavaScript製のスタンドアローンコードエディタ)にスクリプトを貼り付ければ、即座にフィードバックを得られます。このサイトは常に最新のgitコミットに同期されており、ShellCheckを手軽に試せる最も簡単な方法です。

また、自身のマシンにインストールしてターミナルから実行したり、テキストエディタやビルド・テストスイートに統合して利用することもできます。

ShellCheckが主に行うのは、次の3つのことです。

  • シェルが不可解なエラーメッセージを返す原因となる、初心者に典型的な構文上の問題を指摘・解説する。
  • シェルを奇妙で直感に反した動作させる原因となる、中級者レベルの典型的な意味的な問題を指摘・解説する。
  • それまで動作していた上級者のスクリプトが、将来の状況で失敗する恐れのある、微妙な注意点・エッジケース・落とし穴を指摘する。

本記事では、Linux環境でシェルスクリプト内のバグや問題のあるコードを見つけるために、さまざまな方法でShellCheckをインストールし、活用する方法を紹介します。

LinuxへのShellCheckのインストールと基本的な使い方

ShellCheckは、パッケージマネージャーを使えば簡単にローカル環境へインストールできます。

Debian/Ubuntuの場合

# apt-get install shellcheck

RHEL/CentOSの場合

# yum -y install epel-release
# yum install ShellCheck

Fedoraの場合

# dnf install ShellCheck

インストールが完了したら、先ほど挙げたそれぞれの方法での使い方を見ていきましょう。

WebからShellCheckを使う

https://www.shellcheck.net にアクセスし、用意されたAceエディタにスクリプトを貼り付けると、エディタの下部に出力結果が表示されます。

次の例では、テスト用のシェルスクリプトとして以下の内容を使用します。

#!/bin/bash
#declare variables
MINARGS=2
E_NOTROOT=50
E_MINARGS=100
  
#echo values of variables 
echo $MINARGS
echo $E_NONROOT
exit 0;

このスクリプトにはいくつかの問題があります。まず、変数E_NOTROOTE_MINARGSは宣言されていますが未使用です。ShellCheckはこれらを「示唆的なエラー」として報告します。

SC2034: E_NOTROOT appears unused. Verify it or export it.
SC2034: E_MINARGS appears unused. Verify it or export it. 

次に、echo $E_NONROOT の箇所では、変数E_NOTROOTを出力するつもりで誤った名前が使われています。そのため、ShellCheckは次のエラーを表示します。

SC2153: Possible misspelling: E_NONROOT may not be assigned, but E_NOTROOT is

さらに、echoコマンド内の変数がダブルクォートで囲まれていません(ダブルクォートはグロブ展開や単語分割を防ぐのに役立ちます)。このため、ShellCheckは次のような警告を出します。

SC2086: Double quote to prevent globbing and word splitting.

ターミナルからShellCheckを使う

コマンドラインからもShellCheckを実行できます。先ほどと同じシェルスクリプトを使って確認してみましょう。

$ shellcheck test.sh

テキストエディタからShellCheckを使う

さまざまなエディタ上で、ShellCheckの提案や警告を直接表示することもできます。ファイルを保存すると同時にコード内のエラーが表示されるため、おそらくこれが最も効率的な使い方でしょう。

Vimでは、ALEまたはSyntasticを使用します(ここではSyntasticを使います)。

まず、Syntasticを簡単にインストールできるようPathogenを導入します。以下のコマンドでpathogen.vimファイルと必要なディレクトリを取得してください。

# mkdir -p ~/.vim/autoload ~/.vim/bundle && curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim

次に、~/.vimrcファイルに以下の行を追加します。

execute pathogen#infect()

Pathogenのインストール後、Syntasticを~/.vim/bundleに配置します。

# cd ~/.vim/bundle && git clone --depth=1 https://github.com/vim-syntastic/syntastic.git

続いて、Vimを一度閉じて再起動し、以下のコマンドを入力します。

:Helptags

すべて順調にいけば、VimShellCheckが統合されているはずです。保存時にスクリプトの問題が自動的にハイライト表示されるようになります。

もし上記の手順でエラーが発生した場合は、Pathogenが正しくインストールされていない可能性があります。手順をやり直し、以下の点を確認してください。

  • ~/.vim/autoload~/.vim/bundleの両方のディレクトリを作成したか。
  • ~/.vimrcファイルに execute pathogen#infect() の行を追加したか。
  • Syntasticを~/.vim/bundle内にgit cloneしたか。
  • 上記すべてのディレクトリに適切なアクセス権限があるか。

その他のエディタでも、シェルスクリプトの問題あるコードをチェックできます。

  • EmacsではFlycheckを使用。
  • Sublime TextではSublimeLinterを使用。
  • AtomではLinterを使用。
  • その他多くのエディタでは、GCC互換のエラー出力形式を利用可能。

ヒント:公式サイトの「Gallery of bad code」を活用すると、さらに多くのチェック事例を試すことができます。

ShellCheckのGitHubリポジトリ: https://github.com/koalaman/shellcheck

以上です!本記事では、Linux上でシェルスクリプトのバグや問題のあるコードを見つけるためにShellCheckをインストールし、Web・ターミナル・エディタの各方法で活用する手順を解説しました。ご意見があれば、ぜひコメント欄でお聞かせください。

他にも類似の便利なツールをご存じでしたら、そちらについてもコメントで情報を共有していただけると幸いです。

  1. Windows・Mac対応!無料で使えるフローチャートソフトおすすめ10選

    フローチャートは本当に便利なツールです。優れたフローチャート作成ソフトを使えば、誰でも手間をかけずに美しい図を作成できます。オフィスでのプレゼンテーションから学校の課題まで、フローチャートはあなたの資料に説得力と完成度をプラスしてくれるでしょう。 長い文章の段落とフローチャートを比べてみてください。どちらが読みやすく、理解しやすいでしょうか?もちろん答えはフローチャートです。フローチャートはプロセスを整理し、物事を説明するための最も重要な手段の一つです。各ステップの内容が明確に視覚化されるため、プロセス全体の把握が格段に容易になります。 手作業でフローチャートを作成するのは、手間も時間も労力

  2. Windows・Mac対応の無料フローチャートソフトおすすめ10選

    フローチャートって、なんだかワクワクしませんか?特に優れたフローチャートソフトを使えば、誰でも手軽に美しい図を作成できます。オフィスのプレゼンテーションから大学の課題まで、フローチャートはあなたの資料を一段と引き立ててくれる強力な味方です。 長い文章の段落とフローチャートを比べてみてください。どちらが読みやすく、理解しやすいでしょうか?もちろん答えはフローチャートです。フローチャートはプロセスを整理し、物事を説明するための最も重要な手段の一つ。各ステップの内容が明確に可視化されるため、複雑な流れも直感的に把握できます。 手作業でフローチャートを作成するのは、時間も手間もかかり、なかなか大変な