複数の Hugo サーバーを 1 つのコマンドプロンプト上で立ち上げる

Hugo サーバーの複数起動について

複数のサイトを Hugo で運用しているケースでは、ひとつのコマンドプロンプトから同時にサーバー起動できると便利です。

ここでは、下記のようにホームディレクトリ以下に複数の Hugo プロジェクトが存在するとします。

  • C:/website/site1
  • C:/website/site2
  • C:/website/site3

各 Hugo プロジェクトに対して Hugo サーバーを起動するには、例えば次のように実行していきます。

ポート番号を指定して Hugo サーバーを複数起動する
C:\> hugo server -p 50001 -s C:/website/site1
C:\> hugo server -p 50002 -s C:/website/site2
C:\> hugo server -p 50003 -s C:/website/site3

ただし、上記のようにすると、1 つのサーバープロセスが 1 つのコマンドプロンプトを占有するため、複数の Hugo サーバーを起動しているときに複数のコマンドプロンプトを開いたままにしなければいけません。

1 つのターミナルで複数の Hugo サーバーを起動する

Windows の場合

Windows の start コマンドを使用すると、バックグラウンドで hugo コマンドを実行することができるので、追加でコマンドプロンプトを開くことなしに複数の Hugo サーバーを起動することができます。 例えば、下記のバッチファイルは、3つの Hugo サーバーをバックグラウンドで起動します。

start-servers.bat
@echo off
start /b hugo server -p 50001 -s C:/website/site1
start /b hugo server -p 50002 -s C:/website/site2
start /b hugo server -p 50003 -s C:/website/site3
title Hugo Servers
☝️ ワンポイント 最後の行の title Hugo Servers では、コマンドプロンプトのウィンドウタイトルを Hugo Servers に変更しています。 ウィンドウタイトルを変更しておくと、タスクバーを見ただけで何のためのウィンドウなのかを判別しやすくなるのでお勧めです。

バックグラウンドで動作している Hugo サーバーをまとめて終了するには、例えば、taskkill コマンドを使用して、hugo.exe によるプロセスをまとめて終了します。

stop-servers.bat
@echo off
taskkill /f /im hugo.exe

Windows の start コマンドや、taskkill コマンドの詳細は、まくまく Windows ノートを参照してください。

Linux の場合

Linux や macOS の場合は、下記のように末尾に & を付けて hugo コマンド実行すれば、簡単に複数のサーバーをバックグラウンドで立ち上げることができます。

start-servers.sh
hugo server -p 50001 -s ~/website/site1 &
hugo server -p 50002 -s ~/website/site2 &
hugo server -p 50003 -s ~/website/site3 &

Hugo サーバーのプロセスをまとめて終了したいときは、killall コマンドで簡単に終了できます。

stop-servers.sh
killall hugo

これくらいの規模であれば、シェルスクリプトではなく、関数やエイリアスとして定義してしまうのが手っ取り早いかもしれません。

~/.bash_profile(抜粋)
function hugo-start {
    hugo server -p 50001 -s ~/website/site1 &
    hugo server -p 50002 -s ~/website/site2 &
    hugo server -p 50003 -s ~/website/site3 &
}

function hugo-stop {
    killall hugo
}