ウェブサイト検索

シェルチェックを使ってシェルスクリプトを改善し、デバッグする方法


ShellCheckは、シェルスクリプトをチェックし改善するために使用できる無料でオープンソースの静的解析ツールです。一般的なエラーやエッジケースのエラーの両方を強調表示し、適切な修正案を提案することができます。ShellCheckはオンラインまたはシステムユーティリティとして使用できますが、さまざまなテキストエディタにリンターとして統合することも可能です。

このチュートリアルでは、最も使用されているLinuxディストリビューションにShellCheckをインストールして使用する方法、そしてそれをVimやVisual Studio Codeに統合する方法を学びます。

このチュートリアルでは、あなたは学びます:

  • 最も使用されているLinuxディストリビューションのいくつかにShellCheckをインストールする方法
  • ShellCheckを使用してシェルスクリプトをチェックする方法
  • ShellCheckのオンライン版の使い方
  • Vim と Visual Studio Code に ShellCheck を統合する方法

カテゴリー使用された要件、規約、またはソフトウェアのバージョン
システム分布に依存しない
ソフトウェアShellCheck
他のソフトウェアをインストールするための管理者権限
協定# – 指定されたLinuxコマンドは、ルートユーザーとして直接またはsudoコマンドを使用して実行される必要があります $ – 指定されたLinuxコマンドは、通常の非特権ユーザーとして実行される必要があります

インストール

まず最初に、お気に入りのLinuxベースのシステムにShellCheckをインストールしましょう。これは非常に簡単な作業です。なぜなら、このユーティリティは最も多く使われているディストリビューションのソフトウェアリポジトリにパッケージされているからです。私たちがするべきことは、適切なパッケージマネージャーを使用することだけです。例えば、Fedoraではdnfを使用します:

sudo dnf install ShellCheck

DebianおよびDebianベースのシステムでは、その代わりにaptを使用します。

sudo apt install shellcheck

Archlinuxでは、pacmanを使用します。

sudo pacman -S shellcheck

基本的な使用法

ShellCheckの使用は非常に簡単です。ほとんどの場合、私たちはただそれを呼び出し、チェックしたいスクリプトのパスを引数として渡すだけです。例を挙げてみましょう。以下のコードスニペットでは、シェル変数を引用符で囲むのを省略していることがはっきりとわかります。これは一般的なミスであり、状況によっては危険を伴うことがあります。

  1. #!/bin/bash
  2. これはテキストです
  3.  
  4. エコー $テキスト

私たちは上記のコードをscript.shというファイルに保存します。ShellCheckで確認するために、単にユーティリティに引数として渡します。

shellcheck script.sh

上記のコマンドの結果は次のとおりです:

In script.sh line 5:
echo $text
     ^---^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: 
echo "$text"

For more information:
  https://www.shellcheck.net/wiki/SC2086 -- Double quote to prevent globbing ...

ご覧のとおり、エラーは正しく見つけられ、強調表示されています。エラーは特定のコードによって識別されており、この場合は SC2086 です。また、その簡単な説明も提供されています。対応するShellCheck Wikiページへのリンクをクリックすることで、詳細情報を取得できます:

ShellCheckは、他のことの中でも「bashisms」を検出することもできます。これはBashシェル特有の非標準機能です。シェルインタープリタとしてBashを明示的に指定しないと警告されます。例えば、次の例を見てください:

  1. #!/bin/sh
  2. # 現在の日付と時刻を表示
  3. function now() {
  4. 日付 ‘+%Y/%m/%d %H:%M’
  5. }

このコードに対してShellCheckを実行すると、次の出力が得られます。

In date.sh line 4:
function now() {
^-- SC2112 (warning): 'function' keyword is non-standard. Delete it.

For more information:
  https://www.shellcheck.net/wiki/SC2112 -- 'function' keyword is non-standar...

コードには間違いはありませんが、ShellCheckは警告を出します。なぜなら、関数を作成するために「function」キーワードを使用したからです。この構文はbash固有のものであり、スクリプトインタープリタとしてbashを明示的に指定していないからです(私たちは/bin/shを使用しましたが、これはUbuntuなどの一部のディストリビューションで「dash」シェルを指すシンボリックリンクです)。

オンライン版のShellCheckを使用して

もし何らかの理由で私たちがシステムにShellCheckをインストールできない、またはインストールしたくない場合は、ShellCheckのウェブ版を使用してオンラインでスクリプトをチェックすることができます。私たちがしなければならないのは、オンラインエディタにコードを貼り付けることだけです。警告があれば、それが下に表示されます。

上記のスクリーンショットにあるように、警告やエラーが見つかった行にもサインが表示されます。この動作は、ShellCheckをリンターとして統合することでほとんどのテキストエディタで再現できます。見てみましょう。

テキストエディタにShellCheckを統合する

ShellCheckは、最も使用されるテキストエディタのいくつかにリンターとして統合できます。いくつかの例を見てみましょう。

VimにShellCheckを統合する

ShellCheckをリントツールとしてVimで直接使用するには、まずリントプラグインをインストールする必要があります。執筆時点で最も人気のある現代的な選択肢の一つはALEです。このプラグインは、NeovimおよびVim >= 8の非同期機能を利用しています。それをインストールするための方法はいくつかあり、多くのVimプラグインマネージャーやネイティブのVimプラグインローディングシステムを使うことができます。

VimのリンタープラグインとShellCheckが両方インストールされると、エディタのインターフェースから直接警告や提案を可視化できます:

Visual Studio CodeにShellCheckを統合する

Visual Studio Codeは、Microsoftによって作成され、Electronフレームワークを使用して開発されたテキストエディタです。オープンソースプロジェクトであるCode-OSSに基づいており、その大規模なプラグインエコシステムのおかげで、最も使用されているプログラミング言語(特にJavascript)のIDEに簡単に変えることができます。Visual Studio CodeにShellCheckを統合するには、エディタインターフェイスから「shellcheck」プラグインを直接検索し、「インストール」ボタンをクリックするだけです。

ShellCheckは、Sublime TextやEmacsなどの他のテキストエディタにも統合できる:手順はShellCheckのREADMEの専用セクションに記載されています。

結論

このチュートリアルでは、ShellCheckをインストールして使用し、シェルスクリプトをデバッグおよび改善する方法を見ました。ShellCheckは、最も使用されているすべてのLinuxディストリビューションに簡単にインストールできる静的分析ツールであり、コマンドラインまたはさまざまなテキストエディタの専用プラグインを介して使用できます。このチュートリアルでは、ShellCheckをコマンドラインからスタンドアロンツールとして使用する方法と、VimおよびVisual Studio Codeに統合する方法を見ました。

関連記事: