# 🏃 クイックスタート このページは、導入済みのホストから自分で制御できるサーバーまで進みます。ディスク 上の設定、検証済みのコンパイル、起動・停止・監視できるサーバー、そしてファイル サーバーが応答したことを示す確認です。[インストール](/ja/start/install/) が済んで いることを前提にします。 ## 🧾 はじめる前に インストーラはポート 80 でサービスを動かしたままにしており、そのサービスが `/etc/Pingclair/Pingclairfile` の設定を握っています。試している間は停止して ポートを空けます。 ```bash sudo pc service stop ``` ```bash mkdir -p ~/demo/public cd ~/demo echo '

hello from ~/demo/public

' > public/index.html ``` ## 1. ✍️ 設定を書く `~/demo/Pingclairfile` を作ります。 ```caddyfile { admin 127.0.0.1:2019 } http://localhost:8080 { file_server ./public } ``` 三点だけ名前を付けておきます。先頭の無名ブロックはグローバルオプションで、 `admin` があると `pingclair start`、`stop`、`reload` が実行中のサーバーと話せ ます。サイトアドレスはスキームを含み、`http://` が平文を強制します。これが 無いと Pingclair は `localhost` を名前として扱い、独自の認証局で HTTPS を 提供するため、平文の HTTP クライアントには空の応答として見えます ([HTTPS](/ja/start/https/))。`file_server` のルートは作業ディレクトリからの 相対パスです。 ## 2. ✅ 実行前に検証する ```bash pingclair validate ``` ```text ✅ Configuration 'Pingclairfile' is valid! ``` `validate` は既定で `./Pingclairfile` を読み、`./Caddyfile` も検出します。設定を コンパイルし、証明書パスの有無といった意味的な検査を適用します。検証は助言では ありません。失敗した設定は実行されず、最後の行に理由が出ます。 ## 3. 🧭 設定が何になるかを読む ```bash pingclair adapt --pretty ``` ```text { "debug": false, "servers": [ { "name": "localhost", "names": [ "localhost" ], "listen": [ "[::]:8080" ], ``` コンパイル済みの JSON はサーバーが実際に実行する形です。ディレクティブが ドキュメントどおりに動かないとき、最初に見る場所がここです。代わりに `pingclair fmt` がファイルに加える変更を見るには次のようにします。 ```bash pingclair fmt --diff ``` ```text - file_server ./public + file_server ./public ``` `fmt` は正規形を出力し、インデントは 2 スペースになります。 ## 4. 🚀 起動する ログが端末に残るフォアグラウンドで実行します。 ```bash pingclair run Pingclairfile ``` ```text 🚀 Starting Pingclair with config: Pingclairfile 🚀 Starting Pingclair v0.2.0-rc.3 📄 Loaded configuration from: Pingclairfile 🔧 Configured 1 server(s) 🔐 Auto HTTPS: enabled ``` `--watch` を付けると保存のたびに設定が再読み込みされ、開発ループになります。 ```bash pingclair run --watch Pingclairfile ``` ```text ♻️ Configuration reloaded successfully ✅ Configuration reloaded completed successfully in 2.478622ms ``` シェルから切り離してバックグラウンドで動かすこともできます。 ```bash pingclair start -c Pingclairfile ``` ```text ✅ Pingclair started in the background (pid 4432) ``` `pingclair start`、`stop`、`reload` は Admin API 経由で実行中のサーバーに 到達します。上の設定に `admin` があるのはそのためです。`pingclair run` には 必要ありません。 ## 5. 🔍 確認する ```bash curl -i http://localhost:8080/ ``` ```text HTTP/1.1 200 OK Content-Type: text/html; charset=utf-8 Content-Length: 34 Last-Modified: Tue, 22 Sep 2026 03:26:39 GMT ETag: "22-6ab1f56f" Vary: Accept-Encoding Accept-Ranges: bytes server: Pingclair ``` `ETag` と `Last-Modified` はファイルサーバーがディスクから読んだ証拠です。本文は `public/index.html` です。バックグラウンドのサーバーを止めるには次のように します。 ```bash pingclair stop ``` ```text ✅ Pingclair stopped ``` ## ⚡ コマンド一発のサーバー 三つのサブコマンドは設定ファイルなしで配信します。試したいときや使い捨ての ホストで便利です。 ```bash pingclair file-server --listen :8081 --root ./public pingclair reverse-proxy --from :8082 --to 127.0.0.1:8081 pingclair respond --listen :8083 -s 200 -b "hello from respond" ``` それぞれ起動時にリスナーを表示します。 ```text 🚀 Starting file server on :8081 serving ./public (browse: false) 🚀 Starting reverse proxy: :8082 -> ["127.0.0.1:8081"] Server address: [::]:8083 ``` `:8082` へのリクエストは `:8081` のファイルサーバーへ転送され、`:8083` は渡した 本文をそのまま返します。`respond` は開発専用です。 ## 🔁 サービスに任せる サービスは `/etc/Pingclair/Pingclairfile` を実行するので、そこに置くと再起動 後も生き残ります。 ```bash sudo cp Pingclairfile /etc/Pingclair/Pingclairfile sudo pingclair validate /etc/Pingclair/Pingclairfile sudo pc service reload curl -i http://localhost/ ``` `pc service reload` は実行中のサーバーにファイルを読み直すよう求め、ユニットは それを `SIGUSR1` で行います。`pingclair reload` は Admin API 経由で同じコードに 到達し、サーバーがファイルをどう見たかも報告します(グローバルオプションの `admin` が必要です)。`sudo kill -USR1 "$(systemctl show -p MainPID --value pingclair)"` はどちらも使わずに同じことをします。 どちらの場合も先に検証し、そのあと答えを読みます。`systemctl reload` が報告 できるのは信号が届いたことだけなので、サーバーの判断——適用されたか、理由付きで 拒否されたか——はユニットの status line とジャーナルに残ります。拒否された 再読み込みは以前の設定を動かしたままにします。それが拒否の目的です。 [サービスとして動かす](/ja/start/service/#-再読み込みの意味) に詳しい説明が あります。 ## ⚠️ うまくいかないとき - **`Address already in use`。** インストーラのサービスがまだ `:80` を握って いるか、別のプロセスがそのポートを握っています。 `sudo ss -ltnp | grep :80` が持ち主を表示し、`sudo pc service stop` が既定の サービスを解放します。 - **`http://localhost:8080` で `Empty reply from server`。** 平文で TLS の リスナーに話しかけています。サイトアドレスに `http://` を付けるか、内部 証明書を信頼したうえで `https://` で話しかけます。 - **`Cannot reach admin API at 127.0.0.1:2019`。** 設定に `admin` が無く、 `pingclair stop` と `pingclair reload` を受け取る相手がいません。グローバル オプションのブロックに追加するか、フォアグラウンドのプロセスを Ctrl-C で 止めます。 - **`curl` がループバックで固まる。** システムのプロキシが要求を横取りして います。`curl --noproxy '*'` を付けて再実行します。 - **検証が `Unsupported feature` で失敗する。** ディレクティブは認識されて いますが実装が無く、メッセージが代替を示します。`encode br` の場合、 プロキシ応答に Brotli は実装されていないため `encode zstd gzip` を指します。 ## 🧭 次の手順 - [HTTPS](/ja/start/https/): 公開名に対する証明書を Let's Encrypt か内部認証局 から。 - [サービスとして動かす](/ja/start/service/): ユニット、再読み込みの意味、 ログ。 - [Pingclairfile](/ja/reference/pingclairfile/): 言語そのもの。マッチャー、 スニペット、インポート。