複数のHugoサーバーを一度に起動および終了する方法

複数のHugoサイトを1つのコマンドで起動する方法について説明します。

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

Hugoで複数のサイトを実行する必要がある場合に、1つのコマンドプロンプトから同時にサーバーを起動する方法について説明する。

ここでは、次のようにホームディレクトリ配下に複数のHugoプロジェクトがあると仮定する。

~/website/site1
~/website/site2
~/website/site3

各Hugoプロジェクトに対してHugoサーバーを起動するには、次のようにポート番号を変えて複数のHugoサーバーを起動できる。

$ hugo server -p 50001 -s ~/website/site1
$ hugo server -p 50002 -s ~/website/site2
$ hugo server -p 50003 -s ~/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

Linux、macOSの場合

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
}