Rails errorメモ【 Address already in use 】

$ rails s 実行時に下記のエラーが発生したのでメモ
Address already in use - bind(2) for "0.0.0.0" port 3000 (Errno::EADDRINUSE)

エラー内容

ローカルでサーバーを起動できなくなってしまった。。

$ rails s
=> Booting Puma
=> Rails 5.1.6 application starting in development 
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.9.1 (ruby 2.5.1-p57), codename: Private Caller
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:3000
Exiting
/Users/username/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/puma-3.9.1/lib/puma/binder.rb:269:in `initialize': Address already in use - bind(2) for "0.0.0.0" port 3000 (Errno::EADDRINUSE)

解決策

Errorメッセージを見ると、0.0.0.0:3000 はすでに使われているよ!
とのことなので、$ lsof -i:3000 でポート3000番を使用しているプロセスを確認

$ lsof -i:3000
COMMAND  PID     USER   FD   TYPE         DEVICE   SIZE/OFF NODE NAME  
ruby    4141  username  19u  IPv4 0x228ce2498105f021  0t0 TCP  *:hbci (LISTEN)  
ruby    5580  username  19u  IPv4 0x228ce2498105f021  0t0 TCP  *:hbci (LISTEN)  

なぜか2つもありました。。
killコマンドを使い実行中のプロセスを削除する $ kill -9 PID
再度 $ lsof -i:3000 を実行し何も表示されなければok

$ kill -9 4141
$ kill -9 5580
$ lsof -i:3000
# 何も表示されない

$ rails s を実行すると

$ rails s
=> Booting Puma
=> Rails 5.1.6 application starting in development 
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.9.1 (ruby 2.5.1-p57), codename: Private Caller
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop
Started GET "/" for 127.0.0.1 at 2019-10-19 10:00:40 +0900

正常にサーバーを起動することができました!