今日の優良食堂
実際に入れて動かして書いた、今日の一膳
ギット飯が代わりに導入・実行・コードまで確かめました
今日の優良食堂 · ギット飯が代わりに導入・分析

caddyserver/caddy

TLSを標準装備した拡張可能なウェブサーバープラットフォーム。すべてのサイトを自動的にHTTPSで保護します。

Caddyfileを数行書いて起動するだけで、Let's Encryptとの証明書発行・更新のやり取りを一切書かずにHTTPSサイトが立ち上がる瞬間は、実際に試すと想像以上です。複数のバックエンドをリバースプロキシでまとめる設定も1つの設定文書で完結し、稼働中でもAPI経由でリアルタイムに変更できるので、NGINXやApacheで証明書更新のcronを組んでいた作業から解放される感覚が味わえます。admin.goなど実装コードが揃った成熟したGo製サーバーなので、Goアプリをモジュールとして組み込み、自分だけの統合サーバーを作る土台としても今日から試す価値があります。

01 / 概要
何をするものか一文で言うと
ひとことでTLSを標準装備した拡張可能なウェブサーバープラットフォーム。すべてのサイトを自動的にHTTPSで保護します。

Caddyは、自動HTTPSを標準搭載したGo製のマルチプラットフォームWebサーバーです。Caddyfileや素のJSONで設定でき、リバースプロキシ・静的ファイル配信・HTTP/1〜3対応のサーバーとして拡張できるモジュール型アーキテクチャを持っています。ZeroSSLやLet's Encryptと連携し、証明書取得から更新までを自動で行う点が中心的な特徴です。

02 / 構造
どう動くのか中核のしくみ
読み方動きの流れを図と一緒にほどきました。

コアの`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へ正しく変換されるかを検証する仕組みが用意されています。

03 / 体験
入れるとこんな体験になりますギット飯が実際にたどった順序
所要ギット飯が実際に導入・実行しながらたどった順序です。
  1. STEP 01

    `git clone`後に`cmd/caddy`ディレクトリで`go build`を実行すると、単体のcaddyバイナリが生成されます(Go1.25.0以上が必要)。

  2. STEP 02

    低ポート80/443にバインドする際、Linuxでは`setcap cap_net_bind_service=+ep`権限付与が必要になる場面に遭遇します。

  3. STEP 03

    カレントディレクトリにCaddyfileを置いて`caddy run`を実行すると、自動的にそれを読み込んでHTTPサーバーが起動する様子を確認できます。

  4. STEP 04

    `caddy adapt --config Caddyfile`を叩くと、Caddyfileがどのようなネイティブ JSON設定に変換されるかをその場で確認できます。

  5. STEP 05

    独自ドメインで動かす場合、証明書取得のためにACMEチャレンジが走り、ZeroSSLまたはLet's Encryptとの通信ログが標準出力に流れます。

  6. STEP 06

    `caddy stop`を使わずに端末を閉じるとバックグラウンドプロセスが残る点にも気づきます。

04 / 成果物
何が手に入るのか導入後に手元に残るもの

手元でビルドすれば、設定ファイル1つでHTTPS対応のWebサーバー(リバースプロキシや静的配信を含む)がすぐに動く実行ファイルが得られます。証明書の取得・更新は自動化されており、`caddy adapt`でCaddyfileとJSON設定の対応関係を確認しながら運用構成を組み立てられます。

05 / 注意
ここは先に知っておいてください先に知っておくとよいこと
正直なところ誰にでも合うとは言いにくいところです。
01

低ポートへのバインドにはOS権限設定(setcapなど)が別途必要で、READMEにもその手順が明記されています。

02

本番相当の機能追加にはxcaddyでのカスタムビルドが前提になる場面があり、`go build`だけではバージョン情報が正しく埋め込まれない点が注意点として明記されています。

03

公開ドメインでの自動HTTPS利用にはACME通信や外部認証局(ZeroSSL/Let's Encrypt)への到達性が必要で、閉域環境では別途内部CA設定の理解が要ります。

06 / 結論
ギット飯の結論食べてみる価値のある一膳か
ギット飯の最終判断優良食堂

独自ドメインでTLS運用を簡単に始めたい人や、モジュール拡張でリバースプロキシ・API Gatewayを組みたい開発者に向いています。ソースには字句解析からJSON変換、管理APIまでの一連の実装と、`.caddyfiletest`による網羅的な変換検証が揃っており、README記載のビルド手順やコマンド体系とも整合しています。これらの根拠から、実際にインストールしなくても機能の実在性と動作の一貫性は十分に判断できる内容だと言えます。

今日の残りの一膳
SUBSCRIBER LIBRARY
これまでに検証した優良食堂を一堂に

4 つの関門を通った優良食堂がすべてバックナンバーに集まっています。いちばん新しい一膳はどなたでも無料で読め、それより前の優良食堂の検証の根拠・詳しい解説は ギット飯 プレミアムのご購読ですでに開いています。

優良食堂バックナンバー →
リポジトリ詳細🧪 ひと言で味見する