Webアプリケーションの開発時は、hot reload(live reload) があるとソースコードを変更したら勝手に反映してくれて便利です。
Go で有名なところだと https://github.com/air-verse/air や https://github.com/go-task/task などがあります。
これらのツールを使うと簡単にホットリロードが実現できるのですが、サーバーの終了に失敗してportが使用中のままになってしまい再起動に失敗することがちょくちょく発生していたため、確実にサーバーを停止してから起動するよう対策しました。
ちなみにサーバーは Graceful shutdown しています。
PIDを記録する
サーバー起動時に、プロセスIDをファイルに記録するようにします。
<executable> --pid-file=<filename>
とすることでオプションで指定したファイルに出力されます。
ホットリロードの設定
ここではgo-taskを使います。
Taskfile.ymlを次のようにします。
task -w
でファイル監視を有効にして実行します。
これで sources
に指定されたファイルを変更すると、サーバーを確実に停止してから自動で再ビルド、再起動されるようになりました。