dockerfmt - Dockerfileフォーマッター
(github.com/reteps)- 既存の
dockfmtを現代化した代替ツールで、Dockerfileを自動的に整理し、コードスタイルを整えるツール - 内部的にはDockerfileの構文解析に
buildkitを、RUN命令内のシェルスクリプト整形にmvdan/shを使用 - 一貫したコードスタイルを維持でき、コードレビューやCI環境で有用に使える
使い方
dockerfmt [Dockerfile] [flags]
dockerfmt [command]
- 主なコマンド:
- completion: シェル自動補完スクリプトを生成
- help: コマンドヘルプ
- version: バージョンを表示
- 主なフラグ:
- -c, --check: フォーマットされているかどうかのみ確認
- -i, --indent: インデントの空白数を設定(デフォルトは4)
- -n, --newline: ファイル末尾に改行文字を追加
- -s, --space-redirects: リダイレクト演算子の後ろに空白を追加
- -w, --write: 変更内容を元のファイルに上書き
Pre-commitフック設定
- pre-commitフックとして統合可能
.pre-commit-config.yamlファイルの例:repos: - repo: https://github.com/reteps/dockerfmt rev: main hooks: - id: dockerfmt args: - --indent=4
現在の制限事項
RUN命令でのセミコロン(;)やコマンドのグループ化はまだサポートされていない- 長いJSONコマンドの自動改行機能はない
# escape=Xディレクティブはサポートされていない
機能紹介
-
RUN命令のフォーマット時にmvdan/shを活用 -
基本的なheredocをサポート:
RUN <<EOF echo "hello" echo "world" EOF -
RUN命令内でのコメントをサポート:RUN echo "hello" \ # this is a comment && echo "world"RUN echo "hello" \ # this is a comment # that spans multiple lines && echo "world" -
コメントがフォーマット後の位置に正しく紐づくようにしようとしているが、パーサ段階でコメントが削除されるため難しさがある
JSバインディング
- JSバインディングは
jsディレクトリに含まれている - 使い方は
js/README.mdで確認可能
その他の参考事項
- まだ1.0.0未満のバージョンのため、本番環境での利用は推奨されない
1件のコメント
Hacker Newsの意見
RUNパーサーがコマンド内のグループ化やセミコロンをサポートしていないと知って驚いたRUN set -e ;\ export DEBIAN_FRONTEND=noninteractive ;\ etc etcRUNパーサーがコマンド内のグループ化やセミコロンをサポートしていないと言いつつ、例では&&をサポートしていることを示している。なぜ違いがあるのか気になるRUN foo && \ bar && \ :RUN set -e && \ foo ; \ bar ; \ :FROM foo ... FROM bar ...FROMの次のステップをインデントして、ステージをより明確にしている。そうしないのは、他の言語で関数本体をインデントしないのと同じだと思う