bash入門:shfmtによるフォーマット

スポンサーリンク
bash入門:shfmtによるフォーマット ノウハウ
bash入門:shfmtによるフォーマット
この記事は約4分で読めます。
よっしー
よっしー

こんにちは。よっしーです(^^)

今日は、shfmtによるフォーマットについてご紹介します。

スポンサーリンク

背景

bashにおけるshfmtによるフォーマットについて調査する機会があったので、そのときの内容を備忘として残しました。

この記事のソースは下記のサイトにアップしています。

実行環境について

実行環境は下記の記事を参考にお願いします。

概要

shfmt(シェルフォーマット)は、シェルスクリプトのフォーマットを整えるためのツールです。シェルスクリプトをきれいで統一されたスタイルに整形することは、コードの可読性を向上させ、メンテナンスをしやすくするために重要です。shfmtは、異なるスタイルで書かれたシェルスクリプトを一貫性のある形式に変換するのに役立ちます。

以下は、shfmtの基本的な使用方法です。

  1. インストール: shfmtをインストールするには、適切なパッケージマネージャーを使用してインストールします。例えば、Goを使用して次のようになります。
   go get mvdan.cc/sh/v3/cmd/shfmt

他の方法でもインストール可能な場合があります。

  1. シェルスクリプトの整形: インストールが完了したら、shfmtを使用してシェルスクリプトを整形します。例えば、次のようにします。
   shfmt -i 2 -w yourscript.sh

yourscript.shの部分を対象としたいシェルスクリプトのファイル名に置き換えます。-iオプションは、インデントの幅を指定し、-wオプションはファイルを上書きするかどうかを指定します。上書きせずに標準出力に表示することもできます。

   shfmt -i 2 yourscript.sh
  1. 結果の解釈: shfmtは、整形されたコードを標準出力に表示します。必要に応じて、整形されたコードをファイルに保存するか、コードを直接修正することができます。 例えば、shfmt -i 2 -w yourscript.shのコマンドは、yourscript.shのシェルスクリプトを2スペースのインデントで整形し、元のファイルに上書きします。

shfmtを使用することで、異なるスタイルで書かれたシェルスクリプトを統一された形式に整形し、コードの保守性や可読性を向上させることができます。

次のセクションからは、実行環境における具体的な修正内容を記載しています。

ファイル一覧

        modified:   local/Dockerfile

Dockerfile

+# shfmt
+FROM mvdan/shfmt:latest-alpine as shfmt
+
+# メイン
 FROM ubuntu:24.04
 
RUN apt-get update \
 && apt-get install -y --no-install-recommends \
        shellcheck \
 && apt-get clean \
 && rm -rf /var/lib/apt/lists/*
+
+COPY --from=shfmt /bin/shfmt /usr/bin/

動作確認

下記のコマンドを実行します。

make build

make up

make login

shfmt --version

下記のような出力になっていれば成功です。

root@cad1344767a8:/work# shfmt --version            
v3.7.0-16-g4f714c73

サンプル

shfmtの動作確認の一環として、13_xargs/13_xargs.shのファイルを下記のようにシェルを修正します。”$2″のあとに半角スペースを入れています。

-    prefix=$(printf "${ESC}[%dm%5s${ESC}[m\n" "$1" "$2")
+   prefix=$(printf "${ESC}[%dm%5s${ESC}[m\n" "$1" "$2" )

下記のコマンドを実行します。

shfmt -w 13_xargs/13_xargs.sh

上記で入れた半角スペースが消えていることが確認できれば成功です。

-    prefix=$(printf "${ESC}[%dm%5s${ESC}[m\n" "$1" "$2" )
+   prefix=$(printf "${ESC}[%dm%5s${ESC}[m\n" "$1" "$2")

おわりに

今日は、shfmtによるフォーマットについてご紹介しました。

よっしー
よっしー

何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。

それでは、また明日お会いしましょう(^^)

コメント

タイトルとURLをコピーしました