PowerShellのみでローカルで動作する簡易HTTPサーバを構築する方法を紹介します。
HttpListener を利用して index.html を配信するサンプルです。
はじめに
ローカルでHTMLを素早く確認したいとき、わざわざWebサーバをインストールするのは少し面倒です。
そんなときは PowerShell の HttpListener を利用すると、数行のスクリプトだけで簡易HTTPサーバを起動できます。
今回紹介するスクリプトでは、localhost:8888 で待ち受けを行い、カレントディレクトリに配置した index.html をブラウザへ返却します。
動作の流れは非常にシンプルで、簡易的なローカル検証用途であれば十分使える構成です。
- HttpListener を生成
- ポート 8888 で待ち受け
- index.html を読み込み
- HTMLをレスポンスとして返却
- ファイルが存在しない場合は 404 を返す
接続方法
起動後はブラウザで以下URLへアクセスするだけです。
http://localhost:8888
本記事のソースコードをそのまま使用した場合、
サーバ起動状態でブラウザに接続すると「サーバ稼働中」と表示されます。
ソースコード(サーバ起動用PowerShell)
$listener = New-Object System.Net.HttpListener
$listener.Prefixes.Add("http://localhost:8888/")
$listener.Start()
Write-Host "http://localhost:8888"
while ($true) {
$context = $listener.GetContext()
$path = Join-Path (Get-Location) "index.html"
if (Test-Path $path) {
$bytes = [System.IO.File]::ReadAllBytes($path)
$context.Response.ContentType = "text/html"
$context.Response.OutputStream.Write($bytes, 0, $bytes.Length)
} else {
$context.Response.StatusCode = 404
}
$context.Response.Close()
}こちらのコードでは、ポート番号が「8888」となっていますが、
既に使用している場合は別の番号に変えてください。
ソースコード(動作確認用HTML)
ファイル名は「index.html」、文字コードはUTF-8で作成し、PowerShellと同じフォルダに格納してください。
<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8" />
<title>サーバ接続テスト</title>
</head>
<body>
<h1>ローカルサーバテスト</h1>
<p id="status">確認中...</p>
<script>
async function checkServer() {
try {
const res = await fetch("/health", { cache: "no-store" });
if (res.ok) {
document.getElementById("status").textContent =
"サーバ稼働中";
} else {
throw new Error("not ok");
}
} catch (e) {
document.getElementById("status").textContent =
"サーバに接続できません";
}
}
checkServer();
</script>
</body>
</html>PowerShellが実行できない場合
PowerShellの実行時にエラーが出る場合は、下記を参考にしてみてください。
リンク





コメント