Thanks Driven Life

日々是感謝

shellcheck を Docker で実行する

TL;DR

経緯

  1. シェルスクリプトを書く時、ちょくちょく shellcheck のお世話になる
  2. いざ実行しようとすると、このマシン shellcheck インストールしてないじゃん!!となる
  3. インストールするかー。DebianCentOS であれば apt や yumリポジトリ提供されてるな
  4. でも今は macOS 使ってるから、 ドキュメント に従って

     $ brew install shellcheck
    
  5. ビルド終わるまで待つか

     _人人人人人人人人人人人人人人_
     > 一時間待っても終わらない <
      ̄YYYYYYYYYYYYYY ̄
    

私の環境だけかもしれませんが、めっちゃ時間かかります。 もちろん、一度ビルドしてしまえばあとは問題なく使えますが、 何かしらの理由で新しい環境に移行した時、またこの時間を過ごすのはよくない。どうにかしたい!!

Docker イメージ

そんなわけで、「ビルドした shellcheck バイナリを持った Docker イメージでもあればいいのでは?」と安易に考え、 とりあえず Docker Hub で探したら当然のように shellcheck 公式の Docker Image が見つかりました。

https://hub.docker.com/r/koalaman/shellcheck/

使い方はドキュメントのとおり

$ docker pull koalaman/shellcheck
$ docker run -v $(pwd):/scripts koalaman/shellcheck /scripts/myscript.sh

docker run するスクリプト

問題なく動きましたが、しかし毎回 docker run ... と書くのもめんどくさいので、適当に runner を作りました。

#!/bin/sh

(
    dir="$(cd "$(dirname "$1")" && pwd)"
    name="$(basename "$1")"

    docker run --rm -v "${dir}:/scripts" koalaman/shellcheck "/scripts/${name}"
)

こいつをてきとうな名前(私は同名 shellcheck にしました)で保存しておけば

$ shellcheck /path/to/script.sh

ってやると実行してくれます。

まとめ

最近(結構前からかな)は各ツールや環境を Docker コンテナに分離する流行を感じるので、追っ掛けてみました。便利。