Featured image of post Docker Compose環境のCaddyで設定検証とコード整形を行う方法:validateとfmtの活用

Docker Compose環境のCaddyで設定検証とコード整形を行う方法:validateとfmtの活用

軽量かつ自動HTTPS機能が標準で備わっているWebサーバーであるCaddyは、Docker環境でも広く利用されています。Caddyの設定ファイルである Caddyfile はシンプルで直感的に記述できる点が大きな魅力ですが、運用時には設定の文法エラーを未然に防ぐ検証や、インデントを整えるフォーマット作業が欠かせません。

ホスト環境にCaddyバイナリを直接インストールしていない場合でも、Docker Composeを経由することで、コンテナ内部のCaddyコマンドを呼び出してこれらの作業を完結できます。本記事では、サービス名を caddy と定義しているDocker Compose環境を前提に、設定ファイルの検証を行う validate と、フォーマットを整える fmt の具体的な実行手順を解説します。

稼働中のコンテナに対して実行する

すでにコンテナが起動している状態であれば、docker compose exec コマンドを使用するのが最も手軽です。Caddyの公式イメージでは、標準の設定ファイルが /etc/caddy/Caddyfile に配置されているため、このパスを指定してコマンドを渡します。

まずは、編集した設定に文法エラーがないか確認するための構文検証を行います。次のコマンドを実行すると、設定内容に問題がないかをCaddyがチェックし、エラーがあればその箇所と原因を出力してくれます。

docker compose exec caddy caddy validate --config /etc/caddy/Caddyfile

次に、設定ファイルのインデントやスタイルを統一するフォーマット機能です。単に整形結果をターミナル上でプレビューしたい場合は、以下のコマンドを実行します。

docker compose exec caddy caddy fmt /etc/caddy/Caddyfile

このコマンドだけでは画面に整形後の内容が出力されるだけで、ファイルそのものは変更されません。整形結果をそのまま設定ファイルへ反映させたい場合は、–overwrite オプションを付与します。

docker compose exec caddy caddy fmt --overwrite /etc/caddy/Caddyfile

ホスト側のCaddyfileをコンテナ内の /etc/caddy/Caddyfile にボリュームマウントしている構成であれば、このコマンドを実行することでホスト上の実ファイルも自動的に整形・上書き保存されます。

コンテナ起動前やメンテナンス時に一時コンテナで実行する

設定ファイルを大幅に書き換えた際など、コンテナを起動する前の段階で安全に構文チェックを行いたい場面があります。また、構文エラーが原因でコンテナが起動ループに陥っている場合には、実行中のコンテナを前提とする exec コマンドが利用できません。

このようなケースでは、docker compose run --rm を使用して一時的なコンテナを立ち上げ、その中でコマンドを処理します。compose.yaml に定義されたボリュームマウント設定がそのまま引き継がれるため、パスの指定方法は稼働中と同じです。処理が終わると起動した一時コンテナは自動的に破棄されます。

コンテナを起動せずに設定を検証するコマンドは以下の通りです。

docker compose run --rm caddy caddy validate --config /etc/caddy/Caddyfile

同様に、コンテナ停止中にファイルのフォーマットと上書きを行う場合は、次のコマンドを実行します。

docker compose run --rm caddy caddy fmt --overwrite /etc/caddy/Caddyfile

この手法は、CI/CDパイプラインの中でデプロイ前に設定ファイルの記述ミスを検知したり、コミット前にコードスタイルを自動チェックしたりする際にも役立ちます。

まとめ

  • 設定ファイルの文法ミスを防ぐには validate サブコマンド、インデントや記法を整えるには fmt サブコマンドを使用します。
  • サービス起動中であれば docker compose exec を使い、起動前やCI環境では docker compose run --rm を利用して実行します。
  • フォーマット結果をファイルへ直接反映させたい場合は、–overwrite オプションを付加します。
  • ホスト側のファイルをコンテナへマウントしていれば、コンテナ経由の上書き処理がホスト側の実ファイルにもそのまま適用されます。
AIによる技術記事 備忘録.
Hugo で構築されています。
テーマ Stack は Jimmy によって設計されています。