「Address already in use」エラーの解決方法


  1. ポートを変更する: 別の未使用のポートを選択し、アプリケーションのコードを変更してそのポートを使用するようにします。たとえば、ポート番号3000が既に使用されている場合、代わりにポート番号4000を使用することができます。
require 'sinatra'
set :port, 4000
get '/' do
  'Hello, World!'
end
  1. ポートを解放する: 既にポートを使用しているプロセスを特定し、終了させることによってポートを解放します。以下のコマンドを使用して、ポート3000を使用しているプロセスを特定し、終了させることができます。
lsof -i :3000

上記のコマンドは、ポート3000を使用しているプロセスの情報を表示します。そのプロセスのPIDを確認し、次のコマンドを使用してプロセスを終了させます。

kill -9 <PID>
  1. タイムアウトを設定する: ポートが解放されるまで待機する時間を設定します。一部のプログラミング言語やフレームワークでは、タイムアウトを指定するオプションが提供されています。これにより、ポートが解放されるまで待機することができます。

たとえば、Node.jsのExpressフレームワークでは、以下のようにタイムアウトを設定することができます。

const express = require('express');
const app = express();
const server = app.listen(3000, function () {
  console.log('Server running on port 3000');
});
server.on('error', function (err) {
  if (err.code === 'EADDRINUSE') {
    console.log('Address already in use, retrying...');
    setTimeout(function () {
      server.close();
      server.listen(3000);
    }, 1000);
  }
});
app.get('/', function (req, res) {
  res.send('Hello, World!');
});

上記のコードでは、ポート3000が既に使用されている場合、1秒後に再試行するように設定されています。