RAKUS Developers Blog | ラクス エンジニアブログ

株式会社ラクスのITエンジニアによる技術ブログです。

シェルスクリプトの品質管理が楽になる! 2つの VSCode アドオンをご紹介

はじめに


こんにちは。インフラエンジニアの gumamon です!

〇aaS、コンテナ、オーケストレーション。インフラ界隈でも便利なツールが普及しつつある昨今ですが、根強く使われ続けているのがシェルスクリプトです。
シェルスクリプトの用途は 主に「シェルコマンドの自動実行(とエラーハンドリング等)」であり、インフラエンジニアとしては業務効率化のツールとして重宝する一方、事故(バグ)が発生してしまうと重大な障害につながる危険なものでもあります。
今回は、これを(初心者でも)比較的安全に書けるようになる。 ひいてはシェルスクリプトの品質管理が楽になる「2つのVSCodeのアドオン」を紹介します。

VSCode = Visual Studio CodeMicrosoft製のソースコードエディタです。
インフラエンジニアの場合「vimで書くし」という方も多いと思うのですが、慣れてしまうと超便利です。 インテリジェントなコード補完や校正機能は、コードレビューの工数も削減出来てGood。

アドオンの紹介


順次2つ、ご紹介します。
インストール方法/使い方についてはリンク先に動画がありますのでそちらをご参照ください。

  • ShellCheck (検証ver = v0.14.0)
    (エディタで表示された)シェルの記述に対し、問題が無いかをチェックします。
    問題のある記述について、なぜダメなのか、どう直せば良いのかを事細かに説明してくれます。
    チェック内容はリアルタイムに更新されるので、問題の有無を確認しながらコーディングが出来るのも良いポイントです。

  • ShellFormat (検証ver = v7.0.1)
    インデントや改行など、構文のフォーマットを修正してくれます 。
    例:if構文の;doをどこで改行するか。
    これにより ソースコードのフォーマットが一意になり、複数名で書いている場合は非常に読みやすくなります。

リンク先の動画についての補足
VSCodeを初めて使われる方は、コマンドパレット(動画でコマンドを実行している部分)の呼出しで 少し迷われるかもしれません。コマンドパレットはショートカット(Ctrl+Shift+P)を使うか、メニューから[表示]→[コマンドパレット]で呼び出せます)

さっそく使ってみる( その1: ShellCheck )


まず、ShellCheck をOFFにした状態がこちら。

ShellCheck=OFF

ファイルの一覧を読み込み、日付付きのファイル名としてコピーするだけの スクリプトです。
何か気になるところはありますか? 気になるところを探しつつ次へ。

ShellCheck=ON

わんさか指摘点が出てきました。
波線の色は深刻度を表しています(黄色 > 青色)。今回は発生していませんが、Syntax Errorレベルだと赤の波線で表示されます。 各波線部分は、マウスオーバーすると QuickFix というリンクが出て来て、なぜダメなのかを説明してくれます。 それによると・・

  • SC2006 ` `囲みはいくつかの問題があるレガシーコード。$( ) を推奨
  • SC2086 変数は "" で囲むこと。split防止
  • SC2153 スペルミスの可能性。Variableが割り当てられていない。
  • SC2162 while read は -r オプションを付けるべき

⇒全部直してみます。

ShellCheck=ON(fixed)

綺麗になりました!

今回指摘された部分は何れもBashの記法上、実行してもエラー扱いになりません。問題無く動いて exit 0 してしまいます。 つまり 「ShellCheckを通していないと 検証/レビュー時に見落とすリスクがある」 と言うことです。
こういう呪われたシェルは、 「いざ本番というタイミングで発火する」 ものなので、ShellCheckを入れておいて損は無い(というか積極的に使った方が良い)と個人的には思います。

さっそく使ってみる( その2: ShellFormat )


まず、ShellFormat を実行する前のコードをご覧ください。
(ShellFormatは コードを開いて Shift+Alt+F を実行することで瞬時に校正を行います。)

ShellFormat (before)

style1~3 は別々の人が書いたと思ってください。
何れも問題のない記述ですが、読みづらい。インデントもそろっていないので、レビュー時にロジックを誤認してしまうかもしれません。

ShellFormat を実行してみます。

ShellFormat (after)

全て同じ書式に統一されました! 見やすい!

ShellFormatは既に書き終わったコードにも適用することができます。
つまり、いつ誰が書いたのかわからないグチャグチャのコードに対してShellFormatを実行すると、
論理を変えることなく見やすい状態にすることが出来る訳です。
こちらのアドオンも使わない理由は特に見あたりません。

まとめ


今回紹介したアドオンは、いわゆる「lint」の一種です。

lint= ソースコードを読み込んで内容を分析し、問題点を指摘してくれる静的解析ツール。
IT用語辞典 e-words より

lintを導入するメリットは個人単位でも享受出来ますが、チーム/組織の運用に組み込んで導入するとより大きなメリットを享受することができます。

チーム/組織 でlintを導入するメリット

  • 品質向上
  • コスト削減
    • 教育をする側もされる側も楽になる
    • レビューをする側もされる側も楽になる
    • 組織単位で統一されたコードの書式であれば、ジョブローテ時の立ち上げコストが削減できる
  • 納品速度の向上
    • レビューがサッと終わる

ソースコードの品質管理は常に頭を悩ませる課題の一つです。
その中でも、構文のチェックは 本来注力すべき開発の本質ではないので、自動化するに越したことはありません。

やってみようかな?と思われた方、10分で導入出来ますのでお試し頂ければ幸いです!

以上、最後までお読み頂きありがとうございました。


◆TECH PLAY
techplay.jp

◆connpass
rakus.connpass.com

Copyright © RAKUS Co., Ltd. All rights reserved.