Formatterを使って、Dockerfileをキレイに書く方法とGitを絡めた使い方
こんにちわ、札幌のヨシエです。
先日、PyCon mini SAPPORO 2019と呼ばれるPythonのイベントに参加しました。
参加セッションのPythonistaのためのコードレビューTips - slideship.comというセッションでFormatterについて触れられる点がありました。
あまりコードを書く機会がない自分ですが、Dockerfileは検証用途で書く頻度が高いのでDockerfileに対応したFormatterであるdockfmtを試してみました。
例として、以下のようなdockerfileを書き出してみます。
やっていることはApacheの公式イメージに対して、パッケージアップデートとgitをインストールして
キャッシュ周りを削除してます。
FROM httpd:latest RUN apt-get -y update && apt-get -y upgrade && apt-get -y install git && apt-get -y clean && rm -rf /var/lib/apt/lists/*
このdockerfileにFormatterを実行すると、以下のように整形されました。
% dockfmt fmt dockerfile FROM httpd:latest RUN apt-get -y update \ && apt-get -y upgrade \ && apt-get -y install git \ && apt-get -y clean \ && rm -rf /var/lib/apt/lists/*
Git hookを使ってdockfmtをcommit時に実行する
Gitのhook機能を利用してdockfmt
を実行します。
pre-commitのhookにテストとして以下のようなスクリプトを書きました。
% cat .git/hooks/pre-commit #!/bin/bash for FORMATFILE in `git status -uno --short | grep -E '[D|d]ockerfile' | awk '{ print $2}'` do dockfmt fmt -w ${FORMATFILE} done
一連の流れで見てみる
# 作成時のdockerfile % cat dockerfile FROM httpd:latest RUN apt-get -y update && apt-get -y upgrade && apt-get -y install git && apt-get -y clean && rm -rf /var/lib/apt/lists/* # dockerfileをインデックスに追加 % git add dockerfile # dockerfile内容確認(変わらず) % cat dockerfile FROM httpd:latest RUN apt-get -y update && apt-get -y upgrade && apt-get -y install git && apt-get -y clean && rm -rf /var/lib/apt/lists/* % git status --short M dockerfile # リポジトリへコミット % git commit -m "format test" [master xxxxxxx] format test 1 file changed, 3 insertions(+), 7 deletions(-) # dockerfile内容が整形されました % cat dockerfile FROM httpd:latest RUN apt-get -y update \ && apt-get -y upgrade \ && apt-get -y install git \ && apt-get -y clean \ && rm -rf /var/lib/apt/lists/*
最後に
Dockerfileの数が増えるにつれてインデントの微妙な差が気になってくる年頃でした。
インデントなどの指摘を手間と考えられる方にオススメかと思います。