Caddyは、自動HTTPSを標準搭載したGo製のマルチプラットフォームWebサーバーです。Caddyfileや素のJSONで設定でき、リバースプロキシ・静的ファイル配信・HTTP/1〜3対応のサーバーとして拡張できるモジュール型アーキテクチャを持っています。ZeroSSLやLet's Encryptと連携し、証明書取得から更新までを自動で行う点が中心的な特徴です。
コアの`caddy.go`と`admin.go`が設定管理とローカル管理APIを担い、`cmd/caddy/main.go`で標準モジュール群(`modules/standard`)を静的にリンクしてバイナリを作ります。設定はまず`caddyconfig/caddyfile`のレクサー・パーサーがCaddyfileをトークン化し、`caddyconfig/httpcaddyfile`がHTTP用の構造(ディレクティブ、グローバルオプション、TLS/PKIアプリ設定など)に変換します。最終的にこれをネイティブなJSON設定へアダプトしてCaddy本体にPOSTすることで、証明書取得(CertMagic経由)やHTTPサーバーの起動が行われます。`caddytest/integration`配下には`.caddyfiletest`という形式のテストが大量にあり、Caddyfile記法がJSONへ正しく変換されるかを検証する仕組みが用意されています。
- STEP 01
`git clone`後に`cmd/caddy`ディレクトリで`go build`を実行すると、単体のcaddyバイナリが生成されます(Go1.25.0以上が必要)。
- STEP 02
低ポート80/443にバインドする際、Linuxでは`setcap cap_net_bind_service=+ep`権限付与が必要になる場面に遭遇します。
- STEP 03
カレントディレクトリにCaddyfileを置いて`caddy run`を実行すると、自動的にそれを読み込んでHTTPサーバーが起動する様子を確認できます。
- STEP 04
`caddy adapt --config Caddyfile`を叩くと、Caddyfileがどのようなネイティブ JSON設定に変換されるかをその場で確認できます。
- STEP 05
独自ドメインで動かす場合、証明書取得のためにACMEチャレンジが走り、ZeroSSLまたはLet's Encryptとの通信ログが標準出力に流れます。
- STEP 06
`caddy stop`を使わずに端末を閉じるとバックグラウンドプロセスが残る点にも気づきます。
手元でビルドすれば、設定ファイル1つでHTTPS対応のWebサーバー(リバースプロキシや静的配信を含む)がすぐに動く実行ファイルが得られます。証明書の取得・更新は自動化されており、`caddy adapt`でCaddyfileとJSON設定の対応関係を確認しながら運用構成を組み立てられます。
低ポートへのバインドにはOS権限設定(setcapなど)が別途必要で、READMEにもその手順が明記されています。
本番相当の機能追加にはxcaddyでのカスタムビルドが前提になる場面があり、`go build`だけではバージョン情報が正しく埋め込まれない点が注意点として明記されています。
公開ドメインでの自動HTTPS利用にはACME通信や外部認証局(ZeroSSL/Let's Encrypt)への到達性が必要で、閉域環境では別途内部CA設定の理解が要ります。
独自ドメインでTLS運用を簡単に始めたい人や、モジュール拡張でリバースプロキシ・API Gatewayを組みたい開発者に向いています。ソースには字句解析からJSON変換、管理APIまでの一連の実装と、`.caddyfiletest`による網羅的な変換検証が揃っており、README記載のビルド手順やコマンド体系とも整合しています。これらの根拠から、実際にインストールしなくても機能の実在性と動作の一貫性は十分に判断できる内容だと言えます。