【初心者向け】Windowsで使用中のポートを確認する方法|ポートの競合トラブルを即解決!

Web

「ローカルサーバーが起動しない」
「ポートが既に使われているとエラーが出る」
——そんな時にまず確認したいのが「使用中のポート」です。

特にWindowsで開発環境を構築していると、ポートの競合はよくあるトラブルのひとつ。

この記事では、Windowsで現在使用されているポートを確認する方法を、コマンドプロンプトやPowerShellを使って初心者向けにわかりやすく解説します。

スポンサーリンク

準備

まず、PowerShellもしくはコマンドプロンプトを開いてください。

  1. タスクバー左下の検索窓(またはスタートボタン横の虫眼鏡)をクリック
  2. PowerShell」と入力
  3. 表示された「Windows PowerShell」をクリックで起動!
管理者として起動したい場合は
「Windows PowerShell」を右クリック →「管理者として実行」を選択

方法①:netstatコマンドで使用中のポートを確認

Windowsで最も一般的な方法は、netstat コマンドを使うことです。

基本コマンド:

netstat -ano

このコマンドは、現在のTCP・UDP接続とポートの使用状況をすべて表示します。

出力結果には以下の情報が含まれます:

項目内容
Proto通信プロトコル(TCP/UDP)
Local AddressローカルIPとポート番号
Foreign Address接続先IPとポート
State接続状態(LISTENINGなど)
PIDプロセスID(重要!)

見やすくするためのオプション

netstat コマンドにはさまざまなオプションがあります:

netstat -ano -p TCP

このコマンドは「TCPプロトコルのみ表示」する意味です。

また、待ち受け状態のポートだけを表示するには:

netstat -ano | findstr LISTENING

方法②:特定のポートを使っているプロセスを調べる

たとえば、「ポート3000が使われているか調べたい」という場合は以下のようにします:

netstat -ano | findstr :3000

このコマンドで、ポート3000を使っているプロセスのPID(プロセスID)**を特定できます。

表示例:

TCP    127.0.0.1:3000         0.0.0.0:0              LISTENING       1234

この例では、ポート3000を使用しているプロセスのPIDは「1234」だとわかります。

方法③:PIDから実行中のプログラムを確認する

PIDがわかったら、以下のコマンドでそのプロセスがどのプログラムかを調べることができます:

tasklist /FI "PID eq 1234"

1234 の部分は、netstat で確認した実際のPIDに置き換えてください。

表示例:

イメージ名                     PID セッション名     セッション#  メモリ使用量
========================= ======== ================ =========== ============
node.exe                      1234 Console                    1     60,234 K

この例では、ポート3000を使用しているのは「node.exe」プロセスだとわかります。

方法④:PowerShellでも確認可能

PowerShellでも同様のことができます。以下のコマンドを使えば、ポートとPIDを一覧で確認可能です。

Get-NetTCPConnection | Where-Object { $_.State -eq "Listen" } | Select-Object LocalAddress,LocalPort,OwningProcess

これにより、待ち受け状態(Listen)のTCP接続とそのプロセスIDが一覧表示されます。

プロセス名を含めた詳細情報を表示

さらに、プロセス名も含めた詳細情報を表示するには:

Get-NetTCPConnection | Where-Object { $_.State -eq "Listen" } | ForEach-Object {
    $process = Get-Process -Id $_.OwningProcess
    [PSCustomObject]@{
        LocalAddress = $_.LocalAddress
        LocalPort = $_.LocalPort
        ProcessId = $_.OwningProcess
        ProcessName = $process.Name
    }
} | Sort-Object LocalPort

特定のポートだけをチェックするなら:

Get-NetTCPConnection -LocalPort 3000 -State Listen

その後、詳細を確認するには:

Get-Process -Id プロセスID

使用中のポートを解放する方法(注意が必要!)

ポートの競合が発生していて、どうしても該当プロセスを停止したい場合は以下のコマンドで可能です:

taskkill /PID 1234 /F

※システムに必要なプロセスを終了すると、OSが不安定になる場合があるため、実行前に必ずプロセス名を確認してください。

より安全なプロセス停止方法

まずは、強制終了せずに通常の終了を試してみましょう:

taskkill /PID 1234

それでも終了しない場合に /F(強制終了)オプションを使います。

プロセス名で停止する方法

PIDがわかりにくい場合は、プロセス名で停止することも可能です:

taskkill /IM "node.exe" /F

ただし、この方法は同じ名前のプロセスがすべて終了してしまうため、注意が必要です。

よくあるポート競合と対処法

Web開発でのポート競合

ポート3000、8080、4200などはWeb開発でよく使われるポートです。これらが使用中の場合:

  1. 該当のサーバーを別のポートで起動 npm start -- --port 3001
  2. 既存のプロセスを安全に終了 taskkill /PID プロセスID

システムサービスとの競合

ポート80(HTTP)、443(HTTPS)などのシステムポートは、IISやApacheなどのWebサーバーが使用していることがあります。

これらのサービスは「サービス」管理コンソールから一時停止または無効化することができます:

  1. services.msc を実行
  2. 該当のサービスを探して右クリック
  3. 「停止」を選択

まとめ|Windowsでのポート確認はトラブル解決の第一歩

ポートの確認は、エンジニアであれば必ず知っておきたい基本スキルです。

特にWeb開発やDocker、ローカルサーバーを扱う場面では、「使用中のポートをすぐに確認できる」ことでトラブル対応がスムーズになります。

ポイントまとめ

  • netstat -ano で全ポートとPIDを一覧表示
  • findstr と組み合わせて特定ポートの使用状況を確認
  • tasklistPowerShell で実行中のプロセス名を特定
  • 必要なら taskkill でプロセス停止も可能(慎重に!)

便利なコマンド集

REM 特定ポート(例:8080)を使用しているプロセスを特定
netstat -ano | findstr :8080

REM LISTENINGステータスのすべてのポートを表示
netstat -ano | findstr LISTENING

REM 特定のポートを使用しているプロセス名を直接表示
for /f "tokens=5" %a in ('netstat -ano ^| findstr :3000') do tasklist /fi "pid eq %a"

コメント

タイトルとURLをコピーしました