こんにちは。よっしーです(^^)
今日は、shfmtによるフォーマットについてご紹介します。
背景
bashにおけるshfmtによるフォーマットについて調査する機会があったので、そのときの内容を備忘として残しました。
この記事のソースは下記のサイトにアップしています。
実行環境について
実行環境は下記の記事を参考にお願いします。
概要
shfmt
(シェルフォーマット)は、シェルスクリプトのフォーマットを整えるためのツールです。シェルスクリプトをきれいで統一されたスタイルに整形することは、コードの可読性を向上させ、メンテナンスをしやすくするために重要です。shfmt
は、異なるスタイルで書かれたシェルスクリプトを一貫性のある形式に変換するのに役立ちます。
以下は、shfmt
の基本的な使用方法です。
- インストール:
shfmt
をインストールするには、適切なパッケージマネージャーを使用してインストールします。例えば、Goを使用して次のようになります。
go get mvdan.cc/sh/v3/cmd/shfmt
他の方法でもインストール可能な場合があります。
- シェルスクリプトの整形: インストールが完了したら、
shfmt
を使用してシェルスクリプトを整形します。例えば、次のようにします。
shfmt -i 2 -w yourscript.sh
yourscript.sh
の部分を対象としたいシェルスクリプトのファイル名に置き換えます。-i
オプションは、インデントの幅を指定し、-w
オプションはファイルを上書きするかどうかを指定します。上書きせずに標準出力に表示することもできます。
shfmt -i 2 yourscript.sh
- 結果の解釈:
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によるフォーマットについてご紹介しました。
何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント